gpt4 book ai didi

Java 生命游戏没有正确检查邻居

转载 作者:行者123 更新时间:2023-11-30 08:36:20 25 4
gpt4 key购买 nike

我为我的生命游戏设置了一个初始的细胞模式 (initial state screenshot) 来进化,但代码似乎没有正确地进化细胞。相反,它会停止 here ,但这一代人不应该是这个样子。 (对于给您带来的不便,我深表歉意,但由于缺乏声誉,我无法发布状态应该是什么样子)。我查看了我的进化方法,但我似乎找不到问题,因为我相信所有周围的细胞都被考虑在内了。非常感谢您的帮助。

public void setCellAlive (int row, int col){
if (row <= numberRows){
colony [row][col] = 1;
}else{
System.out.println ("Index out of range.");
}
}
public void setCellDead (int row, int col){
if (row <= numberRows){
colony [row][col]=0;
}else{
System.out.println ("Index out of range.");
}
}
private void evolution(int i, int j) {
int left = 0, right = 0, up = 0, down = 0;
int topLeft = 0, topRight = 0, bottomLeft = 0, bottomRight = 0;

if (j < colony.length - 1) {
right = colony[i][j + 1];
if(i>0)
bottomRight = colony[i - 1][j + 1];
if (i < colony.length - 1)
topRight = colony[i + 1][j + 1];
}

if (j > 0) {
left = colony[i][j - 1];
if (i > 0)
bottomLeft = colony[i - 1][j - 1];
if (i< colony.length-1)
topLeft = colony[i + 1][j - 1];
}

if (i > 0)
up = colony[i + 1][j];
if (i < colony.length - 1)
down = colony[i - 1][j];

int sum = left + right + up + down + topLeft + topRight
+ bottomLeft + bottomRight;

if (colony[i][j] == 1) {
if (sum < 2)
setCellDead (i,j);
if (sum > 3)
setCellDead(i,j);
}

else {
if (sum == 3)
setCellAlive (i,j);
}

}
public void updateColony() {
for (int i = 0; i < colony.length; i++) {
for (int j = 0; j < colony[i].length; j++) {
evolution(i, j);
}
}
}

最佳答案

你正在改变数组的值,然后使用新的(而不是旧的)值来决定更多单元格的状态。解决方案是在每次 tick 时创建一个新数组,然后使用旧数组设置其值:

public void updateColony() {
int [][] nextStep = new int[colony.length][colony[0].length];
for (int i = 0; i < colony.length; i++) {
for (int j = 0; j < colony[i].length; j++) {
evolution(nextStep, i, j);
}
}
colony = nextStep;
}

关于Java 生命游戏没有正确检查邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com