java - 康威生命游戏编程

标签 java

所以我的编程以 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;
        }
    }
}

也许我错过了一些东西,但我很确定这是正确的。有什么建议吗?

最佳答案

这就是问题:

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);
}

您的代码在当前图 block 已失效时设置颜色。如果它还活着,它就永远不会死。我会把它写成:

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);

我还将逻辑数据( boolean 值网格)与显示部分分开 - 这里的“业务逻辑”不应该了解有关颜色的任何信息。

关于java - 康威生命游戏编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721421/

相关文章:

Java 正则表达式挑战 - 仅在需要时添加前缀

java - ProcessBuilder 不起作用?

java - 十六进制到二进制转换java

java - 在数据库链接失败后恢复 jdbc 连接

java - 为什么 BufferedReader readLine 读取超过 EOF

java - 带 Tomcat 的 Eclipse $$EnhancerByCGLIB$$ 'Unable to install breakpoint'

java - 字符和字符串之间的比较没有像我期望的那样工作。我究竟做错了什么?

java - 吐出值范围超过 64 的 block 数

java - 你最好的 Swing 设计模式和技巧是什么?

java - 通过ASM替换完整方法