TheTrappedMonkey Ответов: 2

Крестики-нолики ИИ делают больше чем один шаг за один раз?


void Ai()
{
//-------------------------------------------------------
    if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == '7')
         matrix[2][0] = 'O';
    else if (matrix[2][1] == 'X' && matrix[2][2] == 'X' && matrix[2][0] == '7')
        matrix[2][0] = 'O';
    else if (matrix[0][2] == 'X' && matrix[1][1] == 'X' && matrix[2][0] == '7')
        matrix[2][0] = 'O';

    if (matrix[0][2] == 'X' && matrix[1][2] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';
    else if (matrix[2][1] == 'X' && matrix[2][0] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';
    else if (matrix[0][0] == 'X' && matrix[1][1] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';

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

    if (matrix[0][0] == 'X' && matrix[0][1] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';
    else if (matrix[1][2] == 'X' && matrix[2][2] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';
    else if (matrix[1][1] == 'X' && matrix[2][0] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';

    if (matrix[0][0] == 'X' && matrix[2][0] == 'X' && matrix[1][0] == '4')
        matrix[1][0] = 'O';
    else if (matrix[0][1] == 'X' && matrix[2][1] == 'X' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[0][2] == 'X' && matrix[2][2] == 'X' && matrix[1][2] == '6')
        matrix[1][2] = 'O';
    else if (matrix[0][0] == 'X' && matrix[0][2] == 'X' && matrix[0][1] == '2')
        matrix[0][1] = 'O';
    else if (matrix[1][0] == 'X' && matrix[1][2] == 'X' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[2][0] == 'X' && matrix[2][2] == 'X' && matrix[2][1] == '8')
         matrix[2][1] = 'O';
    else if (matrix[2][0] == 'X' && matrix[0][2] == 'X' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
    else if (matrix[0][0] == 'X' && matrix[2][2] == 'X' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
//----------------------------------------------------------
    if (matrix[0][0] == 'O' && matrix[1][0] == 'O' && matrix[2][0] == '7')
         matrix[2][0] = 'O';
    else if (matrix[2][1] == 'O' && matrix[2][2] == 'O' && matrix[2][0] == '7')
        matrix[2][0] = 'O';
    else if (matrix[0][2] == 'O' && matrix[1][1] == 'O' && matrix[2][0] == '7')
        matrix[2][0] = 'O';

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

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

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

    if (matrix[0][0] == 'O' && matrix[2][0] == 'O' && matrix[1][0] == '4')
        matrix[1][0] = 'O';
    else if (matrix[0][1] == 'O' && matrix[2][1] == 'O' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[0][2] == 'O' && matrix[2][2] == 'O' && matrix[1][2] == '6')
        matrix[1][2] = 'O';
    else if (matrix[0][0] == 'O' && matrix[0][2] == 'O' && matrix[0][1] == '2')
        matrix[0][1] = 'O';
    else if (matrix[1][0] == 'O' && matrix[1][2] == 'O' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[2][0] == 'O' && matrix[2][2] == 'O' && matrix[2][1] == '8')
         matrix[2][1] = 'O';
    else if (matrix[2][0] == 'O' && matrix[0][2] == 'O' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
    else if (matrix[0][0] == 'O' && matrix[2][2] == 'O' && matrix[1][1] == '5')
         matrix[1][1] = 'O';

//---------------------------------------------------------

    else if (a == 1)
    {
        if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 2)
    {
        if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 3)
    {
        if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
        if (a == 4)
    {
        if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 5)
    {
        if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 6)
    {
        if (matrix[1][1] == '5')
            matrix[1][1] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 7)
    {
        if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 8)
    {
        if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 9)
    {
        if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
    }
}


Мне 14 лет, и я изучаю C++ как свой первый язык уже около 2-3 месяцев. Это мой Крестики-нолики v2BETA_AI ИИ-скрипт, написанный на c++. Игрок 1 - Это "х", а ИИ - "о". Игрок 1 Всегда первый. Во время тестирования игры он запускает код блокировки и завершения кода нормально, но затем делает больше ходов. Это не всегда влияет на ход игры, так как ИИ уже сможет сделать ход, чтобы выиграть, но тогда больше пробелов заменяется на "О".


например:
(Как выложить это для игры)

1 2 3

4 5 6

7 8 9

Введите номер в нужное поле: 5

1 2 3

O X 6

7 8 9

Введите номер в нужное поле: 2

O X 3

O X 6

7 8 9

Введите номер в нужное поле: 6

O X (O) здесь это ненужное O было добавлено и иногда вызывает проблемы.

О Х Х

O 8 9

Компьютер побеждает!!!



Весь Исходный Код
#include <iostream>
#include <cstdlib>
using namespace std;

char matrix[3][3] = { '1','2','3','4','5','6','7','8','9'};
char player = 'X';
int n;
int a;
int AI;
string r;

void draw()
{
    cout << endl << endl << "Player 1 = X" << endl;
    cout << "Computer = O";
    cout << endl << endl << endl;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << matrix [i][j] << " " << " ";
        }
        cout << endl << endl;
    }
}

void input()
{
    cout << endl << endl << "Press the number you want in the field: ";
    cin >> a;

    if (a == 1001)
    {
        exit(0);
    }
    else if (a == 1)
    {
        if (matrix[0][0] == '1')
            matrix[0][0] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 2)
    {
        if (matrix[0][1] == '2')
            matrix[0][1] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 3)
    {
        if (matrix[0][2] == '3')
            matrix[0][2] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }

     else if (a == 4)
    {
        if (matrix[1][0] == '4')
            matrix[1][0] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 5)
    {
        if (matrix[1][1] == '5')
            matrix[1][1] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 6)
    {
        if (matrix[1][2] == '6')
            matrix[1][2] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }

    else if (a == 7)
    {
        if (matrix[2][0] == '7')
            matrix[2][0] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 8)
    {
        if (matrix[2][1] == '8')
            matrix[2][1] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    else if (a == 9)
    {
        if (matrix[2][2] == '9')
            matrix[2][2] = player;
        else
        {
            cout << "Field is taken. Try again.";
            input();
        }
    }
    if (a > 9 || a < 1)
    {
        cout << endl << "Invalid Choice. Try again.";
        input();
    }
}

void Ai()
{
//-------------------------------------------------------
    if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == '7')
         matrix[2][0] = 'O';
    else if (matrix[2][1] == 'X' && matrix[2][2] == 'X' && matrix[2][0] == '7')
        matrix[2][0] = 'O';
    else if (matrix[0][2] == 'X' && matrix[1][1] == 'X' && matrix[2][0] == '7')
        matrix[2][0] = 'O';

    if (matrix[0][2] == 'X' && matrix[1][2] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';
    else if (matrix[2][1] == 'X' && matrix[2][0] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';
    else if (matrix[0][0] == 'X' && matrix[1][1] == 'X' && matrix[2][2] == '9')
        matrix[2][2] = 'O';

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

    if (matrix[0][0] == 'X' && matrix[0][1] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';
    else if (matrix[1][2] == 'X' && matrix[2][2] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';
    else if (matrix[1][1] == 'X' && matrix[2][0] == 'X' && matrix[0][2] == '3')
        matrix[0][2] = 'O';

    if (matrix[0][0] == 'X' && matrix[2][0] == 'X' && matrix[1][0] == '4')
        matrix[1][0] = 'O';
    else if (matrix[0][1] == 'X' && matrix[2][1] == 'X' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[0][2] == 'X' && matrix[2][2] == 'X' && matrix[1][2] == '6')
        matrix[1][2] = 'O';
    else if (matrix[0][0] == 'X' && matrix[0][2] == 'X' && matrix[0][1] == '2')
        matrix[0][1] = 'O';
    else if (matrix[1][0] == 'X' && matrix[1][2] == 'X' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[2][0] == 'X' && matrix[2][2] == 'X' && matrix[2][1] == '8')
         matrix[2][1] = 'O';
    else if (matrix[2][0] == 'X' && matrix[0][2] == 'X' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
    else if (matrix[0][0] == 'X' && matrix[2][2] == 'X' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
//----------------------------------------------------------
    if (matrix[0][0] == 'O' && matrix[1][0] == 'O' && matrix[2][0] == '7')
         matrix[2][0] = 'O';
    else if (matrix[2][1] == 'O' && matrix[2][2] == 'O' && matrix[2][0] == '7')
        matrix[2][0] = 'O';
    else if (matrix[0][2] == 'O' && matrix[1][1] == 'O' && matrix[2][0] == '7')
        matrix[2][0] = 'O';

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

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

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

    if (matrix[0][0] == 'O' && matrix[2][0] == 'O' && matrix[1][0] == '4')
        matrix[1][0] = 'O';
    else if (matrix[0][1] == 'O' && matrix[2][1] == 'O' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[0][2] == 'O' && matrix[2][2] == 'O' && matrix[1][2] == '6')
        matrix[1][2] = 'O';
    else if (matrix[0][0] == 'O' && matrix[0][2] == 'O' && matrix[0][1] == '2')
        matrix[0][1] = 'O';
    else if (matrix[1][0] == 'O' && matrix[1][2] == 'O' && matrix[1][1] == '5')
        matrix[1][1] = 'O';
    else if (matrix[2][0] == 'O' && matrix[2][2] == 'O' && matrix[2][1] == '8')
         matrix[2][1] = 'O';
    else if (matrix[2][0] == 'O' && matrix[0][2] == 'O' && matrix[1][1] == '5')
         matrix[1][1] = 'O';
    else if (matrix[0][0] == 'O' && matrix[2][2] == 'O' && matrix[1][1] == '5')
         matrix[1][1] = 'O';

//---------------------------------------------------------

    else if (a == 1)
    {
        if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 2)
    {
        if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 3)
    {
        if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
        if (a == 4)
    {
        if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 5)
    {
        if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 6)
    {
        if (matrix[1][1] == '5')
            matrix[1][1] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 7)
    {
        if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 8)
    {
        if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
    }
    else if (a == 9)
    {
        if (matrix[2][1] == '8')
            matrix[2][1] = 'O';
        else if (matrix[1][1] == '5')
            matrix[1][1] == 'O';
        else if (matrix[1][2] == '6')
            matrix[1][2] = 'O';
        else if (matrix[2][2] == '9')
            matrix[2][2] = 'O';
        else if (matrix[0][0] == '1')
            matrix[0][0] = 'O';
        else if (matrix[0][1] == '2')
            matrix[0][1] = 'O';
        else if (matrix[2][0] == '7')
            matrix[2][0] = 'O';
        else if (matrix[1][0] == '4')
            matrix[1][0] = 'O';
        else if (matrix[0][2] == '3')
            matrix[0][2] = 'O';
    }
}

char win()
{
    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[0][2] == 'X' && matrix[1][1] == 'X' && matrix[2][0] == 'X')
        return 'X';

    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[0][2] == 'O' && matrix[1][1] == 'O' && matrix[2][0] == 'O')
        return 'O';

    return '/';
}

int main()
{
    int n = 0;
    cout << "Tic Tac Toe v2 BETA" << endl;
    cout << "-------------------" << endl;
    system("TITLE Tic Tac Toe");
    system("COLOR a");
    draw();
    while (1)
    {
        n++;

        input();

        Ai();

        system("cls");

        draw();

        if (win() == 'X')
        {
            cout << "Player 1 Wins!!!" << endl << endl;
            break;
        }
        if (win() == 'O')
        {
            cout << "Computer Wins!!!" << endl << endl;
            break;
        }
        else if (win() == '/' && n == 5)
        {
            cout << "It's a Draw!!!" << endl << endl;
            break;
        }
    }
    system("PAUSE");
    return 0;
}


Я больше тестировал игру, и она действительно немного мешает. Я сыграл 3 хода, и остальная часть поля была покрыта буквами "О".

Это также может помочь:

0,0 (1)| 0,1 (2)| 0,2 (3)
-------------------------
1,0 (4)| 1,1 (5)| 1,2 (6)
-------------------------
2,0 (7)| 2,1 (8)| 2,2 (9)

Что я уже пробовал:

Я пытался изменить все операторы if, чтобы переключить операторы, но ничего.

Philippe Mori

Вы должны реорганизовать код... Например, win функция имеет 2 части, которые идентичны, за исключением того, что они проверяют наличие X или O. Вы можете создать функцию, которая будет принимать параметр для символа (X или O) и возвращает true или false. Кроме того, код для тестирования каждой строки аналогичен, поэтому у вас может быть функция для тестирования указанной строки. Вы можете сделать то же самое для столбцов... После этого вы можете сделать аналогичный рефакторинг для ИИ, а затем использовать циклы. После того, как вы улучшили код, его будет легче исправить.

2 Ответов

Рейтинг:
14

Ramza360

В методе ИИ вы допускаете несколько вариантов выбора, поскольку существует более одного блока if. Так что любой из если блоки могут иметь значение true, установка дополнительных уплотнительных.

У вас есть потенциально 10 очков из-за 10 блоков if, скорее всего, все они не будут оцениваться как истинные (это включает в себя части else if), но всегда есть шанс.

Вы должны

return
всякий раз, когда значение устанавливается в 'O' или 'X' в методе AI, чтобы принудительно выполнить одно действие.

Экс.

void Ai()
{
//-------------------------------------------------------
    if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == '7') {
         matrix[2][0] = 'O';
         return;
    }
    else if (matrix[2][1] == 'X' && matrix[2][2] == 'X' && matrix[2][0] == '7') {
        matrix[2][0] = 'O';
        return;
    }
    else if (matrix[0][2] == 'X' && matrix[1][1] == 'X' && matrix[2][0] == '7') {
        matrix[2][0] = 'O';
        return;
    }


TheTrappedMonkey

Я думаю, что это работает, за исключением того, что вам придется изменить void на char. Теперь вы можете вернуть его в X или O. Спасибо

Ramza360

Это тоже хорошая идея. Поздравляю с обучением программированию. Это так весело!

Рейтинг:
0

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.