Tugasnya adalah menggambar chip pada cookie yang seharusnya pada titik acak sambil menghitung setiap chip dan menyimpan koordinatnya sehingga setiap chip tidak bergerak. Setiap chip harus memiliki warna yang berbeda dan dimulai dengan menekan mouse.

Saya sudah mencoba memasukkan koordinat ke dalam array, beberapa array satu daftar array dan mencoba menggunakan loop if dan for. Hasil sebelumnya adalah bahwa itu akan menghasilkan satu chip dengan warna berbeda setiap klik (semacam karena terkadang nomor acak yang dihasilkan berada di luar rentang yang saya tentukan). Setelah menggunakan dan mengulang melalui beberapa daftar array, perilaku saat ini adalah menghasilkan kisi dan hitungannya tumbuh secara eksponensial dengan setiap klik, beberapa titik memiliki banyak tumpang tindih dan chip di kisi semuanya memiliki satu warna yaitu yang terakhir ditugaskan

//Letakkan kode grafis di sini public void draw(Graphics g){

Koordinat 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){




     }

Hasil yang diharapkan pada dasarnya adalah piringan berbintik yang menghitung setiap bintik pada piringan dengan setiap bintik tidak bergerak.

Saat ini tampaknya tidak ada titik yang bergerak tetapi tidak banyak keacakan pada apa yang terjadi. bintik-bintik mengalikan setiap klik vs iterate dan membentuk grid.

0
Chadrick Hollingsworth 6 Agustus 2019, 19:54

1 menjawab

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

Jauh lebih mudah untuk melacak koordinat daripada menggunakan dua daftar terpisah. Semuanya terjadi dalam format kisi karena Anda menggunakan loop for bersarang untuk i dan j.

Anda sedang melakukan: jika i = 0, 1, 2 dan j = 0, 1, 2

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

Sehingga Anda dapat melihat dari mana tata letak seperti kisi itu berasal. Menggunakan objek Point, Anda bisa melakukan:

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);
    }
}

Saya tidak yakin mengapa Anda menggunakan penghitung, karena akan bekerja untuk panjang koordinat. Jika Anda ingin menambahkan keacakan, maka Anda dapat membuat nilai secara dinamis menggunakan kelas Acak.

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

Dan jika Anda ingin melakukan posisi acak, Anda dapat membuatnya secara acak melalui:

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

Edit dengan kode Anda:

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);
    }
 }      

Sunting #2: berikut adalah contoh bagaimana Anda akan memiliki variabel statis

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;
1
omoshiroiii 6 Agustus 2019, 19:49