#include <iostream>
using namespace std;
//Оголошення константи для максимального розміру поля
const int MAX_FIELD_SIZE = 10;
//Оголошення змінних для розміру поля та самого поля
int fieldSize;
char field[MAX_FIELD_SIZE][MAX_FIELD_SIZE];
//Функція, яка створює пусте поле заданого розміру
void createField() {
for (int i = 0; i < fieldSize; i++) {
for (int j = 0; j < fieldSize; j++) {
field[i][j] = '-';
}
}
}
//Функція, яка виводить поле на екран
void printField() {
for (int i = 0; i < fieldSize; i++) {
for (int j = 0; j < fieldSize; j++) {
cout << field[i][j] << " ";
}
cout << endl;
}
}
//Функція, яка перевіряє, чи є переможець
bool checkWin(char player) {
//Перевірка по горизонталі
for (int i = 0; i < fieldSize; i++) {
bool win = true;
for (int j = 0; j < fieldSize; j++) {
if (field[i][j] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
//Перевірка по вертикалі
for (int j = 0; j < fieldSize; j++) {
bool win = true;
for (int i = 0; i < fieldSize; i++) {
if (field[i][j] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
//Перевірка по діагоналі (зліва направо)
bool win = true;
for (int i = 0; i < fieldSize; i++) {
if (field[i][i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
//Частина 3: Перевірка на виграш
//Перевірка по діагоналі (справа наліво)
win = true;
for (int i = 0; i < fieldSize; i++) {
if (field[i][fieldSize - 1 - i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
//Якщо немає переможця
return false;
}
//Функція, яка дозволяє гравцю зробити хід
void makeMove(char player) {
int row, col;
cout << "Гравець " << player << ", введіть рядок та стовпчик для ходу: ";
cin >> row >> col;
//Перевірка на правильність введення рядка та стовпчика
while (row < 1 || row > fieldSize || col < 1 || col > fieldSize || field[row - 1][col - 1] != '-') {
cout << "Неправильний ввід. Введіть рядок та стовпчик ще раз: ";
cin >> row >> col;
}
//Додавання символу гравця на поле
field[row - 1][col - 1] = player;
}
//Основна програма
int main() {
//Введення розміру поля
cout << "Введіть розмір поля (від 3 до " << MAX_FIELD_SIZE << "): ";
cin >> fieldSize;
//Перевірка на правильність введення розміру поля
while (fieldSize < 3 || fieldSize > MAX_FIELD_SIZE) {
cout << "Неправильний ввід. Введіть розмір поля ще раз: ";
cin >> fieldSize;
}
//Створення пустого поля та виведення його на екран
createField();
printField();
//Головний цикл гри
char currentPlayer = 'X';
while (true) {
//Гравець робить хід
makeMove(currentPlayer);
//Виведення поля на екран після ходу
printField();
//Перевірка на переможця
if (checkWin(currentPlayer)) {
cout << "Гравець " << currentPlayer << " переміг!";
break;
}
//Перевід ходу на іншого гравця
if (currentPlayer == 'X') {
currentPlayer = 'O';
}
else {
currentPlayer = 'X';
}
}
return 0;
}