gpt4 book ai didi

java - 康威的生命游戏更新(下一代)

转载 作者:行者123 更新时间:2023-11-29 03:33:02 26 4
gpt4 key购买 nike

我正在编写 Conway 的生命游戏 java 代码,我正在努力使用我的更新方法(也称为下一代创建者)。我将发布我到目前为止编写的代码,请让我知道我可以做些什么来修复更新方法。

如果在时间 T 没有细胞,则细胞诞生1 并且它的三个邻居还活着。

如果在时间 T,现有细胞仍然存活1 有两个或三个邻居

如果在时间 T,一个细胞因隔离而死亡1 邻居少于两个。

如果在时间 T 时,细胞会因过度拥挤而死亡1 有三个以上的邻居。

public class GameOfLife {

private char [][] grid;
private int rows;
private int columns;

public GameOfLife(int rows, int columns) {
grid=new char[rows][columns];
for(int i=0;i<grid.length;i++)
{
for(int j=0;j<grid[i].length;j++)
grid[i][j]=' ';
}

}

public int numberOfRows() {
int countRows=0;
for(int i=0;i<grid.length;i++){
countRows++;
rows=countRows;
}
return rows;

}

public int numberOfColumns() {
int countColumns=0;
for(int i=0;i<1;i++){
for(int j=0;j<grid[i].length;j++)
countColumns++;
columns=countColumns;
}
return columns;
}

public void growCellAt(int row, int col) {
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++)
grid[row][col]='O';
}
}

public boolean cellAt(int row, int col) {
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++)
if(grid[row][col]=='O')
return true;
}
return false;
}

public String toString() {
String result="";
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++)
result+=grid[i][j];
}
return result;
}

public int neighborCount(int row, int col) {
int count=0;
int i=row;
int j=col;
int left;
int right;
int up;
int down;
if(i > 0)
up = i-1;
else
up = grid.length-1;

if(i < (grid.length-1))
down = i+1;
else
down = 0;

if(j > 0)
left = j-1;
else
left = grid[i].length - 1;

if(j < (grid[i].length-1))
right = j+1;
else
right = 0;

if(grid[up][left] == 'O')
count++;

if(grid[up][j] == 'O')
count++;

if(grid[up][right] == 'O')
count++;

if(grid[i][left] == 'O')
count++;

if(grid[i][right] == 'O')
count++;

if(grid[down][left] == 'O')
count++;

if(grid[down][j] == 'O')
count++;

if(grid[down][right] == 'O')
count++;

return count;
}

public void update() {

for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(grid[i][j]==' ' && neighborCount(i,j)==3)
grid[i][j]='O';
if(neighborCount(i,j)<2 || neighborCount(i,j)>3)
grid[i][j]= ' ';
if(grid[i][j]=='O' && neighborCount(i,j)==2 || neighborCount(i,j)==3)
grid[i][j]='O';
}
}
}
}

好的,关于在更新方法中创建一个新数组,这就是所有需要做的吗?另外,我将如何为更新方法进行断言测试?

public void update() {
char[][] newGrid = new char[grid.length][grid[0].length];
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(grid[i][j]==' ' && neighborCount(i,j)==3)
newGrid[i][j]='O';
if(neighborCount(i,j)<2 || neighborCount(i,j)>3)
newGrid[i][j]= ' ';
if(grid[i][j]=='O' && neighborCount(i,j)==2 || neighborCount(i,j)==3)
newGrid[i][j]='O';
}
}
}

最佳答案

看起来您正在尝试修改您正在循环访问的同一个网格。当您遍历网格时,应根据网格的先前 状态进行更改。尝试构建一个新网格而不是覆盖旧网格。

关于java - 康威的生命游戏更新(下一代),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17077030/

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