康威的生命游戏(构造器和更新游戏)
Conway's Game of Life (constructor and updating the game)
我接到了处理康威生命游戏的任务。
我的 CellGrid 方法和 simulateStep 方法有问题。存活概率似乎不起作用,在 simulateStep 中,我收到 NullPointerException
错误。
这是我的代码:
public class CellGrid
{
private Cell[][] cells;
/**
* This populates the grid with cells that will be
* either living or dead (with this probability given by lifeChance)
*
* @param size - grid size
* @param lifeChance - probability of each cell starting out alive
*/
public CellGrid(int size, double lifeChance)
{
cells = new Cell[size][size];
Random r = new Random();
for (int i = 0; i < cells.length; i++)
{
for (int j = 0; j < cells.length; j++)
{
Cell c = new Cell();
double nextVal = r.nextDouble();
if (nextVal < lifeChance)
{
c.setAlive(false);
}
else
{
c.setAlive(true);
}
}
}
}
/**
* Iterates the simulation by one step (according to Game of Life rules)
*/
public void simulateStep()
{
for (int y = 0; y < cells.length; y++)
{
for (int x = 0; x < cells.length; x++)
{
boolean living = cells[y][x].isAlive();
int count = countNeighbours(y, x);
boolean result = false;
if (living && count <= 2)
{
result = false;
}
if (living && (count == 3 || count == 4))
{
result = true;
}
if (living && count == 5)
{
result = false;
}
if (living == true && count > 5)
{
result = true;
}
if (living == false && count > 5)
{
result = true;
}
result = cells[y][x].isAlive();
}
}
}
setAlive 方法:
public void setAlive(boolean alive)
{
if (isAlive()== true)
{
this.alive = false;
}
if (isAlive() == false)
{
this.alive = true;
}
}
感谢大家的帮助!
您应该在构造函数中将 Cell c = new Cell();
更改为 cells[i][j] = new Cell();
。
我接到了处理康威生命游戏的任务。
我的 CellGrid 方法和 simulateStep 方法有问题。存活概率似乎不起作用,在 simulateStep 中,我收到 NullPointerException
错误。
这是我的代码:
public class CellGrid
{
private Cell[][] cells;
/**
* This populates the grid with cells that will be
* either living or dead (with this probability given by lifeChance)
*
* @param size - grid size
* @param lifeChance - probability of each cell starting out alive
*/
public CellGrid(int size, double lifeChance)
{
cells = new Cell[size][size];
Random r = new Random();
for (int i = 0; i < cells.length; i++)
{
for (int j = 0; j < cells.length; j++)
{
Cell c = new Cell();
double nextVal = r.nextDouble();
if (nextVal < lifeChance)
{
c.setAlive(false);
}
else
{
c.setAlive(true);
}
}
}
}
/**
* Iterates the simulation by one step (according to Game of Life rules)
*/
public void simulateStep()
{
for (int y = 0; y < cells.length; y++)
{
for (int x = 0; x < cells.length; x++)
{
boolean living = cells[y][x].isAlive();
int count = countNeighbours(y, x);
boolean result = false;
if (living && count <= 2)
{
result = false;
}
if (living && (count == 3 || count == 4))
{
result = true;
}
if (living && count == 5)
{
result = false;
}
if (living == true && count > 5)
{
result = true;
}
if (living == false && count > 5)
{
result = true;
}
result = cells[y][x].isAlive();
}
}
}
setAlive 方法:
public void setAlive(boolean alive)
{
if (isAlive()== true)
{
this.alive = false;
}
if (isAlive() == false)
{
this.alive = true;
}
}
感谢大家的帮助!
您应该在构造函数中将 Cell c = new Cell();
更改为 cells[i][j] = new Cell();
。