在扫雷艇上发现没有地雷的地区
Discovering a region with no mines on minesweeper
我是这个页面的新手,希望能得到一些帮助,基本上我在 Java 上做一个扫雷游戏但是它有一个功能有问题:发现没有地雷也没有数字的区域就像 windows 上的游戏一样,当你点击一个地方时,所有的单元格都会出现。我试过 make recursive 但我不能,有人帮忙吗?
对不起代码,原文是西班牙语,但我试着做了一个伪代码:
Matriz = 多维数组(扫雷器)
最小值和最大值 returns 要迭代的索引最小值和最大值(8 个模糊单元格)
private void discoverWitheCell(int x, int y) {
if(matriz[x][y].getdiscovered() == false){
matriz[x][y].setDiscovered(true);
}
else{
if(matriz[x][y].getNumberOfMinesArround() == 0){
for(int i=min(x);i<max(x);i++)
for(int j=min(y);j<max(y);j++)
discoverWhiteCell(i,j);
}
}
}
这里没有很多代码,但我觉得你在倒退。
抱歉,我不是 Java 演讲者,所以我在猜测一些语法。请注意,这可能会越界——就个人而言,我会在我的地图周围添加一层空单元格,这样我就永远不需要担心边界检查。
private void ClickSquare(int x, int y)
{
// Did the user click an already exposed square? If so, ignore
if (matriz[x][y].getDiscovered()) return;
matriz[x][y].SetDiscovered(true);
if (matriz[x][y].getNumberOfMinesAround != 0) return;
// If empty, click all the neighbors
for (int xloop = x - 1; xloop <= x + 1; xloop++)
for (int yloop = y - 1; yloop <= y + 1; yloop++)
ClickSquare(xloop, yloop);
}
我相信您发现的测试搞砸了,您的版本似乎能够进入无限(直到堆栈溢出)递归,就好像邻居也为零一样它将返回到原始单元格。我的版本通过仅处理尚未处理的单元格来停止此递归。
我是这个页面的新手,希望能得到一些帮助,基本上我在 Java 上做一个扫雷游戏但是它有一个功能有问题:发现没有地雷也没有数字的区域就像 windows 上的游戏一样,当你点击一个地方时,所有的单元格都会出现。我试过 make recursive 但我不能,有人帮忙吗?
对不起代码,原文是西班牙语,但我试着做了一个伪代码: Matriz = 多维数组(扫雷器) 最小值和最大值 returns 要迭代的索引最小值和最大值(8 个模糊单元格)
private void discoverWitheCell(int x, int y) {
if(matriz[x][y].getdiscovered() == false){
matriz[x][y].setDiscovered(true);
}
else{
if(matriz[x][y].getNumberOfMinesArround() == 0){
for(int i=min(x);i<max(x);i++)
for(int j=min(y);j<max(y);j++)
discoverWhiteCell(i,j);
}
}
}
这里没有很多代码,但我觉得你在倒退。
抱歉,我不是 Java 演讲者,所以我在猜测一些语法。请注意,这可能会越界——就个人而言,我会在我的地图周围添加一层空单元格,这样我就永远不需要担心边界检查。
private void ClickSquare(int x, int y)
{
// Did the user click an already exposed square? If so, ignore
if (matriz[x][y].getDiscovered()) return;
matriz[x][y].SetDiscovered(true);
if (matriz[x][y].getNumberOfMinesAround != 0) return;
// If empty, click all the neighbors
for (int xloop = x - 1; xloop <= x + 1; xloop++)
for (int yloop = y - 1; yloop <= y + 1; yloop++)
ClickSquare(xloop, yloop);
}
我相信您发现的测试搞砸了,您的版本似乎能够进入无限(直到堆栈溢出)递归,就好像邻居也为零一样它将返回到原始单元格。我的版本通过仅处理尚未处理的单元格来停止此递归。