我最近在C++上做了一个扫雷游戏,但是好像有个bug。我写了一个函数来返回现场周围的地雷数量,就像在经典的扫雷游戏中一样。但是,代码在接近尾声时会失败。我提供了一些代码来更好地解释。
int findBeginnerMines(string actualBoard[BEGINNER_DIMENSION][BEGINNER_DIMENSION], int x, int y)
{
int mines = 0;
if (actualBoard[x][y] == MINE)
{
mines = -1;
}
else
{
if (actualBoard[x - 1][y - 1] == MINE)
{
mines++;
}
if (actualBoard[x][y - 1] == MINE)
{
mines++;
}
if (actualBoard[x + 1][y - 1] == MINE && x != BEGINNER_DIMENSION - 1)
{
mines++;
}
if (actualBoard[x - 1][y] == MINE)
{
mines++;
}
if (actualBoard[x + 1][y] == MINE && x != BEGINNER_DIMENSION - 1)
{
mines++;
}
if (actualBoard[x - 1][y + 1] == MINE && y != BEGINNER_DIMENSION - 1)
{
mines++;
}
if (actualBoard[x][y + 1] == MINE && y != BEGINNER_DIMENSION - 1)
{
mines++;
}
if (actualBoard[x + 1][y + 1] == MINE && x != BEGINNER_DIMENSION - 1 && y != BEGINNER_DIMENSION - 1)
{
mines++;
}
}
return mines;
}在本例中,BEGINNER_DIMENSION = 8。当x= 7时,此函数返回错误。
发布于 2020-12-28 07:20:56
在检查x和y的值是否允许这种访问之前,您可以访问该数组。也就是说,你需要反转这些表达式。例如,替换:
if (actualBoard[x + 1][y - 1] == MINE && x != BEGINNER_DIMENSION - 1)使用
if (x != BEGINNER_DIMENSION - 1 && actualBoard[x + 1][y - 1] == MINE)https://stackoverflow.com/questions/65471366
复制相似问题