Untitled

mail@pastecode.io avatar
unknown
c_cpp
2 years ago
4.5 kB
10
Indexable
Never
#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;
}