c# - TicTacToe if 语句不适用于玩家 2
问题描述
我将发布整个代码,以便您可以测试自己。我不明白为什么在 if 语句中没有触发玩家 2 的胜利条件。
我知道这是 if 语句的原因,也许我写错了,但我花了 2 个小时才知道该语句有什么问题。适用于播放器 1。
private static void ticTacToe()
{
string[,] board = new string[3, 3];
for (int i = 0; i < board.GetLength(0); i++)
for (int j = 0; j < board.GetLength(1); j++)
board[i, j] = "-";
string player1 = "X";
string player2 = "O";
string currentPlayer;
int round = 1;
int aX = 0;
int aY = 0;
bool flag = false;
bool victory = false;
while (flag == false || victory == false)
{
if (round == 1)
{
currentPlayer = player1;
round++;
}
else
{
currentPlayer = player2;
round--;
}
bool valid = false;
while (valid == false)
{
bool validCord = false;
while (validCord == false)
{
Console.Write("Where to put(X Co)?: ");
aX = int.Parse(Console.ReadLine());
Console.Write("Where to put(Y Co)?: ");
aY = int.Parse(Console.ReadLine());
if(0 <= aX && aX <= 2 && 0 <= aY && aY <= 2)
{
validCord = true;
}
}
if (board[aY, aX] == "-")
{
valid = true;
board[aY, aX] = currentPlayer;
}
}
for (int i = 0; i < board.GetLength(0); i++)
{
for (int j = 0; j < board.GetLength(1); j++)
{
Console.Write(board[i, j]);
if (board[i, j] != "-")
{
flag = true;
}
else
{
flag = false;
}
}
Console.WriteLine();
}
//|||
if ((board[0, 0] == "X" && board[1, 0] == "X" && board[2, 0] == "X") || (board[0, 0] == "Y" && board[1, 0] == "Y" && board[2, 0] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
else if ((board[0, 1] == "X" && board[1, 1] == "X" && board[2, 1] == "X") || (board[0, 1] == "Y" && board[1, 1] == "Y" && board[2, 1] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
else if ((board[0, 2] == "X" && board[1, 2] == "X" && board[2, 2] == "X") || (board[0, 2] == "Y" && board[1, 2] == "Y" && board[2, 2] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
//---
else if ((board[0, 0] == "X" && board[0, 1] == "X" && board[0, 2] == "X") || (board[0, 0] == "Y" && board[0, 1] == "Y" && board[0, 2] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
else if ((board[1, 0] == "X" && board[1, 1] == "X" && board[1, 2] == "X") || (board[1, 0] == "Y" && board[1, 1] == "Y" && board[1, 2] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
else if ((board[2, 0] == "X" && board[2, 1] == "X" && board[2, 2] == "X") || (board[2, 0] == "Y" && board[2, 1] == "Y" && board[2, 2] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
//X
else if ((board[0, 0] == "X" && board[1, 1] == "X" && board[2, 2] == "X") || (board[0, 0] == "Y" && board[1, 1] == "Y" && board[2, 2] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
else if ((board[0, 2] == "X" && board[1, 1] == "X" && board[2, 0] == "X") || (board[0, 2] == "Y" && board[1, 1] == "Y" && board[2, 0] == "Y"))
{
victory = true;
Console.Write(victory + " Victory for player " + currentPlayer);
}
}
Console.ReadLine();
}
解决方案
在代码的顶部,您对player1
and有以下定义player2
:
string player1 = "X";
string player2 = "O";
但是,您的所有if
陈述都如下所示:
if ((board[0, 0] == "X" && board[1, 0] == "X" && board[2, 0] == "X") || (board[0, 0] == "Y" && board[1, 0] == "Y" && board[2, 0] == "Y"))
您正在检查X
andY
而不是X
and O
,因此为什么永远不会触发获胜条件player2
.
推荐阅读
- flutter - 从 StaggeredGridView.count 中删除图块?
- esent - 脏关机后如何以编程方式恢复 ESENT 数据库?
- spring-boot - UI 层和 Rest 服务之间的通信无法通过 dockercompose 正常进行
- image - 如何用图像替换图标?Shopify 启动主题主页部分:dynamic-text-columns-with-icons.liquid
- angular - 如何使用 *ngFor 将值绑定到字符串数组中?
- python - PyCharm 警告:“声明似乎没有效果”
- ios - Swift DateFormatter 错误地转换字符串日期/时间
- python - Discord.py“位置参数跟随关键字参数”错误
- sql - 如何记录临时值?
- opencv - Opencv 图像有时间戳信息吗?