我必须为大学的编程模块编写一个Conways生命模拟游戏。该程序的工作原理是在每次迭代中正确计算邻居的数量。它应该如何工作:
Current State Neighbors Next State
Alive 2 Alive
Alive 3 Alive
Alive <2 Dead
Alive >3 Dead
Dead 3 Alive
每次更改单元状态时,其周围的8个单元格邻居字段将递增或递减。
public static Cell[][] updateGrid(Cell[][] theMatrix){
Cell[][] copy = new Cell[DIMENSIONX][DIMENSIONY];
for(int x = 0; x < DIMENSIONX; x++){
for(int y = 0; y < DIMENSIONY; y++ ){
copy[x][y] = theMatrix[x][y];
}
}
int increment;
for(int x = 0; x < DIMENSIONX; x++){
for(int y = 0; y < DIMENSIONY; y++ ){
//Underpopulation
if((copy[x][y].alive == false)&&(copy[x][y].neighbours == 3)){
theMatrix[x][y].alive = true;
increment = 1;
theMatrix = addNeighbours(theMatrix, increment, x,y);
}
//Over Population
else if((copy[x][y].alive==true)&&(copy[x][y].neighbours > 3)){
theMatrix[x][y].alive = false;
increment = -1;
theMatrix = addNeighbours(theMatrix, increment, x,y);
}
}
}
return theMatrix;
}
感谢您花时间看看伙计们! 〜保罗
答案 0 :(得分:1)
您没有对活细胞进行所有检查。您还需要检查单元格其他参数
你有:
for(int x = 0; x < DIMENSIONX; x++){
for(int y = 0; y < DIMENSIONY; y++ ){
//Underpopulation
if((copy[x][y].alive == false)&&(copy[x][y].neighbours == 3)){
theMatrix[x][y].alive = true;
increment = 1;
theMatrix = addNeighbours(theMatrix, increment, x,y);
}
//Over Population
else if((copy[x][y].alive==true)&&(copy[x][y].neighbours > 3)){
theMatrix[x][y].alive = false;
increment = -1;
theMatrix = addNeighbours(theMatrix, increment, x,y);
}
}
}
简洁之处是:
for all cells of the grid:
if dead and neighbor count is 3, make alive
if alive and neighbor count is > 3 make dead
你需要:
for all cells of the grid:
if dead and neighbor count is 3, make alive
if alive and neighbor count is > 3 make dead
if alive and neighbor count is 0 or 1 make dead // ** need this
另请注意,在if块中,请勿使用== false
,例如
if((copy[x][y].alive == false) && .....
取而代之的是
if((!copy[x][y].alive) && .....
答案 1 :(得分:0)
您的评论需要一些工作。 “人口不足”线并没有真正测试人口不足。它正在测试创造:当一个死细胞正好有三个活着的邻居时,就会产生新的生命。
你根本没有人口密集的测试。这就是活细胞死亡的地方少于2个活着的邻居来支撑它。
最容易解决的问题是将“人口过剩”测试修改为“过度/不足”灭绝:
//Overpopulation or underpopulation
else if ( (copy[x][y].alive==true) &&
( copy[x][y].neighbours > 3 || copy[x][y].neighbours< < 2) ) {
theMatrix[x][y].alive = false;
increment = -1;
theMatrix = addNeighbours(theMatrix, increment, x,y);
}
确保addNeighbors
正在使用新值创建new Cell
对象,否则您将遇到其他问题。