对角线和上/下井字游戏算法 C# wpf



所以我已经为井字游戏编程了水平胜利,但是我并没有成功。

这是水平获胜的代码。

private void CheckWinner(int row, int col)
{
if (aIntNaughtsCrosses[row, 0] == aIntNaughtsCrosses[row, 1])
{
if (aIntNaughtsCrosses[row, 0] == aIntNaughtsCrosses[row, 2])
{
MessageBox.Show("Yay");
}
}

aIntNaughtsCrosses是数组。

else if(aIntNaughtsCrosses[col, 0] == aIntNaughtsCrosses[row, 0])
{
if(aIntNaughtsCrosses[col, 0] == aIntNaughtsCrosses[row, 0])
{
if(aIntNaughtsCrosses[col, 0] == aIntNaughtsCrosses[row, 1])
{
if(aIntNaughtsCrosses[col, 0] == aIntNaughtsCrosses[row, 2])
{
MessageBox.Show("yay");
}
}
}

}

这就是我为垂直/向下获胜计划的代码。它也适用于第 1 列和第 2 栏。

您正确用于水平,保持同一行并使列更改。
现在,您必须保留相同的列并更改行以检查垂直:

if (aIntNaughtsCrosses[row, 0] == aIntNaughtsCrosses[row, 1] && // horizontal
aIntNaughtsCrosses[row, 0] == aIntNaughtsCrosses[row, 2] || // horizontal
aIntNaughtsCrosses[0, col] == aIntNaughtsCrosses[1, col] && // vertical
aIntNaughtsCrosses[0, col] == aIntNaughtsCrosses[2, col])   // vertical
{
MessageBox.Show("Yay");
}

这意味着:

IF (row,0) equals (row,1) equals (row,2) OR   // horizontal
(0,col) equals (1,col) equals (2,col) THEN // vertical
DISPLAY "Yay"

对于对角线,请注意只有 2 条对角线,因此您可以这样做(将aIntNaughtsCrosses缩短为arr(:

if (col == row &&     // top-left to bottom-right
arr[0, 0] == arr[1, 1] &&
arr[0, 0] == arr[2, 2] ||
col == 2 - row && // top-right to bottom-left
arr[0, 2] == arr[1, 1] &&
arr[0, 2] == arr[2, 0])
{
MessageBox.Show("Yay");
}

这意味着:

IF (row,col) is in diag1 AND (0,0) equals (1,1) equals (2,2) OR   // diag1
(row,col) is in diag2 AND (0,2) equals (1,1) equals (2,0) THEN // diag2
DISPLAY "Yay"

总之,以下方法应该有效:

if (arr[row, 0] == arr[row, 1] && // horizontal
arr[row, 0] == arr[row, 2] ||
arr[0, col] == arr[1, col] && // vertical
arr[0, col] == arr[2, col] ||
col == row &&     // top-left to bottom-right
arr[0, 0] == arr[1, 1] &&
arr[0, 0] == arr[2, 2] ||
col == 2 - row && // top-right to bottom-left
arr[0, 2] == arr[1, 1] &&
arr[0, 2] == arr[2, 0])
{
MessageBox.Show("Yay");
}

这意味着:

IF (row,0) equals (row,1) equals (row,2) OR // horizontal 
(0,col) equals (1,col) equals (2,col) OR // vertical
(row,col) in diag1 AND (0,0) equals (1,1) equals (2,2) OR   // diag1
(row,col) in diag2 AND (0,2) equals (1,1) equals (2,0) THEN // diag2
DISPLAY "Yay"

最新更新