【问题标题】:Java programming - nested for loops for minesweeper gameJava 编程 - 用于扫雷游戏的嵌套 for 循环
【发布时间】:2013-09-26 04:41:20
【问题描述】:

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

【问题讨论】:

  • 写下它应该访问的索引,你就会有你的 for 循环的大纲。

标签: java loops for-loop minesweeper


【解决方案1】:

不考虑边界检查...

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

类似...

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 方法将需要对传递的值进行范围检查,以检查它们是否超出数组范围...但我想我可以把它留给您...

【讨论】:

  • (row,col) 不需要勾选
  • @JimGarrison 这是真的,与方法调用相比,可能需要考虑if 语句的计算开销,但这只是让 OP 加快速度的一个示例
【解决方案2】:

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

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

您可以做的是构造一个从 x-1 迭代到 x+1 的 for 循环,在其中,另一个从 y-1 到 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
        }
    }
}

【讨论】:

  • 检查比赛场地边缘的单元格时会怎样?
  • 只需在您的if 语句中添加一个额外的检查,以确保您也跳过这些:if(i != x &amp;&amp; j != y &amp;&amp; i &lt; width &amp;&amp; i &gt; 0 &amp;&amp; j &lt; height &amp;&amp; j &gt; 0)。您可以根据自己的喜好轻松调整。
猜你喜欢
  • 2021-02-28
  • 1970-01-01
  • 2013-04-11
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多