#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;
}