gpt4 book ai didi

java - 生命游戏 : find neighbours

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:39 25 4
gpt4 key购买 nike

我正在做一个生活游戏,我用这个方法来寻找附近的邻居

private int getNeighbours(LifeBoard board, int row, int col){
if(board.get(row+1, col)){
neighbours++;
}
if(board.get(row-1, col)){
neighbours++;
}
if(board.get(row, col+1)){
neighbours++;
}
if(board.get(row, col-1)){
neighbours++;
}
if(board.get(row+1, col+1)){
neighbours++;
}
if(board.get(row-1, col-1)){
neighbours++;
}
if(board.get(row+1, col-1)){
neighbours++;
}
if(board.get(row-1, col+1)){
neighbours++;
}

return neighbours;
}

我觉得好像它的编码很糟糕并且对此感到畏缩,因此我的问题是..有没有办法让它变得更好?现在,它“有点”有效,但我在想我是否可以用循环来代替它。

谢谢。

最佳答案

好吧,您可以使用循环并明确排除位置本身(即当 x 和 y 偏移量均为 0 时):

private int getNeighbours(LifeBoard board, int row, int col) {
int neighbours = 0;
for (int xOffset = -1; xOffset < 2; xOffset++) {
for (int yOffset = -1; yOffset < 2; yOffset++) {
if ((xOffset != 0 || yOffset != 0)
&& board.get(row + yOffset, col + xOffset)) {
neighbours++;
}
}
}
return neighbours;
}

这假设您的 board.get(...)方法适用于板边缘的值。

偏移量的替代策略:

  • 如上所述,for (int xOffset = -1; xOffset < 2; xOffset++)
  • 使用包含上限:for (int xOffset = -1; xOffset <= 1; xOffset++)
  • 使用别处定义的数组:

    private static final int[] OFFSETS = { -1, 0, 1 };
    ...
    for (int xOffset : OFFSETS)

关于java - 生命游戏 : find neighbours,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109130/

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