寻找一种更有效的方法来避免在2D数组中循环每个条目的邻居时获得ArrayIndexOutOfBounds异常



我尝试使用foreach循环和两个for循环来查看二维数组中每个条目的所有邻居。我遇到的问题是,我得到一个ArrayIndexOutOfBounds异常时,通过边缘单元格看。我找到的唯一解它的方法是这个非常低效的if else条件。我不想在数组的边处循环。有没有更有效的方法来解决这个问题?

foreach (Cell cell in playField._playField)
{
for (int dx = -1; dx <= 1; dx++)
{
for (int dy = -1; dy <= 1; dy++)
{
if (cell.PositionX + dx < 0 || cell.PositionX + dx >= XSize || cell.PositionY + dy < 0 || cell.PositionY + dy >= YSize)
break;
else
cell.Neighbors = _playField[cell.PositionX + dx, cell.PositionY + dy].IsMine ? cell.Neighbors + 1 : cell.Neighbors;
}
}
}

我称它为" Playing field ";游戏设计问题。我看到两个解决方案:

a)你的"效率低下";条件的构造。(我最担心的通常是搞砸。这些检查应该没有相关的性能影响)。

b)添加"border"运动场周围的细胞。不显示此边框。它的存在纯粹是为了你可以避免这种条件的构造——如果你碰到了一个"边界",你可以停止所有的游戏代码;单元格在邻居检查期间。

在这种解决方案下,内存中的棋盘将是10x10,只有内部的8x8才能出现在屏幕上。

相关内容

  • 没有找到相关文章

最新更新