gpt4 book ai didi

java - 在扫雷器中需要有关显示相邻图 block 的算法帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:36 25 4
gpt4 key购买 nike

我正在编写一个简单的扫雷程序,但我找不到正确显示相邻图 block 的方法。如果一个图 block 是空白的,它会被显示出来,然后算法会显示所有相邻的空白图 block 。但是我也想显示一层非空白的瓷砖,就像真正的扫雷一样。

这是我的代码:

void revealAdjCells(Tile [][] t,int x, int y) {
if (!checkBounds(x,y)) {
return; // check for bounds
}

if ((t[x][y].getNeighbours() == 0) && (!t[x][y].getVisibleState())) { // NO neighbours and not revealed
t[x][y].setVisibleState(true); // reveal tile

revealAdjCells(t,x+1,y); // recursion, reveal adjacent tiles
revealAdjCells(t,x-1,y);
revealAdjCells(t,x,y-1);
revealAdjCells(t,x,y+1);
}
else
{
return;
}
}

getNeighbours() 返回附近瓦片(水平、垂直、对角线)周围的炸弹数量,getVisibleState() 返回一个 boolean 值,指示瓦片是否有是否被揭露。

我尝试过的事情:

1) 从 if 条件中删除 getVisibleState()(糟糕的想法,显然会导致堆栈溢出)。

2) 检查边界 (x-1,x+1,y+1,y-1) 然后相应地显示图 block (不起作用,getVisibleState() 不会让语句执行,因为递归检查的图 block 已经显示)。

所以...是的...我被困住了,找不到解决方案。任何算法帮助表示赞赏。

最佳答案

您的代码很接近,但如果 t[x][y].getNeighbours() != 0 并且您应该这样做,则您不会显示磁贴。也许是这样的:

void revealAdjCells(Tile [][] t,int x, int y) {

// if out of bounds **or** if already revealed, return
if (!checkBounds(x,y) || t[x][y].getVisibleState()) {
return;
}


t[x][y].setVisibleState(true); // reveal tile **here **

// do recursion only if no neighbors
if (t[x][y].getNeighbours() == 0) {
// t[x][y].setVisibleState(true); // not **here**

revealAdjCells(t,x+1,y);
revealAdjCells(t,x-1,y);
revealAdjCells(t,x,y-1);
revealAdjCells(t,x,y+1);
} else {
return;
}
}

关于java - 在扫雷器中需要有关显示相邻图 block 的算法帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com