Загрузка данных


#include <iostream>
#include <ctime>   
#include <windows.h> // Добавили для работы с кодировкой

using namespace std;

char field[3][3] = { {'1', '2', '3'},
                     {'4', '5', '6'},
                     {'7', '8', '9'} };

bool makeMove(int choice, char player) {
    if (choice < 1 || choice > 9) return false; // Защита от неверного ввода
    int row = (choice - 1) / 3;
    int col = (choice - 1) % 3;

    if (field[row][col] != 'X' && field[row][col] != 'O') {
        field[row][col] = player;
        return true;
    } else {
        return false;
    }
}

void pri() {
    system("cls"); // Очистка экрана, чтобы поле не дублировалось
    for (int i = 0; i < 3; i++) {
        cout << " " << field[i][0] << " | " << field[i][1] << " | " << field[i][2] << endl;
        if (i < 2) cout << "---|---|---" << endl;
    }
    cout << "\n";
}

char checkWin() {
    for (int i = 0; i < 3; i++) {
        // Проверка строк и столбцов (убрали проверку на пробел, так как в поле цифры)
        if (field[i][0] == field[i][1] && field[i][1] == field[i][2]) return field[i][0];
        if (field[0][i] == field[1][i] && field[1][i] == field[2][i]) return field[0][i];
    }
    if (field[0][0] == field[1][1] && field[1][1] == field[2][2]) return field[0][0];
    if (field[0][2] == field[1][1] && field[1][1] == field[2][0]) return field[0][2];

    return ' ';
}

int main() {
    // Настройка русского языка для Windows
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    srand(time(0));

    int menuChoice;
    cout << "[ 1 ] Два игрока" << endl;
    cout << "[ 2 ] Игрок vs Бот" << endl;
    cout << "[ 3 ] Выйти" << endl;
    cout << "> "; cin >> menuChoice;

    if (menuChoice == 1 || menuChoice == 2) {
        char player = 'X';
        int move;
        for (int turn = 0; turn < 9; turn++) {
            pri();
            if (menuChoice == 2 && player == 'O') {
                do {
                    move = rand() % 9 + 1;
                } while (!makeMove(move, player));
            } else {
                cout << "Игрок " << player << ", выбери клетку (1-9): ";
                cin >> move;
                if (!makeMove(move, player)) {
                    cout << "Ошибка! Клетка занята или неверный номер. Нажми Enter...";
                    cin.ignore(); cin.get();
                    turn--; continue;
                }
            }

            char winner = checkWin();
            if (winner == 'X' || winner == 'O') {
                pri();
                cout << "Победил " << (menuChoice == 2 && winner == 'O' ? "Бот" : (string("Игрок ") + winner)) << "!\n";
                return 0;
            }
            player = (player == 'X') ? 'O' : 'X';
        }
        pri();
        cout << "Ничья!\n";
    } else {
        cout << "Выход из игры.\n";
    }

    return 0;
}