Od paru dni próbuję zrobić grę, może ktoś orientuje się, dlaczego ona mi się zawiesza po narysowaniu tych kółek?
Wiem, że jakiś jest problem z pętlą while... ale nie rozumiem dlaczego...
Z góry dzięki
package starter;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements MouseListener {
int[] list = new int[9];
ArrayList<Integer> listaZajetych = new ArrayList<Integer>();
final int x = 80;
final int y = 80;
final int a = 20;
// x,y o ile przesunąć w prawo, lewo, góra dół, a - wyśrodkować w polu pola
public MyPanel() {
setLayout(new BorderLayout());
addMouseListener(this);
for (int i = 0; i < 9; i++) {
list[i] = 0;
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
setBackground(Color.WHITE);
drawLines(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
randomCircle(g2);
}
public void drawCircle(Graphics2D g2, int ktory) {
g2.setStroke(new BasicStroke(4.0f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
g2.setColor(Color.RED);
if (ktory == 0) {
g2.draw(new Ellipse2D.Double(0 + x + a, 0 + y + a, 50, 50));
list[0] = 1;
} else if (ktory == 1) {
g2.draw(new Ellipse2D.Double(100 + x + a, 0 + y + a, 50, 50));
list[1] = 1;
} else if (ktory == 2) {
g2.draw(new Ellipse2D.Double(200 + x + a, 0 + y + a, 50, 50));
list[2] = 1;
} else if (ktory == 3) {
g2.draw(new Ellipse2D.Double(0 + x + a, 100 + y + a, 50, 50));
list[3] = 1;
} else if (ktory == 4) {
g2.draw(new Ellipse2D.Double(100 + x + a, 100 + y + a, 50, 50));
list[4] = 1;
} else if (ktory == 5) {
g2.draw(new Ellipse2D.Double(200 + x + a, 100 + y + a, 50, 50));
list[5] = 1;
} else if (ktory == 6) {
g2.draw(new Ellipse2D.Double(0 + x + a, 200 + y + a, 50, 50));
list[6] = 1;
} else if (ktory == 7) {
g2.draw(new Ellipse2D.Double(100 + x + a, 200 + y + a, 50, 50));
list[7] = 1;
} else if (ktory == 8) {
g2.draw(new Ellipse2D.Double(200 + x + a, 200 + y + a, 50, 50));
list[8] = 1;
}
/*
* if((zx+x)<(100+x) && (zy+y)<(100+y)){ list[0]=1; } if((zx+x)<(200+x)
* && (zy+y)<(100+y) && (zx+x>(100+x)) && (zy+y)>0){ list[1]=1; }
* if((zx+x)<(300+x) && (zy+y)<(100+y) && (zx+x>(200+x)) && (zy+y)>0){
* list[2]=1; } if((zx+x)<(100+x) && (zy+y)<(100+y) && (zx+x>(200+x)) &&
* (zy+y)>0){ list[2]=1; }
*/
}
public void randomCircle(Graphics2D g2) {
Random r = new Random();
int wylosowany = 999;
if (listaZajetych.size() == 0) {
wylosowany = r.nextInt(9);
drawCircle(g2, wylosowany);
listaZajetych.add(wylosowany);
} else {
wylosowany = r.nextInt(9);
if(czyBylo(wylosowany, listaZajetych)){
while(czyBylo(wylosowany, listaZajetych)){
wylosowany = r.nextInt(9);
}
}
}
drawCircle(g2, wylosowany);
listaZajetych.add(wylosowany);
}
public boolean czyBylo(int liczba, ArrayList<Integer> lista) {
boolean b = false;
for (int i = 0; i < lista.size(); i++) {
if (lista.get(i).equals(liczba)) {
b = true;
break;
}
}
if (b == true) {
return true;
} else {
return false;
}
}
public void drawLines(Graphics2D g2) {
float dash[] = { 10.10f };
Stroke lineStroke = new BasicStroke(3.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 10.0f, dash, 15.0f);
g2.setStroke(lineStroke);
g2.setColor(Color.BLACK);
g2.draw(new Line2D.Double(100 + x, 0 + y, 100 + x, 300 + y));
g2.draw(new Line2D.Double(200 + x, 0 + y, 200 + x, 300 + y));
g2.draw(new Line2D.Double(0 + x, 100 + y, 300 + x, 100 + y));
g2.draw(new Line2D.Double(0 + x, 200 + y, 300 + x, 200 + y));
}
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}