-1
所以,代碼編譯和運行完美。然而,通常,康威的生命遊戲會在一段時間後穩定下來,而這段代碼無限期地運行而沒有死亡分支,如果有人能夠幫助我找出原因,我很樂意。康威的加工生命遊戲
int[][] world;
int SCALE_FACTOR = 4;
float DENSITY = 0.1;
void setup() {
size(500,500);
world = new int[width/SCALE_FACTOR][height/SCALE_FACTOR];
for(int i = 0; i < width/SCALE_FACTOR; i++) {
for (int j = 0; j < height/SCALE_FACTOR; j++) {
int r = (int)random(100);
world[i][j] = r % (int)(1/DENSITY) == 0 ? 1 : 0;
}
}
frameRate(1);
stroke(0, 255, 0);
}
void draw() {
scale(SCALE_FACTOR);
background(0);
for(int i = 0; i < width/SCALE_FACTOR; i++) {
for (int j = 0; j < height/SCALE_FACTOR; j++) {
if (world[i][j] == 1) point(i, j);
}
}
lifeCycle();
}
void lifeCycle() {
int[][] newworld = new int[width/SCALE_FACTOR][height/SCALE_FACTOR];
for(int i = 0; i < width/SCALE_FACTOR; i++) {
for (int j = 0; j < width/SCALE_FACTOR; j++) {
if (world[i][j] == 1) {
if (neighbours(i, j) == 3) {
newworld[i][j] = 1;
} else {
newworld[i][j] = 0;
}
} else {
if (neighbours(i, j) == 2 || neighbours(i, j) == 3) {
newworld[i][j] = 1;
} else {
newworld[i][j] = 0;
}
}
}
}
for (int i = 0; i < width/SCALE_FACTOR; i++) {
for (int j = 0; j < height/SCALE_FACTOR; j++) {
world[i][j] = newworld[i][j];
}
}
}
int neighbours(int x, int y) {
int px = (x == width/SCALE_FACTOR - 1) ? 0 : (x+1);
int py = (y == height/SCALE_FACTOR - 1) ? 0 : (y+1);
int mx = (x == 0) ? (width/SCALE_FACTOR - 1) : (x-1);
int my = (y == 0) ? (height/SCALE_FACTOR - 1) : (y-1);
return world[mx][my] + world[mx][y] + world[mx][py]
+ world[x][my] + world[x][py]
+ world[px][my] + world[px][y] + world[px][py];
}
我想說這更適合http://codereview.stackexchange.com/ – 2013-02-28 19:20:24
一般策略:單元測試它的每一塊。它看起來像if語句的分支在查看當前單元格是否存在或不存在時是落後的。也就是說,一個死細胞應該與三個鄰居一起活着,一個活細胞應該與2/3個鄰居共存。 – bchurchill 2013-02-28 19:21:21
請記住,第一次來這裏,謝謝安德魯 – 2013-02-28 19:28:38