2013-09-26 39 views
1

目前正在制作扫雷游戏,并坚持能够通过周围8个单元循环查找周围炸弹的数量。我有一个帮助器方法,我认为它可以很好地检查单元格(通过numberOfAdjacentBombs传递)是否包含炸弹。我如何去创建一个循环遍历每个周围单元格的嵌套for循环?例如(行-1,列-1),(行-1,列),(行-1,列+ 1)。Java编程 - 嵌套for循环扫雷游戏

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

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

帮助程序方法检查单元格是否包含炸弹,如果是,返回1,否则返回0。

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

写下它应该访问的指数,你将有你的循环大纲。 –

回答

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方法将需要范围检查它通过检查,他们都不敢出数组的边界值...但我想我能留给你......

+0

'(row,col)'不需要检查 –

+0

@JimGarrison这是真的,我们可能想要考虑与方法调用相比,if语句的计算开销,但这只是一个例子OP速度达到 – MadProgrammer

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-1x+1和内部,从y-1y+1另一个回路(考虑采取的边缘,当然),并且简单地跳过案例w如果你正在看(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 
     } 
    } 
} 
+0

检查比赛场地边界上的细胞时怎么办? –

+0

只需在if语句中添加一个额外的检查以确保您跳过这些:if(i!= x && j!= y && i 0 && j 0) '。你可以轻松地调整你的喜好。 – Bucket