我在建立扫雷器背后的逻辑,而不是在实际游戏中,我只是建立一个默认值为0的4 * 4 mineField数组,并在其中随机生成4个炸弹,值为1。我的问题是我的checkBomb()方法,它应该在数组中的每个插槽上取值,并检查所有8个相邻插槽及其自身的值1,就像这样
[ ][ ][ ]
[ ][x][ ]
[ ][ ][ ]
并计算其中有多少枚炸弹,并将此炸弹存储在“并行阵列”中,然后将其显示在屏幕上。
现在,我能够使用4个随机生成的炸弹来创建字段,如以下代码所示:
公共类MineSweeper {
public static int[][] afterCheck=new int[4][4];
public static int[][] mineField=new int[4][4];
public static int bombNumber=4;
public static void setBombs()
{
//bombNumber variable will decide the number of loops
for(int i=0;i<bombNumber;)
{
int firstRandom=(int)(Math.random()*4);
int secondRandom=(int)(Math.random()*4);
if(mineField[firstRandom][secondRandom]== 0)
{
mineField[firstRandom][secondRandom]=1;
i++;
}
但是到目前为止,对于checkBomb()方法,我想出了两种不同的代码,但是都没有用。
代码1:
公共静态无效checkBombs()
{
for(int i=0;i<4;i++)
{
int counter=0;
try{
for(int y=0;y<4;y++)
{
if (mineField[i][y + 1] == 1)
counter++;
if (mineField[i][y - 1] == 1)
counter++;
if (mineField[i - 1][y] == 1)
counter++;
if (mineField[i - 1][y + 1] == 1)
counter++;
if (mineField[i - 1][y - 1] == 1)
counter++;
if (mineField[i + 1][y] == 1)
counter++;
if (mineField[i + 1][y + 1] == 1)
counter++;
if (mineField[i + 1][y - 1] == 1)
counter++;
afterCheck[i][y] = counter;
}
} catch(Exception e){}
}
}
第二个代码:
public static void checkBombs()
{
for(int i=0;i<4;i++)
{
int counter=0;
try{
for(int y=0;y<4;y++)
{
for(int a=i-1;a<i+1;a++)
{
for (int b=y-1;b<y+1;b++)
{
if(mineField[a][b]==1)
counter++;
}
}
*/
afterCheck[i][y] = counter;
}
} catch(Exception e){}
}
}
我需要一些帮助。
最佳答案
介绍一种可以安全处理木板边缘的方法:
int bombCount(int i, int j) {
if (i < 0 || j < 0 || i >= mineField.length || j >= mineField[i].length)
return 0;
return mineField[i][j];
}
然后,您可以使用带有for循环的第二个版本,通过替换来总结附近的炸弹数量
mineField[i][j]
与
bombCount(i, j)
您还可以消除所有的if-ology,只需使用
counter += bombCount(i,j);
只是出于兴趣,这是一种“不好的做法”,但正确的等同于上述方法是
int bombCount(int i, int j) {
try { return mineField[i][j]; }
catch (ArrayIndexOutOfBoundsException _) { return 0; }
}
上面的代码和您的代码之间的区别在于,每次访问数组时都会分别捕获异常,而在遇到第一个异常情况时,您的方法会缩短其余评估的时间。
最后,作为一个附带说明,最近这些天,HotSpot已针对不良实践变体进行了优化,因此该习惯用法实际上不会对性能造成很大损害。大多数Java专家都不会相信它。