import processing.core.PApplet;
import static java.lang.System.out;
public class GoL2 extends PApplet {
int rectSideLength = 25; // rectSideLength = length of each side of the rectangles drawn that represent cells
int generation = 0;
int windowWidth = 1920;
int windowHeight = 950;
int[][] currentGeneration = new int[windowWidth][windowHeight]; // currentGeneration = 2D array to gold cell values of current generation
int[][] nextGeneration = new int[windowWidth][windowHeight]; // nextGeneration = 2D array to hold cell values of next generation
int sumOfNeighbors;
int temporarySumOfNeighbors;
int counter;
public static void main(String[] args) {
PApplet.main("GoL2");
}
public void settings() {
size(windowWidth, windowHeight);
}
int numRectWidth = width/rectSideLength; // numRectWidth = the number of rectangles wide that will fit in the x axis of window
int numRectHeight = height/rectSideLength; // numRectHeight = the number of rectangles that will fit in the y axis of window
// The previous statements are here because they need the size of the frame to
// be set in order to accurately set the variables, lest they end up equal to 100
/* public void setup() {
* background(255);
* frameRate(1);
* for (int y = 0; y < windowHeight; y++) { // For each row,
* for (int x = 0; x < windowWidth; x++) { // For each element in the current row,
* currentGeneration[x][y] = (int) random(0, 2); // Set element (cell) equal to either 0 or 1 (on or off)
* }
* }
* } */
public void setup() {
background(255);
frameRate(1);
for (int y = 0; y < windowHeight; y++) { // For each row,
for (int x = 0; x < windowWidth; x++) { // For each element in the current row,
currentGeneration[x][y] = 0; // Set element (cell) equal to either 0 or 1 (on or off)
}
}
currentGeneration[25][25] = 1;
currentGeneration[25][26] = 1;
currentGeneration[25][27] = 1;
currentGeneration[26][27] = 1;
currentGeneration[27][26] = 1;
}
public void draw() {
numRectWidth = width/rectSideLength;
numRectHeight = height/rectSideLength;
displayCurrentGeneration();
try {
Thread.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
fill(255, 20, 147);
textSize(30);
text(generation, 20, 30);
textSize(10);
text("25,25", 625, 645);
text("24,27", 600, 695);
text(generation, 580, 695);
generation++;
generateNextGeneration();
}
public void displayCurrentGeneration() {
background(255);
for (int y = 0; y < 950; y++) { // For each row,
for (int x = 0; x < 1920; x++) { // For each element in the current row,
if (currentGeneration[x][y] == 0) { // If element equals zero, make rectangle white
fill(255);
stroke(0);
} else if (currentGeneration[x][y] == 1) { // If element equals one, make rectangle black
fill(0);
stroke(255);
} else {
out.println("Inappropriate value for currentGeneration[" + x + "][" + y + "]. Value: "
+ currentGeneration[x][y] + ", generation: " + generation);
}
rect(x * rectSideLength, y * rectSideLength, rectSideLength, rectSideLength); // Display rectangle (cell)
}
}
// out.println("Generation " + generation);
}
public void generateNextGeneration() {
out.println("Generating gen " + generation);
for (int y = 1; y < numRectHeight - 1; y++) { // For each row,
for (int x = 1; x < numRectWidth - 1; x++) { // For each element in the current row,
sumOfNeighbors = 0;
sumOfNeighbors = getSumOfNeighbors(x, y);
if (sumOfNeighbors != 2 && sumOfNeighbors != 3) { // Death
nextGeneration[x][y] = 0;
} else if (sumOfNeighbors == 3 && currentGeneration[x][y] == 0) { // Birth
nextGeneration[x][y] = 1;
} else if ((sumOfNeighbors == 2 || sumOfNeighbors == 3) && currentGeneration[x][y] == 1) { // Stasis
nextGeneration[x][y] = 1;
}
}
}
currentGeneration = nextGeneration.clone();
}
public int getSumOfNeighbors(int xAxis, int yAxis) {
temporarySumOfNeighbors = 0;
for (int i = -1; i < 2; i++) {
for (int j = -1; j < 2; j++) {
if (xAxis == 24 && yAxis == 27 && j != 0 && i != 0) {
out.println("X" + j + ", Y" + i + ":: " + currentGeneration[xAxis + j][yAxis + i]);
} else if (xAxis == 24 && yAxis == 27 && j == 0 && i != 0) {
out.println("X" + ", Y" + i + ":: " + currentGeneration[xAxis + j][yAxis + i]);
} else if (xAxis == 24 && yAxis == 27 && j != 0 && i == 0) {
out.println("X" + j + ", Y" + ":: " + currentGeneration[xAxis + j][yAxis + i]);
} else if (xAxis == 24 && yAxis == 27 && j == 0 && i == 0) {
out.println("X" + ", Y" + ":: " + currentGeneration[xAxis + j][yAxis + i]);
}
temporarySumOfNeighbors += currentGeneration[xAxis + j][yAxis + i];
}
}
temporarySumOfNeighbors -= currentGeneration[xAxis][yAxis];
if (temporarySumOfNeighbors > 8) {
out.println("temporarySumOfNeighbors > 8: " + temporarySumOfNeighbors);
}
if (xAxis == 24 && yAxis == 27) {
out.println("Generation: " + generation + "- " + xAxis + ", " + yAxis + ": " + temporarySumOfNeighbors);
}
return temporarySumOfNeighbors;
}
}
http://pastebin.com/GH51hXzJWarum sind die Generationen in meinem Spiel des Lebens (mit Verarbeitung) außer Betrieb?
Ich bin ein Anfänger versuchen, das Spiel des Lebens zu kodieren, und ich bin nicht sicher, wie die Quelle meiner Probleme zu finden. Ich habe das Spiel so eingestellt, dass ich einfach mit einem einfachen Segelflugzeug im Setup starte und glaube, dass ich die Auswirkungen des Problems gefunden habe.
Ich setze Marker auf die Zellen, um sie zu verfolgen. Wenn Sie Zelle (24,27) ansehen, sehen Sie mindestens ein Beispiel des Problems. In der Konsole drucke ich die Umgebung dieser Zelle während des ganzen Laufs des Programms aus. Es scheint irgendwie die Nachbarschaft zu erkennen, die (24,27) in Generation 2 in Generation 1 haben wird und umgekehrt (unter der Annahme, dass die erste Generation Generation 0 ist). Ich bin mir nicht sicher, wie ich das erklären soll, aber wenn Sie die Konsolenausgabe untersuchen und sich die Nachbarschaften ansehen, sehen Sie, dass sie die Nachbarschaft von Generation 2 in Generation 1 erkennt und umgekehrt. Wenn (24,27) in Generation 1 3 Nachbarn sind, wird es erst in Generation 3 lebendig, während es in Generation 2 nur 2 Nachbarn hat.
Bitte lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben, finde ich es schwierig, mein Problem zu erklären.
Das Problem wird mehr hier erklärt: http://imgur.com/gallery/iRc07/new
Danke
Vielen Dank für die Hilfe, ich schätze es wirklich. Ich habe das Spiel des Lebens abgeschlossen und trotz ein bisschen (Input?) Verzögerung funktioniert es perfekt. Ich werde zu einem späteren Zeitpunkt in Ihre Vorschläge bezüglich der Arrays innerhalb der Funktionen schauen, denn jetzt bin ich einfach glücklich, dass es funktioniert. – sirmax224
@ sirmax224 Das ist großartig. Wenn Sie nicht von meinem Profilbild erzählen können, bin ich ein großer Fan des Spiels des Lebens (und Verarbeitung!). Freut mich zu hören, dass du es sortiert hast. Ich würde vermuten, dass Ihre Verzögerung dadurch verursacht wird, dass Sie eine Reihe von Zellen zeichnen, die Sie nicht zeigen. Lassen Sie mich wissen, wenn Sie weitere Fragen haben! –