Hallo,
Ich wollte ein GameofLife programmieren. Die zufällig erzeugte Welt flackert einmal kurz auf und das Panel bleibt dann grau, aber der Generationen Zähler zählt weiter hoch. Könnte mir jemand einen Tipp geben woran das liegt?
Schon mal Danke im Vorraus.
Ich wollte ein GameofLife programmieren. Die zufällig erzeugte Welt flackert einmal kurz auf und das Panel bleibt dann grau, aber der Generationen Zähler zählt weiter hoch. Könnte mir jemand einen Tipp geben woran das liegt?
Schon mal Danke im Vorraus.
Java:
import java.awt.*;
import java.util.Random;
import javax.swing.*;
public class GameofLife extends JPanel {
static Thread m = new Thread(new MyThread());
private int[][] Welt = new int[200][200];
private int GenerationenZähler;
final static GameofLife Feld = new GameofLife(600, 600);
public GameofLife(int Breite, int Höhe) {
setName("Conways Game of Life");
Welterzeugen();
}
private void Welterzeugen() { // Welt wird zufällig gefüllt
for (int a = 0; a < 200; a++) {
for (int b = 0; b < 200; b++) {
if (Math.random() > 0.8)
Welt[a][b] = 1; // lebendig
else
Welt[a][b] = 0; // tot
}
}
}
public void updateWelt() { // regelen werden angewendet
for (int a = 0; a < 200; a++) {
for (int b = 0; b < 200; b++) {
wendeRegelnAn(a, b);
}
}
}
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
private void wendeRegelnAn(int a, int b) { // Populationregeln
int nachbarn = 0;
if (a >= 1 && b >= 1 && a <= 198 && b <= 198) {
for (int i = a - 1; i <= a + 1; ++i) {
for (int j = b - 1; j <= b + 1; ++j) {
if (Welt[i][j] == 1) // Nachbar werden gezählt
nachbarn += 1;
if (Welt[i][j] == 0) {
nachbarn -= 1;
}
}
}
}
if (Welt[a][b] == 1) { // zur Zeit t lebendig
if ((nachbarn < 2) || (nachbarn > 3)) {
Welt[a][b] = 0; // Zelle tot
}
}
if ((nachbarn == 2) || (nachbarn == 3)) {
Welt[a][b] = 1;
}
if (Welt[a][b] == 0 && nachbarn == 3) {
Welt[a][b] = 1;
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Generation: " + GenerationenZähler++, 0, 10);
for (int a = 1; a < 199; a++) {
for (int b = 1; b < 199; b++) {
if (Welt[a][b] == 1) {
g.setColor(Color.red);
g.fillRect(a * 3, b * 3, 3, 3);
}
}
}
}
static class MyThread extends Thread {
public void run() {
while (true) {
try {
Thread.sleep(100);
Feld.updateWelt();
Feld.repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(Feld);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
m.start();
}
}
[/code=Java]