嗨,所以我正在构建一个程序,用Java创建经典的扫雷游戏,几乎所有的东西都下来了,但我不知道如何检查地雷周围的平方和写数字(例如,如果有一个,两个,三个地雷在它旁边)。我只包含了它所在的方法,但如果需要,我可以发布程序的其余部分。我的方法应该是什么?谢谢!
private void countAdjacentMines()
{
for (int i = 0; i < mineField.length; i++)
{
for (int j = 0; j < mineField.length; j++)
{
if (!(mineField[i][j].getIsMine()))
{
mineField[i-1][j-1];
mineField[i-1][j];
mineField[i-1][j+1];
mineField[i][j-1];
mineField[i][j+1];
mineField[i+1][j-1];
mineField[i+1][j];
mineField[i+1][j+1];
mineField[i][j].setAdjacentMines(0);
}
} // end for loop rows
} // end for loop columns
} // end countAdjacentMines发布于 2011-08-06 03:08:54
如下所示:
private void countAdjacentMines()
{
for (int i = 0; i < mineField.length; i++)
{
for (int j = 0; j < mineField.length; j++)
{
if (!(mineField[i][j].getIsMine()))
{
int count = 0;
for (int p = i - 1; p <= i + 1; p++)
{
for (int q = j - 1; q <= j + 1; q++)
{
if (0 <= p && p < mineField.length && 0 <= q && q < mineField.length)
{
if (mineField[p][q].getIsMine())
++count;
}
}
}
mineField[i][j].setAdjacentMines(count);
}
} // end for loop rows
} // end for loop columns
} // end countAdjacentMines发布于 2011-08-06 02:56:38
对于该“列表”中的每一项,执行如下操作:
if ((i-1) >= 0 && (j-1) >= 0 && mineField[i-1][j-1].getIsMine()) {
numAdjacentMines++;
}写一个助手函数来做所有这些事情可能是值得的,然后你只需要调用它8次。
发布于 2011-08-06 02:57:32
你在正确的轨道上。您应该保留一个计数器,它表示为.getIsMine()返回true的相邻矿的计数。
if (!(mineField[i][j].getIsMine()))
{
counter = 0;
if (i-1 >= 0)
{
if (j-1 >=0 && mineField[i-1][j-1].getIsMine()) counter++;
if (mineField[i-1][j].getIsMine()) counter++;
if (j+1 < mineField.length && mineField[i-1][j+1].getIsMine()) counter++;
}
if (j-1 >=0 && mineField[i][j-1].getIsMine()) counter++;
if (j+1 < mineField.length && mineField[i][j+1].getIsMine()) counter++;
if (i+1 < mineField.length)
{
if (j-1 >=0 && mineField[i+1][j-1].getIsMine()) counter++;
if (mineField[i+1][j].getIsMine()) counter++;
if (j+1 < mineField.length && mineField[i+1][j+1].getIsMine()) counter++;
}
mineField[i][j].setAdjacentMines(counter);
}您还需要检查所有这些值(i-1、j-1、i+1、j+1)是否都没有超出数组的界限(i -1 >-1等)
编辑::我想我涵盖了所有的检查。
https://stackoverflow.com/questions/6961227
复制相似问题