2011-08-05 70 views
1

嗨,我几乎完成了这个程序,创建了类扫雷游戏。它编译和运行完美,游戏出现在GUI客户端程序中,但会出现一个问题。扫雷地雷的数量java

玩时,有时候1会出现,当它有多于1个相邻的矿时,或者是0的时候,当它周围的八个方格之一有一个地雷。任何帮助/建议非常感谢!

private void countAdjacentMines() 
{   
    // TO DO: STUDENT CODE HERE 
    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++; 
         } // end if 
        } // end for 
       } // end for 

      mineField[i][j].setAdjacentMines(count); 
      } // end if 

     } // end for loop rows 
    } // end for loop columns 
} // end countAdjacentMines 
+1

你为什么要检查getIsMine()两次?当你只需要计算邻近的矿井时,为什么你要在整个雷场上巡视?此代码看起来太破碎,指出任何特定的缺陷。 –

+1

如果这是作业,请将其标记为(这不排除您的问题得到解答)。 –

+0

你应该将你的第二个for循环更改为'for(int j = 0; j Briguy37

回答

3

您的内循环的条件为关闭。

for (int q = j - 1; q < j + 1; q++) 

应该

for (int q = j - 1; q <= j + 1; q++) 
         ^^ 
+0

这看起来就是这个问题。 – Nicholas

+0

哇我觉得哑巴,谢谢! –