C++:如何获取用户输入并将其放入井字棋盘

标签 c++ tic-tac-toe

我目前正在开发井字游戏。我需要制作一个 Tic Tac Toe 棋盘,每次玩家或计算机移动时它都会更新(显示“X”和“O”。)。到目前为止,我已经成功制作了该板,但我不知道如何有效地将用户的输入转换为“X”。我做的第一件事是发送类似这样的垃圾邮件:

if(playerChoice == 1)
block[0][0] = "X";
if(playerChoice == 2)
block[0][1] = "X";
if(playerChoice == 3)
block[0][2] = "X";
if(playerChoice == 4)
block[1][0] = "X";
if(playerChoice == 5)
block[1][1] = "X";
if(playerChoice == 6)
block[1][2] = "X";
if(playerChoice == 7)
block[2][0] = "X";
if(playerChoice == 8)
block[2][1] = "X";
if(playerChoice == 9)
block[2][2] = "X";

虽然它有效,但它可能是最糟糕的格式。 (现在它有效地将玩家的选择放入正确的方 block 中。)

这是完整的代码(它还没有完成,甚至可能无法运行。):

#include <iostream>
#include <ctime>
#include <cstdio>
#include <cstdlib>

using namespace std;

int main()
{
//random starting turn chooser
int turnFirst; //variable to decide whoever goes first
int computerRandomPick; //variable to decide which grid the computer will place "O"
srand(time(0));
turnFirst = rand()% (2 - 1 + 1)+1;//generates starting person.
computerRandomPick = rand()% (9 - 1 + 1)+1;//computer first random pick

//board arrays
string block[3][3];
block [0][0] = {" "};
block [0][1] = {" "};
block [0][2] = {" "};
block [1][0] = {" "};
block [1][1] = {" "};
block [1][2] = {" "};
block [2][0] = {" "};
block [2][1] = {" "};
block [2][2] = {" "};

//player interaction
int playerChoice;

//BEGIN OF PROGRAM
cout << "Welcome to Tic Tac Toe!" <<endl<< endl;


    if(turnFirst == 1)//player first
    {
            cout << "Please choose a grid to place (X): "<<endl<<endl;
                        cout << "       1  |  2  |  3"<< endl;
                        cout << "     -----+-----+-----" << endl;
                        cout << "       4  |  5  |  6" << endl;
                        cout << "     -----+-----+-----" << endl;
                        cout << "       7  |  8  |  9" <<  endl;
                        cout << "     -----+-----+-----" << endl<<endl;
                        cin >> playerChoice;
                        system("CLS");
    }
                if(playerChoice == 1)
                    block[0][0] = "X";
                if(playerChoice == 2)
                    block[0][1] = "X";
                if(playerChoice == 3)
                    block[0][2] = "X";
                if(playerChoice == 4)
                    block[1][0] = "X";
                if(playerChoice == 5)
                    block[1][1] = "X";
                if(playerChoice == 6)
                    block[1][2] = "X";
                if(playerChoice == 7)
                    block[2][0] = "X";
                if(playerChoice == 8)
                    block[2][1] = "X";
                if(playerChoice == 9)
                    block[2][2] = "X";



    if(turnFirst == 2)//computer first
    {
            system("CLS");
            cout << "The computer picked: " <<endl<<endl;
    }
                        if(computerRandomPick == 1)
            block[0][0] = "O";
            if(computerRandomPick == 2)
            block[0][1] = "O";
            if(computerRandomPick == 3)
            block[0][2] = "O";
            if(computerRandomPick == 4)
            block[1][0] = "O";
            if(computerRandomPick == 5)
            block[1][1] = "O";
            if(computerRandomPick == 6)
            block[1][2] = "O";
            if(computerRandomPick == 7)
            block[2][0] = "O";
            if(computerRandomPick == 8)
            block[2][1] = "O";
            if(computerRandomPick == 9)
            block[2][2] = "O";



//Game Board.


                        cout << "       " << block[0][0] << "  |  " << block [0][1] << "  |  " << block [0][2] << endl;
                        cout << "     -----+-----+-----" << endl;
                        cout << "       " << block [1][0] << "  |  " << block [1][1] << "  |  " << block [1][2] << endl;
                        cout << "     -----+-----+-----" << endl;
                        cout << "       " << block [2][0] << "  |  " << block [2][1] << "  |  " << block [2][2] << endl;
                        cout << "     -----+-----+-----" << endl;
    return 0;
}

最佳答案

假定 block [3][3]声明为:

char block[3][3];

playerChoice 可以是 1-9。 因此,您可以优化为:

playerChoice --; // to make it 0-8
block[playerChoice / 3][playerChoice %3] = 'X'; // instead of "X"

关于C++:如何获取用户输入并将其放入井字棋盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26172996/

相关文章:

c++ - 链接 libc-dbg 和 libc-prof

tic-tac-toe - 使计算机永远不会在井字游戏中迷路

c++ - 编译器警告转换

c++ - 显式链接 DLL 和程序挂起

python递归实例变量共享数据

python - 索引错误: index 3 is out of bounds for axis 0 with size 3 pygame

java - java中repaint()方法的问题

c++ - Tic Tac Toe C++算法调试帮助

c++ - 如何在 arrayfire 中使用翻转和转置来避免 memcpy?

c++ - 具有自由软件许可证的非关系嵌入式数据库?