我有一个mineSweeper的递归方法,但我想写一个循环,当单元格为空时,应该通过递归显示空单周围的8个单元格,我该怎么做?
这是我的揭示方法:
void reveal(int x,int y,char[][] mineField,boolean[][] isVisible){
System.out.println(x + " " + y);
if(x<0 || x>=mineField.length || y<0 || y>mineField[0].length){
return;
}
if(mineField[x][y] == '*'){
isGameOver = true; // there is a bomb, stop game.
return;
}
if(mineField[x][y] == '1'||mineField[x][y] == '2'){ // how do I make it any number (1-8) instead of 1 or 2
isVisible[x][y] = true;
return;
}
if(mineField[x][y] == '.'){
isVisible[x][y] = true;
reveal(i,j, mineField, isVisible); // how do I write a method here to reveal the 8 surrounding cells?
}
}
这是我的打印方法:
void printMineMap(char[][] mineField,boolean[][] isVisible){
for(int i=0; i<mineField.length; i++){
for(int j=0; j<mineField[0].length; j++){
if(isVisible[i][j]=true)
System.out.println(" "+mineField[i][j]+" ");
else if(isVisible[i][j]=false)
System.out.println("[ ]");
}
System.out.println(" ");
}
}
答案 0 :(得分:1)
您可以循环遍历所有字段,在x和y方向上的坐标差异最多为1到当前字段。
for (int i = x-1; i <= x+1; i++) {
for (int j = y-1; j <= y+1; j++) {
reveal(i,j, mineField, isVisible);
}
}
但是,您不希望显示已经可见的字段以避免无限递归。因此,在显示方法的开头添加它,但在检查x和y是否在范围内之后:
if (isVisible[x][y]) {
return;
}