我正在制作一个奥赛罗/黑白棋游戏,我使用一个二维数组来保存棋盘上每个空间的内存。
为了检查有效的移动我正在使用if语句,其中我使用r + 1来检查同一行上的下一个空格。但是由于数组只有[8,8]大,当我遇到r为8的情况时,我得到一个错误,因为它试图检查数组中的第9个元素。这给了我一个索引越界错误。
想知道解决这个问题的最佳方法是什么?我想可能会换成一个列表,但我不确定这对于二维数组是否也能正常工作?
public box[,] grid = new box[8, 8];
if ((grid[r + 1, c].value == currentPlayer)
{
return true;
}
答案 0 :(得分:1)
您只需检查r + 1
是否为合法索引。列表不会有帮助,因为您仍然会检查超出列表范围的内容。所以你只需要:
if (r + 1 > 7) return false;
你知道阵列的大小。但要避免"魔术数字"你最好得到数组第一维的上限:
if (r + 1 > grid.GetUpperBound(0)) return false;
您可以检查c
是否在范围内
if (c < 0 || c > grid.GetUpperBound(1)) return false;