首页 > 解决方案 > 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();

}

标签: c#if-statement

解决方案


在代码的顶部,您对player1and有以下定义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"))

您正在检查XandY而不是Xand O,因此为什么永远不会触发获胜条件player2.


推荐阅读