gpt4 book ai didi

java - 安卓扫雷算法

转载 作者:可可西里 更新时间:2023-11-01 10:26:09 25 4
gpt4 key购买 nike

我在 Java 上为 Andoid 开发游戏“扫雷”,打开单元格时遇到问题。如何确保我点击打开相邻空单元格的单元格? (它是如何在 Miner for Windows 中完成的)。简介:我有一个从蓝牙套接字流接收的数组。像这样的数组:

1 9 1 0
1 1 1 0
0 0 0 0
0 0 0 0

9-是地雷0-是空白单元格1-最近的地雷数

然后我计算游戏领域

array = Model.getGameField();
int size = array.length;
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
{
((TableRow) table.getChildAt(i)).getChildAt(j).setTag(array[i][j] + "");
}

点击函数:

if (iWantToSetFlag == 0)
{
tmpBtn = ((Button) v);
if (!(tmpBtn.getTag().equals("9")))
{
OpenButtons(tmpBtn.getId() / 10, tmpBtn.getId() % 10);
recreateTable();
}
else
startLose();
}
else
{
if (((Button) v).getText().equals("M"))
((Button) v).setText("");
else
((Button) v).setText("M");
}

我有一个函数

    private void OpenButtons(int x, int y)
{
array[x][y] = -1;
for (int k = -1; k < 2; k++)
{
for (int k1 = 1; k1 >= -1; k1--)
{
if (x + k >= 0 && x + k < array.length && y - k1 >= 0 && y - k1 < array[x + k].length)
if (array[x + k][y - k1] == 0)
OpenButtons(x + k, y - k1);
}
}

}

递归打开单元格,但出现 StackOverFlow 错误。请帮忙。

最佳答案

您应该使用更改后的参数调用递归:

if (array[x + k][y - k1] == 0)
OpenButtons(x + k, y - k1);

当然,正如问题的评论中提到的,您应该自己检查数组边界,而不是仅仅忽略异常:

if (x + k >= 0 && x + k < array.length &&
y - k1 >= 0 && y - k1 < array[x + k].length) { ...

放在其他 if 子句之前只会检查实际存在的字段。摆脱你的恶意空try-catch


由于递归算法对于大字段仍会导致 StackOverflowException,因此迭代算法可能更适合这里。

private void OpenButtons(int x, int y) {
Queue<Point> toOpen = new LinkedBlockingQueue<>();
toOpen.add(new Point(x, y));
array[x][y] = -1;
while (!toOpen.isEmpty()) {
Point p = toOpen.poll();
x = p.x;
y = p.y;
for (int k = -1; k < 2; k++) {
for (int k1 = 1; k1 >= -1; k1--) {
if (x + k >= 0 && x + k < array.length && y - k1 >= 0
&& y - k1 < array[x + k].length)
if (array[x + k][y - k1] == 0) {
array[x + k][y - k1] = -1;
toOpen.add(new Point(x + k, y - k1));
}
}
}
}
}

关于java - 安卓扫雷算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515677/

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