0

そのため、GUI 形式で人生ゲームをプログラミングしています。出力が正しくなく、その理由がわかりません。これが「次世代」を扱うコードです。

for(int i=0; i < ROW; i++) {
    for(int j=0; j < COL; j++) {
        if(i > 0 && i < ROW-1 && j > 0 && j < COL -1) {
            if(grid.getButton(i-1, j-1).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i-1, j).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i-1, j+1).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i, j-1).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i, j+1).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i+1, j-1).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i+1, j).getBackground() == Color.BLUE) liveNeighbor++;
            if(grid.getButton(i+1, j+1).getBackground() == Color.BLUE) liveNeighbor++;

            if(grid.getButton(i, j).getBackground() == Color.WHITE) {
                if(liveNeighbor == 3) 
                    newGrid.getButton(i, j).setBackground(Color.BLUE);
                } else {
                    if(liveNeighbor > 3 || liveNeighbor < 2) 
                        newGrid.getButton(i, j).setBackground(Color.WHITE);
            }
            liveNeighbor=0;
        }
    }
}

何かが足りないかもしれませんが、これは正しいと確信しています。助言がありますか?

4

1 に答える 1

3

これが問題です:

if(grid.getButton(i, j).getBackground() == Color.WHITE) {
    if(liveNeighbor == 3) 
        newGrid.getButton(i, j).setBackground(Color.BLUE);
    } else {
        if(liveNeighbor > 3 || liveNeighbor < 2) 
            newGrid.getButton(i, j).setBackground(Color.WHITE);
}

コードは、現在のタイルが死んでいる場合にのみ色を設定します。生きていれば、死ぬことはありません。これを次のように書きます。

boolean currentlyAlive = grid.getButton(i, j).getBackground() == Color.BLUE;
boolean aliveNextStep = (liveNeighbour == 3) ||
                        (currentlyAlive && liveNeighbor == 2);
newGrid.getButton(i, j).setBackground(aliveNextStep ? Color.BLUE : Color.WHITE);

また、表示部分から論理データ (ブール値のグリッド) を分離します。ここでの「ビジネス ロジック」は、色について何も知らないはずです。

于 2012-10-04T06:29:04.497 に答える