1

目前正在制作一款扫雷游戏,并坚持能够循环遍历周围的 8 个单元以查找周围炸弹的数量。我有一个辅助方法,我相信它可以正常工作,用于检查单元格(由 numberOfAdjacentBombs 传递)是否包含炸弹。如何创建一个嵌套的 for 循环,它将遍历每个周围的单元格?例如(第 1 行,第 1 行),(第 1 行,第 1 行),(第 1 行,第 1 行)。

任何帮助或提示表示赞赏,谢谢!:-)

 private int numberOfAdjacentBombs(int row, int col){
 int count = 0;
 //nested for loop
 count += getIfBomb(int, int)
}

helper 方法检查单元格是否包含炸弹,如果有则返回 1,如果没有则返回 0。

private in getIfBomb(int row, int col){
 if(cells[row][col].getHasBomb() == true){
  return 1;
}else{
  return 0;
 }
}
4

2 回答 2

3

不考虑边界检查...

您需要检查之前的列和行,实际的列和行以及之后的列和行......

就像是...

row - 1, col - 1
row - 1, col
row - 1, col + 1
row, col - 1
row, col
row, col + 1
row + 1, col - 1
row + 1, col
row + 1, col + 1

这可能看起来像......

for (int visitRow = row - 1; visitRow < row + 1; visitRow++) {
    for (int visitCol = col - 1; visitCol < col + 1; visitCol++) {
        count += getIfBomb(visitRow, visitCol)
    }
}

现在,您的getIfBomb方法将需要对传递的值进行范围检查,以检查它们是否超出数组范围......但我想我可以把它留给你......

于 2013-09-26T04:49:22.520 回答
0

你的网格可能看起来有点像这样:

(x-1, y+1) (x, y+1) (x+1, y+1)
(x-1,  y ) ( x, y ) (x+1,  y )
(x-1, y-1) (x-1, y) (x+1, y-1)

您可以做的是构建一个for循环,从x-1tox+1和内部迭代,另一个循环从y-1to y+1(当然考虑到边缘),并在您查看时简单地跳过案例(x, y)

for(int i = x-1; i <= x+1; i++) { //x-values
    for(int j = y-1; j <= y+1; j++) { //y-values
        if(i != x && j != y) {
            //do your snazzy minesweeper jazz here
        }
    }
}
于 2013-09-26T04:49:42.517 回答