Ich finde Conway's Game of Life sehr faszinieren und wollte deshalb es mal selbst in Java umsetzten. Doch beim Ausführen habe ich gemerkt, dass statt der schönen Muster und Formen, sich meine Zellen einfach nur ausbreiten.
Ich kann den Fehler nicht finden und fände es toll, wenn ihr mir sagen könntet was ich falsch mache...
Ich kann den Fehler nicht finden und fände es toll, wenn ihr mir sagen könntet was ich falsch mache...
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class GameOfLife extends JFrame {
private BufferedImage img;
private int black;
private int white;
public GameOfLife() {
super("");
//setSize(Toolkit.getDefaultToolkit().getScreenSize());
setSize(200, 200);
setUndecorated(true);
img = new BufferedImage(getWidth(), getHeight(), 1);
black = new Color(0,0,0).getRGB();
white = new Color(255,255,255).getRGB();
for(int x = 0; x < getWidth(); x++) {
for(int y = 0; y < getHeight(); y++) {
img.setRGB(x, y, Math.random()*5 > 1 ? black : white);
//img.setRGB(x, y, black);
}
}
setCursor(getToolkit().createCustomCursor(new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),"null"));
setVisible(true);
}
private void run() {
do {
repaint();
try {
Thread.sleep(100);
} catch(Exception e) {
}
} while(true);
}
public void paint(Graphics g) {
super.paint(g);
BufferedImage temp = img.getSubimage(0, 0, img.getWidth(), img.getHeight());
for(int x = 0; x < getWidth(); x++) {
for(int y = 0; y < getHeight(); y++) {
int c = getNeigbours(x, y);
int col;
if(img.getRGB(x, y) == white) {
if(c == 2 || c == 3) {
col = white;
} else {
col = black;
}
} else {
if(c == 3) {
col = white;
} else {
col = black;
}
}
temp.setRGB(x, y, col);
}
}
img = temp.getSubimage(0, 0, temp.getWidth(), temp.getHeight());
g.drawImage(img, 0, 0, this);
}
private int getNeigbours(int x, int y) {
int count = 0;
for(int i = x-1; i <= x+1; i++) {
if(i < 0 || i > getWidth()-1) {
return 8;
}
for(int j = y-1; j <= y+1; j++) {
if(j < 0 || j > getHeight()-1) {
return 8;
}
if(img.getRGB(i, j) == white) {
count++;
}
}
}
return count;
}
public static void main(String[] args) {
new GameOfLife().run();
}
}
Zuletzt bearbeitet von einem Moderator: