C++ 2名球员抽签,1名球员获胜。。但奇怪的是,player2没有';T

C++ 2名球员抽签,1名球员获胜。。但奇怪的是,player2没有';T,c++,C++,我使用了非常基本的逻辑,将输入存储在2d数组中 但是我不明白为什么玩家2回合后的SomeoneWonCondition()没有执行,而对玩家1来说却非常完美。我甚至还计算了网格值,它们存储得非常好。 但由于某种奇怪的原因,它无法决定玩家2的胜负 这是我的密码 #include <iostream> using namespace std; void emptyLine(); void displayNumpad(); void storingGridData(int input,

我使用了非常基本的逻辑,将输入存储在2d数组中

但是我不明白为什么玩家2回合后的SomeoneWonCondition()没有执行,而对玩家1来说却非常完美。我甚至还计算了网格值,它们存储得非常好。 但由于某种奇怪的原因,它无法决定玩家2的胜负

这是我的密码

#include <iostream>

using namespace std;

void emptyLine();
void displayNumpad();
void storingGridData(int input, int playerNumberType);
void displayGrid();
void checkAllboxes();
void player1InputIfNotFilled();
void player2InputIfNotFilled();
void someoneWonCondition();
void checkingWinner();
void playerNames(string &player1, string &player2);
void setTick1();void setTick2();void setTick3();void setTick4();void setTick5();
void setCircle1();void setCircle2();void setCircle3();void setCircle4();void setCircle5();


int playerNumberType; string player1, player2; int userInput;
bool gameOver = false, someoneWon = false; bool boxFilled1=0, boxFilled2=0, boxFilled3=0, boxFilled4=0, boxFilled5=0, boxFilled6=0, boxFilled7=0, boxFilled8=0, boxFilled9=0;
bool inputReceived=0; // for the input loop condition
int grid[3][3] = {7,8,9,6,5,4,3,6,3}; //assigning 0 for empty, 1 for tick and 2 for circle
//random values in grid for winning logic to work properly

int main()
{
    playerNames(player1, player2); //inputting names
    while(!gameOver)
    {

    displayGrid();
    displayNumpad();
    player1InputIfNotFilled(); inputReceived=0; //the latter for resetting the former's condition
    checkingWinner();
    someoneWonCondition(); if(someoneWon){break;} else{cout<<"";}

    checkAllboxes(); if(gameOver){system("cls");displayGrid();break;} else {cout <<"";} //checking if all boxes are filled, if so then it'll exit loop.
    system("cls");

    displayGrid(); displayNumpad();

    player2InputIfNotFilled(); inputReceived=0; //the latter for resetting the former's condition
    checkingWinner();
    someoneWonCondition(); if(someoneWon){break;} else{cout<< "";}

    checkAllboxes();//checking if all boxes are filled, if so then it'll exit loop
    }

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

void setCircle1(){cout << "       ###         ";}
void setCircle2(){cout << "      #   #        ";}
void setCircle3(){cout << "     #     #       ";}
void setCircle4(){cout << "      #   #        ";}
void setCircle5(){cout << "       ###         ";}

void setTick1(){cout << "         #         ";}
void setTick2(){cout << "        #          ";}
void setTick3(){cout << "  #    #           ";}
void setTick4(){cout << "   #  #            ";}
void setTick5(){cout << "    ##             ";}

void emptyLine()
{
    cout << "                   ";
}
void displayNumpad()
{
    cout <<"~-------------~\n";
    cout <<"|  7 | 8 | 9  |\n";
    cout <<"| ----------- |\n";
    cout <<"|  4 | 5 | 6  |\n";
    cout <<"| ----------- |\n";
    cout <<"|  1 | 2 | 3  |\n";
    cout <<"~-------------~\n";
}

void playerNames(string &player1, string &player2)
{
    cout << "Enter name of player 1: "; cin >> player1;
    cout << "Enter name of player 2: "; cin >> player2;
}

void storingGridData(int input, int playerNumberType) // assigning according to numpad of keyboard
{
     if(input == 1){grid[2][0] = {playerNumberType}; boxFilled1=1;}
else if(input == 2){grid[2][1] = {playerNumberType}; boxFilled2=1;}
else if(input == 3){grid[2][2] = {playerNumberType}; boxFilled3=1;}
else if(input == 4){grid[1][0] = {playerNumberType}; boxFilled4=1;}
else if(input == 5){grid[1][1] = {playerNumberType}; boxFilled5=1;}
else if(input == 6){grid[1][2] = {playerNumberType}; boxFilled6=1;}
else if(input == 7){grid[0][0] = {playerNumberType}; boxFilled7=1;}
else if(input == 8){grid[0][1] = {playerNumberType}; boxFilled8=1;}
else if(input == 9){grid[0][2] = {playerNumberType}; boxFilled9=1;}
}

void displayGrid() //logic for grid structure, each box is 20 characters apart
{

    cout << "|";if(grid[0][0] == 1){setTick1();} else if(grid[0][0] == 2){setCircle1();} else{emptyLine();}cout<<"|"; if(grid[0][1] == 1){setTick1();} else if(grid[0][1] == 2){setCircle1();} else{emptyLine();} cout << "|"; if(grid[0][2] == 1){setTick1();} else if(grid[0][2] == 2){setCircle1();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[0][0] == 1){setTick2();} else if(grid[0][0] == 2){setCircle2();} else{emptyLine();}cout<<"|"; if(grid[0][1] == 1){setTick2();} else if(grid[0][1] == 2){setCircle2();} else{emptyLine();} cout << "|"; if(grid[0][2] == 1){setTick2();} else if(grid[0][2] == 2){setCircle2();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[0][0] == 1){setTick3();} else if(grid[0][0] == 2){setCircle3();} else{emptyLine();}cout<<"|"; if(grid[0][1] == 1){setTick3();} else if(grid[0][1] == 2){setCircle3();} else{emptyLine();} cout << "|"; if(grid[0][2] == 1){setTick3();} else if(grid[0][2] == 2){setCircle3();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[0][0] == 1){setTick4();} else if(grid[0][0] == 2){setCircle4();} else{emptyLine();}cout<<"|"; if(grid[0][1] == 1){setTick4();} else if(grid[0][1] == 2){setCircle4();} else{emptyLine();} cout << "|"; if(grid[0][2] == 1){setTick4();} else if(grid[0][2] == 2){setCircle4();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[0][0] == 1){setTick5();} else if(grid[0][0] == 2){setCircle5();} else{emptyLine();}cout<<"|"; if(grid[0][1] == 1){setTick5();} else if(grid[0][1] == 2){setCircle5();} else{emptyLine();} cout << "|"; if(grid[0][2] == 1){setTick5();} else if(grid[0][2] == 2){setCircle5();} else{emptyLine();}cout<<"|\n";
    cout << "|"<<"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|"<< endl;
    cout << "|";if(grid[1][0] == 1){setTick1();} else if(grid[1][0] == 2){setCircle1();} else{emptyLine();}cout<<"|"; if(grid[1][1] == 1){setTick1();} else if(grid[1][1] == 2){setCircle1();} else{emptyLine();} cout << "|"; if(grid[1][2] == 1){setTick1();} else if(grid[1][2] == 2){setCircle1();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[1][0] == 1){setTick2();} else if(grid[1][0] == 2){setCircle2();} else{emptyLine();}cout<<"|"; if(grid[1][1] == 1){setTick2();} else if(grid[1][1] == 2){setCircle2();} else{emptyLine();} cout << "|"; if(grid[1][2] == 1){setTick2();} else if(grid[1][2] == 2){setCircle2();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[1][0] == 1){setTick3();} else if(grid[1][0] == 2){setCircle3();} else{emptyLine();}cout<<"|"; if(grid[1][1] == 1){setTick3();} else if(grid[1][1] == 2){setCircle3();} else{emptyLine();} cout << "|"; if(grid[1][2] == 1){setTick3();} else if(grid[1][2] == 2){setCircle3();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[1][0] == 1){setTick4();} else if(grid[1][0] == 2){setCircle4();} else{emptyLine();}cout<<"|"; if(grid[1][1] == 1){setTick4();} else if(grid[1][1] == 2){setCircle4();} else{emptyLine();} cout << "|"; if(grid[1][2] == 1){setTick4();} else if(grid[1][2] == 2){setCircle4();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[1][0] == 1){setTick5();} else if(grid[1][0] == 2){setCircle5();} else{emptyLine();}cout<<"|"; if(grid[1][1] == 1){setTick5();} else if(grid[1][1] == 2){setCircle5();} else{emptyLine();} cout << "|"; if(grid[1][2] == 1){setTick5();} else if(grid[1][2] == 2){setCircle5();} else{emptyLine();}cout<<"|\n";
    cout << "|"<<"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|"<< endl;
    cout << "|";if(grid[2][0] == 1){setTick1();} else if(grid[2][0] == 2){setCircle1();} else{emptyLine();}cout<<"|"; if(grid[2][1] == 1){setTick1();} else if(grid[2][1] == 2){setCircle1();} else{emptyLine();} cout << "|"; if(grid[2][2] == 1){setTick1();} else if(grid[2][2] == 2){setCircle1();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[2][0] == 1){setTick2();} else if(grid[2][0] == 2){setCircle2();} else{emptyLine();}cout<<"|"; if(grid[2][1] == 1){setTick2();} else if(grid[2][1] == 2){setCircle2();} else{emptyLine();} cout << "|"; if(grid[2][2] == 1){setTick2();} else if(grid[2][2] == 2){setCircle2();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[2][0] == 1){setTick3();} else if(grid[2][0] == 2){setCircle3();} else{emptyLine();}cout<<"|"; if(grid[2][1] == 1){setTick3();} else if(grid[2][1] == 2){setCircle3();} else{emptyLine();} cout << "|"; if(grid[2][2] == 1){setTick3();} else if(grid[2][2] == 2){setCircle3();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[2][0] == 1){setTick4();} else if(grid[2][0] == 2){setCircle4();} else{emptyLine();}cout<<"|"; if(grid[2][1] == 1){setTick4();} else if(grid[2][1] == 2){setCircle4();} else{emptyLine();} cout << "|"; if(grid[2][2] == 1){setTick4();} else if(grid[2][2] == 2){setCircle4();} else{emptyLine();}cout<<"|\n";
    cout << "|";if(grid[2][0] == 1){setTick5();} else if(grid[2][0] == 2){setCircle5();} else{emptyLine();}cout<<"|"; if(grid[2][1] == 1){setTick5();} else if(grid[2][1] == 2){setCircle5();} else{emptyLine();} cout << "|"; if(grid[2][2] == 1){setTick5();} else if(grid[2][2] == 2){setCircle5();} else{emptyLine();}cout<<"|\n";

}


void player1InputIfNotFilled()
{
    playerNumberType=1;
 while (inputReceived != 1)
 {
            cout << player1 << "'s turn:- "; cin >> userInput;
    if(userInput == 1 && boxFilled1==0)
    {
    storingGridData(userInput, playerNumberType); inputReceived=1;
    }
    else if(userInput == 2 && boxFilled2==0)
    {
    storingGridData(userInput, playerNumberType); inputReceived=1;
    }
    else if(userInput == 3 && boxFilled3==0)
    {
    storingGridData(userInput, playerNumberType); inputReceived=1;
    }
    else if(userInput == 4 && boxFilled4==0)
    {
    storingGridData(userInput, playerNumberType); inputReceived=1;
    }
    else if(userInput == 5 && boxFilled5==0)
    {
    storingGridData(userInput, playerNumberType);  inputReceived=1;
    }
    else if(userInput == 6 && boxFilled6==0)
    {
    storingGridData(userInput, playerNumberType);  inputReceived=1;
    }
    else if(userInput == 7 && boxFilled7==0)
    {
    storingGridData(userInput, playerNumberType);  inputReceived=1;
    }
    else if(userInput == 8 && boxFilled8==0)
    {
    storingGridData(userInput, playerNumberType);  inputReceived=1;
    }
    else if(userInput == 9 && boxFilled9==0)
    {
    storingGridData(userInput, playerNumberType);  inputReceived=1;
    }
    else{cout<< "Box is already filled, choose different! \n"; continue;}

 }

}
void player2InputIfNotFilled()
{
    playerNumberType=2;
 while (inputReceived != 1)
 {
            cout << player2 << "'s turn:- "; cin >> userInput;
    if(userInput == 1 && boxFilled1==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 2 && boxFilled2==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 3 && boxFilled3==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 4 && boxFilled4==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 5 && boxFilled5==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 6 && boxFilled6==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 7 && boxFilled7==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 8 && boxFilled8==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else if(userInput == 9 && boxFilled9==0)
    {
    storingGridData(userInput, playerNumberType); system("cls"); inputReceived=1;
    }
    else{cout<< "Box is already filled, choose different! \n"; continue;}

 }

}

void checkAllboxes()
{
    if (boxFilled1==1 && boxFilled2==1 && boxFilled3==1 && boxFilled4==1 && boxFilled5==1 && boxFilled6==1 && boxFilled7==1 && boxFilled8==1 && boxFilled9==1)
    {
     gameOver=true;
    }
    else{gameOver = false;}
}
void checkingWinner()
{
    if((grid[0][0] == grid[0][1]== grid[0][2] )|| (grid[1][0] == grid[1][1] == grid[1][2]) || (grid[2][0] == grid[2][1] == grid[2][2]) || (grid[0][0] == grid[1][0] == grid[2][0]) || (grid[0][1] == grid[1][1] == grid[2][1]) || (grid[0][2] == grid[1][2] == grid[2][2]) || (grid[0][0] == grid[1][1] == grid[2][2]) || (grid[0][2] == grid[1][1] == grid[2][0]))
    {
        someoneWon = true;
    }
    else{someoneWon = false;}
}
void someoneWonCondition()
{
    if(someoneWon && playerNumberType == 1){system("cls"); displayGrid(); cout <<player1 << " is the winner!\n";}

        else if(someoneWon && playerNumberType == 2){system("cls"); displayGrid(); cout <<player2 << " is the winner! \n";}
}

#包括
使用名称空间std;
void emptyLine();
void displayNumpad();
void storingGridData(int输入,int playerNumber类型);
void displayGrid();
作废复选框();
无效播放器1输入未填充();
无效播放器2输入未填充();
使某人无效条件();
void checkingWinner();
无效播放器名称(字符串和播放器1、字符串和播放器2);
void setTick1();void setTick2();void setTick3();void setTick4();void setTick5();
void setCircle1();void setCircle2();void setCircle3();void setCircle4();void setCircle5();
int playerNumber类型;弦乐演奏者1,演奏者2;int用户输入;
bool gameOver=false,someoneWon=false;bool-boxFilled1=0,boxFilled2=0,boxFilled3=0,boxFilled4=0,boxFilled5=0,boxFilled6=0,boxFilled7=0,boxFilled8=0,boxFilled9=0;
bool inputReceived=0;//对于输入循环条件
int grid[3][3]={7,8,9,6,5,4,3,6,3}//为空指定0,为勾号指定1,为圆指定2
//网格中的随机值用于使获胜逻辑正常工作
int main()
{
playerNames(player1,player2);//输入名称
而(!gameOver)
{
displayGrid();
displayNumpad();
player1InputFNotFilled();inputReceived=0;//后者用于重置前者的条件
选中Winner();

someoneWonCondition();如果(someoneWon){break;}其他{cout在voidcheckingWinner()中稍微更改条件修复了它,下面是更改的代码

void checkingWinner()
{
    if((grid[0][0] == grid[0][1] && grid[0][1] == grid[0][2] )|| (grid[1][0] == grid[1][1] && grid[1][1] == grid[1][2]) || (grid[2][0] == grid[2][1] && grid[2][1] == grid[2][2]) || (grid[0][0] == grid[1][0] && grid[1][0] == grid[2][0]) || (grid[0][1] == grid[1][1] && grid[1][1] == grid[2][1]) || (grid[0][2] == grid[1][2] && grid[1][2] == grid[2][2]) || (grid[0][0] == grid[1][1] && grid[1][1] == grid[2][2]) || (grid[0][2] == grid[1][1] && grid[1][1] == grid[2][0]))
    {
        someoneWon = true;
    }
    else{someoneWon = false;}
}

这看起来是您学习使用调试器的好机会。我向您保证,这将比将
cout
与要求其他人调试您的代码相结合更有效。类似
(grid[0][0]==grid[0][1]==grid[0][2]的表达式
大多数人肯定不会做你认为他们会做的事情。这是你问题的基石(950行代码去做需要几百行代码的事情;wtb是一个循环)。如果网格中的空为零,而“勾选”为非零,你真的需要另外9个变量来跟踪它们是否被勾选?(你有大量的代码重复,很多都是因为使用了单独的变量和函数,而不是数组和索引。)你真的需要5个函数来打印一个记号和一个圆圈吗?@Sneftel啊,我知道我会尝试自己使用。我在这里很新。