Сбросить значения после первого l oop ti c ta c toe c ++? - PullRequest
1 голос
/ 05 мая 2020

Игра не сбрасывает ввод с последней игры. Он имеет ввод первой игры и не сбрасывается на l oop, где он спрашивает, хочет ли он играть снова. Я попытался создать функцию void, которая сбрасывала бы значения кода, имея два одинаковых массива, но это все равно не сработало. Пожалуйста, помогите, поскольку я новичок в c ++.

#include <iostream>
using namespace std;
char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
const char matrix2[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char player = 'X';
int n;
int xscore = 0, oscore = 0, gamenum = 1;
void Draw()
{
system("cls");
cout << "T i c T a c T o e" << endl;
cout << "Game #" << gamenum << " Score: X - [" << xscore << "] O - [" << oscore << "]" << endl;
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        cout << matrix[i][j] << "   ";
    }
    cout << endl;
}
}
void Input()
{
int a;
cout << "It's " << player << " turn. " <<"Press the number of the field: ";
cin >> a;

if (a == 1)
{
    if (matrix[0][0] == '1')
        matrix[0][0] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 2)
{
    if (matrix[0][1] == '2')
        matrix[0][1] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 3)
{
    if (matrix[0][2] == '3')
        matrix[0][2] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 4)
{
    if (matrix[1][0] == '4')
        matrix[1][0] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 5)
{
    if (matrix[1][1] == '5')
        matrix[1][1] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 6)
{
    if (matrix[1][2] == '6')
        matrix[1][2] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 7)
{
    if (matrix[2][0] == '7')
        matrix[2][0] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 8)
{
    if (matrix[2][1] == '8')
        matrix[2][1] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}
else if (a == 9)
{
    if (matrix[2][2] == '9')
        matrix[2][2] = player;
    else
    {
        cout << "Number is already filled try again." << endl;
        Input();
    }
}

}
void TogglePlayer()
{
if (player == 'X')
    player = 'O';
else
    player = 'X';
}
char Win()
{
//first player
if (matrix[0][0] == 'X' && matrix[0][1] == 'X' && matrix[0][2] == 'X')
    return 'X';
if (matrix[1][0] == 'X' && matrix[1][1] == 'X' && matrix[1][2] == 'X')
    return 'X';
if (matrix[2][0] == 'X' && matrix[2][1] == 'X' && matrix[2][2] == 'X')
    return 'X';

if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == 'X')
    return 'X';
if (matrix[0][1] == 'X' && matrix[1][1] == 'X' && matrix[2][1] == 'X')
    return 'X';
if (matrix[0][2] == 'X' && matrix[1][2] == 'X' && matrix[2][2] == 'X')
    return 'X';

if (matrix[0][0] == 'X' && matrix[1][1] == 'X' && matrix[2][2] == 'X')
    return 'X';
if (matrix[2][0] == 'X' && matrix[1][1] == 'X' && matrix[0][2] == 'X')
    return 'X';

//second player
if (matrix[0][0] == 'O' && matrix[0][1] == 'O' && matrix[0][2] == 'O')
    return 'O';
if (matrix[1][0] == 'O' && matrix[1][1] == 'O' && matrix[1][2] == 'O')
    return 'O';
if (matrix[2][0] == 'O' && matrix[2][1] == 'O' && matrix[2][2] == 'O')
    return 'O';

if (matrix[0][0] == 'O' && matrix[1][0] == 'O' && matrix[2][0] == 'O')
    return 'O';
if (matrix[0][1] == 'O' && matrix[1][1] == 'O' && matrix[2][1] == 'O')
    return 'O';
if (matrix[0][2] == 'O' && matrix[1][2] == 'O' && matrix[2][2] == 'O')
    return 'O';

if (matrix[0][0] == 'O' && matrix[1][1] == 'O' && matrix[2][2] == 'O')
    return 'O';
if (matrix[2][0] == 'O' && matrix[1][1] == 'O' && matrix[0][2] == 'O')
    return 'O';

return '/';
}
void gamereset()
{
for (int g = 0; g < 3; g++)
{
    for (int h = 0; h < 3; h++)
    {
        matrix2[g][h] == matrix[g][h];
    }
}
}
int main()
{
char user;
do{
n = 0;
Draw();
while (1)
{
    n++;
    Input();
    Draw();
    if (Win() == 'X')
    {
        cout << "X wins!" << endl;
        xscore++;
        break;
    }
    else if (Win() == 'O')
    {
        cout << "O wins!" << endl;
        oscore++;
        break;
    }
    else if (Win() == '/' && n == 9)
    {
        cout << "It's a draw!" << endl;
        break;
    }
    TogglePlayer();
}
cout << "Do you want to play again[Y/N]:";
cin >> user;
gamenum++;
gamereset();
}
while(user == 'Y' or user == 'y');
}   

Как видите, функция gamreset () не работает. Я пробовал много способов выяснить, как его сбросить, но это все равно не сработало.

1 Ответ

1 голос
/ 05 мая 2020

Замените matrix2[g][h] == matrix[g][h]; на matrix[g][h] = matrix2[g][h];. Причина, по которой это не работает, заключается в том, что == - это оператор, используемый в операторе if, и возвращает true или false в зависимости от того, левая или правая сторона равны или нет. в то время как = делает левый компонент равным значению правого компонента, и, как я вижу, ваш matrix2 равен const, что означает, что его значения не могут быть изменены, поэтому вы, вероятно, хотели скопировать matrix2 в matrix и не matrix в matrix2, вы также можете сделать это, используя memcpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...