gpt4 book ai didi

java - 二维数组(数组的数组)扫雷

转载 作者:行者123 更新时间:2023-12-01 12:57:50 32 4
gpt4 key购买 nike

我是论坛新手,因此如果这不符合该网站的标准,我想表示歉意,但是我对 2D 阵列扫雷程序有疑问。

我试图在棋盘上随机放置地雷,棋盘是通过数组构建的。不幸的是,地雷被随机放置在对角线上,而不是整个棋盘上。我的 MineField 代码是:

    public MineField(int w, int h, int m)
{
Random r = new Random();
mineField = new State[w][h];
surroundingMines = new int[w][h];
initialiseMineField = new int[w][h];
traceOn = true; //set to false before submitting
width = w;
height = h;
mineCount = m;
for (int i = 0; i < w; i++)
{
for (int j = 0; j < h; j++)
{
mineField[i][j] = State.COVERED;
}
}
for (int k = 0; k < m; k++)
{
int randomNumber = r.nextInt(m);
int a = randomNumber;
int b = randomNumber;
mineField[a][b] = State.MINED;
}

}

这给了我输出(每次随机,但仅沿着对角线):

0 1 2 3 4
0| 。 。 。 。 。
1| 。 *。 。 。
2| 。 。 *。 。
3| 。 。 。 *。
4| 。 。 。 。 .

如何阻止它沿对角线移动,如何阻止地雷重叠?谢谢!

最佳答案

如何阻止它沿对角线移动?

为两个坐标生成两个随机数,而不是为两个坐标使用一个随机数。

for (int k = 0; k < m; k++)
{
mineField[r.nextInt(w)][r.nextInt(h)] = State.MINED;
}

如何阻止地雷重叠?

两种可能的方法。

  1. 生成,检查是否已有地雷,如果是,则重试。在循环内执行此操作,以便在成功生成唯一地雷之前不会增加 k
  2. 列出所有可能的位置(作为行列对),对列表进行随机排列,然后将前 m 对作为地雷。

这里是方法 1 的一些示例代码。

for (int k = 0; k < m; k++)
{
while (true) {
int a = r.nextInt(w);
int b = r.nextInt(h);
if (mineField[a][b] != State.MINED) { // We have discovered an un-mined location.
mineField[a][b] = State.MINED;
break; // get out of the while loop.
}
}
}

我将把方法 2 作为 OP 的练习。

关于java - 二维数组(数组的数组)扫雷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750807/

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