私はコンウェイの人生ゲームを書いている最中ですが、セル座標 [36 ][22] から [36][24] まで。反復の私の更新方法は次のとおりです。
private void nextGeneration() {
for (int i = 0; i < cell.length; i++) {
for (int j = 0; j < cell[i].length; j++) {
if(i>0 && i<79 && j>0 && j<99){
if(cell[i][j].getAlive()){
cell[i][j].calcNeighbors(cell, i, j);
if(cell[i][j].getNeighbors() < 2){
cell[i][j].setAlive(false);
}
if(cell[i][j].getNeighbors() == 2 || cell[i][j].getNeighbors() == 3 && cell[i][j].getAlive()){
cell[i][j].setAlive(true);
}
if(cell[i][j].getNeighbors() > 3){
cell[i][j].setAlive(false);
}
}
else {
cell[i][j].calcNeighborsForNull(cell, i, j);
if (cell[i][j].getNeighborsForNull() == 3) {
cell[i][j].setAlive(true);
}
}
}
}
}
}
nextGeneration() は 1 秒ごとに呼び出され、 cell[][] はクラス Cell の配列です
このコードを使用してセルを検出します。
myNeighbors = 0;
if(cell[i-1][j-1].myAlive){
myNeighbors++;
System.out.println("top left");
}
if(cell[i-1][j].myAlive){
myNeighbors++;
System.out.println("top center");
}
if(cell[i-1][j+1].myAlive){
myNeighbors++;
System.out.println("top right");
}
if(cell[i][j-1].myAlive){
myNeighbors++;
System.out.println("mid left");
}
if(cell[i][j+1].myAlive){
myNeighbors++;
System.out.println("mid right");
}
if(cell[i+1][j-1].myAlive){
myNeighbors++;
System.out.println("lower left");
}
if(cell[i+1][j].myAlive){
myNeighbors++;
System.out.println("lower center");
}
if(cell[i+1][j+1].myAlive){
myNeighbors++;
System.out.println("lower right");
}
System.out.println(myNeighbors +" at " + j + "," + -i);
コードを実行すると、次のコンソール出力が得られます。
top right
mid right
2 at 22,-36
top center
top right
mid left
mid right
4 at 23,-36
top left
top center
2 at 24,-36
mid right
lower left
lower right
3 at 23,-35
mid left
lower center
2 at 24,-35
top right
1 at 22,-36
top left
top center
mid left
3 at 24,-36
mid right
lower center
lower right
3 at 23,-35
コンパイラは、ライブ セルの上にあるデッド セルもライブであると見なします。誰かが私が間違っていることを見ることができますか? ありがとう。