gpt4 book ai didi

java - 如何使用数组列表存储坐标以在固定区域内绘制不同颜色的随机点?

转载 作者:行者123 更新时间:2023-12-02 09:37:26 24 4
gpt4 key购买 nike

任务是在假定的 cookies 上随机点绘制筹码,同时计算每个筹码并存储坐标,以便每个筹码都不会移动。每个芯片应该是不同的颜色,并通过按下鼠标启动。

我尝试将坐标放入一个数组中,将多个数组放入一个数组列表中,并尝试使用 if 和 for 循环。之前的结果是每次点击都会生成一个不同颜色的单个芯片(有点因为有时生成的随机数超出了我指定的范围)。使用并循环多个数组列表后,当前的行为是它生成一个网格,并且计数随着每次单击呈指数增长,某些点有很多重叠,并且网格中的芯片都是一种颜色,即最后分配的颜色

//此处放置图形代码 公共(public)无效绘制(图形g){

ArrayList 坐标 = new ArrayList();

  col1= generator.nextInt(256) + 0;
col2= generator.nextInt(256) + 0;
col3= generator.nextInt(256) + 0;

canvasMaxWidth=800;
canvasMaxHeight=600;
canvasMinWidth=400;
canvasMinHeight=200;

int newX = (int) (Math.random() * canvasMaxWidth) + canvasMinWidth;
int newY = (int) (Math.random() * canvasMaxHeight) + canvasMinHeight;
Point point = new Point(newX, newY);


g.setColor(new Color(205,133,63));
g.fillOval(canvasMinWidth,canvasMinHeight,400,400);



for(Point point : coordinates){
if(point.y > 249 && point.y < 549 && point.x > 449 && point.x < 749){
g.setColor(new Color(col1, col2, col3));
g.fillOval(point.x, point.y, 7, 7);
}
}

g.setColor(Color.black);
g.drawString("Number of Sprinkles: "+ count, 100, 80);


}

//Code to respond to a mouse press
public void mousePressed(MouseEvent mouse){




}

预期的结果本质上是一个有 Blob 的磁盘,它对磁盘上的每个 Blob 进行计数,每个 Blob 不移动。

目前看来没有任何进展,但正在发生的事情并没有太多的随机性。 Blob 将每次点击与迭代相乘并形成网格。

最佳答案

ArrayList<Point> coordinates = new ArrayList<Point>();

比使用两个单独的列表更容易跟踪坐标。一切都以网格格式发生,因为您正在为 i 和 j 使用嵌套 for 循环。

您当前正在执行:如果 i = 0, 1, 2 并且 j = 0, 1, 2

i  j
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2

这样你就可以看到类似网格的布局来自哪里。使用 Point 对象,您可以这样做:

for(Point point : coordinates){
if(point.y > 249 && point.y < 549 && point.x > 449 && point.x < 749){
g.setColor(new Color(col1, col2, col3);
g.fillOval(point.x, point.y, 7, 7);
}
}

我不确定您为什么要使用计数器,因为它将针对坐标的长度执行操作。如果您想添加随机性,则可以使用 Random 类动态创建值。

int colorValue = (int) (Math.random() * 255);

如果您想执行随机位置,您可以通过以下方式随机生成它们:

int newX = (int) (Math.random() * (canvasMaxWidth - canvasMinWidth)) + canvasMinWidth;
int newY = (int) (Math.random() * (canvasMaxHeight - canvasMinHeight)) + canvasMinHeight;
Point point = new Point(newX, newY);

使用您的代码进行编辑:

int newX = (int) (Math.random() * (canvasMaxWidth - canvasMinWidth)) + canvasMinWidth;
int newY = (int) (Math.random() * (canvasMaxHeight - canvasMinHeight)) + canvasMinHeight;
Point point = new Point(newX, newY);
coordinates.add(point);
counter++;

redList.add((int) (Math.random() * 255));
greenList.add((int) (Math.random() * 255));
blueList.add((int) (Math.random() * 255));

g.setColor(new Color(205,133,63));
g.fillOval(canvasMinWidth,canvasMinHeight,400,400);



for(int z = 0; z < coordinates.size(); z++){
if(coordinates.get(z).y > 249 && coordinates.get(z).y < 549 && coordinates.get(z).x > 449 && coordinates.get(z).x < 749){
g.setColor(new Color(redList.get(z).intValue(), greenList.get(z).intValue(), blueList.get(z).intValue()));
g.fillOval(coordinates.get(z).x, coordinates.get(z).y, 7, 7);
}
}

编辑#2:这里是如何使用静态变量的示例

public class myClass{
static ArrayList<Point> coordinates = new ArrayList<Point>();
static ArrayList<Integer> redList = new ArrayList<Integer>();
static ArrayList<Integer> greenList = new ArrayList<Integer>();
static ArrayList<Integer> blueList = new ArrayList<Integer>();
static int counter = 0;

关于java - 如何使用数组列表存储坐标以在固定区域内绘制不同颜色的随机点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com