我对我正在编写的这段代码有疑问。该代码的用途应类似于Reversi或Othello游戏。因此,您有了一个游戏板,每次单击时,您都可以新建一个圆圈。如果一个玩家在另一个玩家的两个圆圈之间有一个圆圈,则圆圈会更改颜色。这就是你的观点。例如:red = r和blue = b,empty =0。棋盘如下:r b0。现在,是红色转弯,红色是r b r。这使蓝色圆圈将颜色更改为红色。因此董事会现在说r r r,给红色加分,而蓝色则输掉一个。
它应该检查整个行,但是不这样做。我收到一条错误消息,说索引超出了数组范围。
如果您需要更多代码,我们很乐意为您提供。
谢谢。
public void makeMoveArray(int x, int y, int a, int b, int color)
{
boardArray[x, y] = color;
while (boardArray[x + a, y + b] != turn)
{
boardArray[x + a, y + b] = color;
x += a;
y += b;
}
}
public void makeMove(int x, int y, int a)
{
if (lockedIn(x, y, 0, 1)) { this.makeMoveArray(x, y, 0, 1, a); }
if (lockedIn(x, y, 1, 0)) { this.makeMoveArray(x, y, 1, 0, a); }
if (lockedIn(x, y, 1, 1)) { this.makeMoveArray(x, y, 1, 1, a); }
if (lockedIn(x, y, -1, 0)) { this.makeMoveArray(x, y, -1, 0, a); }
if (lockedIn(x, y, 0, -1)) { this.makeMoveArray(x, y, 0, -1, a); }
if (lockedIn(x, y, -1, -1)) { this.makeMoveArray(x, y, -1, -1, a); }
if (lockedIn(x, y, 1, -1)) { this.makeMoveArray(x, y, 1, -1, a); }
if (lockedIn(x, y, -1, 1)) { this.makeMoveArray(x, y, -1, 1, a); }
panel1.Refresh();
}
答案 0 :(得分:0)
您在不检查数组边界的情况下不断增加索引。您应该将此条件添加到您的while
循环中:
while (x + a >= 0 &&
x + a < boardArray.GetLength(0) &&
y + b >= 0 &&
y + b < boardArray.GetLength(1) &&
boardArray[x + a, y + b] != turn)
{
boardArray[x + a, y + b] = color;
x += a;
y += b;
}