我在这个页面是新的,它希望得到一些帮助,基本上我在Java上做一个扫雷游戏,但是它有一个功能问题:发现没有地雷的区域,没有像在窗口上的游戏中的数字,当你点击一个地方,所有的细胞都出现了。我试着做递归,但我做不到,有帮助吗?
不好意思,原来的代码是西班牙语的,但我试着做了一个伪码: Matriz =多维数组(扫雷器) min和max返回索引min和max来迭代(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);
}
}
}发布于 2016-11-20 06:37:04
这里的代码不多,但我觉得你倒过来了。
对不起,我不是说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);
}我相信您已经发现了测试混乱,您的版本似乎能够进入无限(直到堆栈溢出)递归,就好像邻居也是零,它将返回到原来的单元格。我的版本仅通过处理尚未处理的单元格来停止此递归。
https://stackoverflow.com/questions/40701036
复制相似问题