井字游戏DeclareWinner (c++)

tic tac toe game DeclareWinner (c++)

本文关键字:c++ DeclareWinner 游戏      更新时间:2023-10-16

我已经制作了自己的第一款井字游戏,但我觉得有点困。我的问题:

  • 如何让玩家获胜

  • 如何使你不能在同一个地方输入数字两次

这是我的代码

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
void TTTBoard();
void players();
char playerX();
char playerO();
void boardWriterX(char, char);
void boardWriterO(char, char);
std::string row = "# 1 #       #       #       #";
std::string row2 = "# 2 #       #       #       #";
std::string row3 = "# 3 #       #       #       #";
bool refresh = false;
int playerTimer = 1;
int main()
{
    TTTBoard();
    return 0;
}
void TTTBoard()
{   
    do{ 
        std::cout << "#############################" << std::endl;
        std::cout << "#       1       2       3   #" << std::endl;
        std::cout << "#   #########################" << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << row << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << "#   #########################" << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << row2 << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << "#   #########################" << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << row3 << std::endl;
        std::cout << "#   #       #       #       #" << std::endl;
        std::cout << "#############################" << std::endl;
        refresh = false;
        } while (refresh);
    players();
}
void players()
{
    if (playerTimer % 2 == 0) 
    {
        std::cout << "its player[O] turn" << std::endl;
        std::cout << playerTimer << std::endl;
        playerTimer++;
        playerX();
    }
    else
    {
        std::cout << "its player[X] turn" << std::endl;
        std::cout << playerTimer << std::endl;
        playerTimer++;
        playerO();
    }
}
char playerX()
{
    char X, Y;
    std::cout << "Give the coordinates of you move" << std::endl;
    std::cout << "X as: ";
    std::cin >> X;
    std::cout << "Y as: ";
    std::cin >> Y;
    boardWriterX(X, Y);
    return X, Y;
}
char playerO()
{
    char X, Y;
    std::cout << "Give the coordinates of you move" << std::endl;
    std::cout << "X as: ";
    std::cin >> X; 
    std::cout << "Y as: ";
    std::cin >> Y;
    boardWriterO(X, Y);
    return X, Y;
}
void boardWriterX(char X, char Y)
{
    if (X == '1')
    {
        if (Y == '1')
        {
            row.replace(8, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row.replace(16, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row.replace(24, 1, "O");
            refresh = true;
            TTTBoard();
        }
    }
    else if (X == '2')
    {
        if (Y == '1')
        {
            row2.replace(8, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row2.replace(16, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row2.replace(24, 1, "O");
            refresh = true;
            TTTBoard();
        }
    }
    else if (X == '3')
    {
        if (Y == '1')
        {
            row3.replace(8, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row3.replace(16, 1, "O");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row3.replace(24, 1, "O");
            refresh = true;
            TTTBoard();
        }
    }
}
void boardWriterO(char X, char Y)
{
    if (X == '1')
    {
        if (Y == '1')
        {
            row.replace(8, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row.replace(16, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row.replace(24, 1, "X");
            refresh = true;
            TTTBoard();
        }
    }
    else if (X == '2')
    {
        if (Y == '1')
        {
            row2.replace(8, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row2.replace(16, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row2.replace(24, 1, "X");
            refresh = true;
            TTTBoard();
        }
    }
    else if (X == '3')
    {
        if (Y == '1')
        {
            row3.replace(8, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '2')
        {
            row3.replace(16, 1, "X");
            refresh = true;
            TTTBoard();
        }
        else if (Y == '3')
        {
            row3.replace(24, 1, "X");
            refresh = true;
            TTTBoard();
        }
    }
}

为此,您可以使用矩阵,也称为"2d数组",或数组的数组。这可以像char board[3][3]一样简单,其中一个空元素(例如空格或''字符,或任何你想要的)可以在棋盘上标记一个空点,然后你有'X''O'来标记玩家的移动。

使用这样的矩阵很容易看出玩家是否可以将他或她的标记放置在特定位置。也很容易检查连续三次是否有赢家,以及谁是赢家。