我是这个页面的新手,它希望得到一些帮助,基本上我在Java上做一个扫雷游戏,但它有一个功能问题:发现没有地雷的区域,没有像Windows游戏中那样的数字,当您在一个地方单击并且所有单元格都出现时。我尝试过递归,但我不能,有些帮助吗?
对不起代码,原文是西班牙语,但我尝试制作伪代码: Matriz =多维数组(扫雷) min和max返回索引min和max迭代(8个sorroud单元格)
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);
}
}
}
答案 0 :(得分:1)
这里没有很多代码,但我觉得你会向后退一步。
对不起,我不是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);
}
我相信你发现的测试搞砸了,你的版本似乎能够进入无限(直到堆栈溢出)递归,好像邻居也是零,它会回到原始单元格。我的版本仅通过处理单元格来停止此递归,如果它还没有被处理过。