首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生命的游戏:寻找邻居

生命的游戏:寻找邻居
EN

Stack Overflow用户
提问于 2014-11-24 16:10:11
回答 1查看 1.6K关注 0票数 3

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

代码语言:javascript
复制
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;
}

我觉得它是可怕的编码和畏缩,因此我的问题是..有什么办法让这件事更好吗?现在,它“有点-”工作,但我在想,如果我可以用一个循环来代替。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 16:14:59

那么,您可以使用循环并显式地排除位置本身(即,当x和y偏移量都为0时):

代码语言:javascript
复制
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++)
  • 使用在其他地方定义的数组: 私有静态最终int[]偏移量={ -1,0,1 };for (int xOffset :偏移)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27109130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档