Untitled

 avatar
unknown
c_cpp
2 years ago
2.8 kB
2
Indexable
#include <iostream>

using namespace std;

void initializeBoard(char** board, int size) {
    for (int row = 0; row < size; ++row) {
        for (int col = 0; col < size; ++col) {
            board[row][col] = '-';
        }
    }
}

void printBoard(char** board, int size) {
    for (int row = 0; row < size; ++row) {
        for (int col = 0; col < size; ++col) {
            cout << board[row][col] << " ";
        }
        cout << endl;
    }
}

bool checkWin(char** board, int size, char player) {
    int row, col;

    // Check rows
    for (row = 0; row < size; ++row) {
        for (col = 0; col < size; ++col) {
            if (board[row][col] != player) {
                break;
            }
        }
        if (col == size) {
            return true;
        }
    }

    // Check columns
    for (col = 0; col < size; ++col) {
        for (row = 0; row < size; ++row) {
            if (board[row][col] != player) {
                break;
            }
        }
        if (row == size) {
            return true;
        }
    }

    // Check main diagonal
    for (row = 0; row < size; ++row) {
        if (board[row][row] != player) {
            break;
        }
    }
    if (row == size) {
        return true;
    }

    // Check anti-diagonal
    for (row = 0; row < size; ++row) {
        if (board[row][size - row - 1] != player) {
            break;
        }
    }
    if (row == size) {
        return true;
    }

    return false;
}

int main() {
    int size;
    cout << "Enter the size of the Tic-Tac-Toe board: ";
    cin >> size;

    char** board = new char*[size];
    for (int i = 0; i < size; ++i) {
        board[i] = new char[size];
    }

    initializeBoard(board, size);
    int totalMoves = size * size;
    bool gameWon = false;
    char player;

    for (int move = 0; move < totalMoves; ++move) {
        player = (move % 2 == 0) ? 'X' : 'O';
        int row, col;
        printBoard(board, size);
        cout << "Player " << player << ", enter your move (row and column): ";
        cin >> row >> col;

        if (row < 1 || row > size || col < 1 || col > size || board[row - 1][col - 1] != '-') {
            cout << "Invalid move, try again." << endl;
            --move;
            continue;
        }

        board[row - 1][col - 1] = player;
        if (checkWin(board, size, player)) {
            gameWon = true;
            break;
        }
    }

    printBoard(board, size);
    if (gameWon) {
        cout << "Player " << player << " wins!" << endl;
    } else {
        cout << "It's a draw!" << endl;
    }

    for (int i = 0; i < size; ++i) {
        delete[] board[i];
    }
    delete[] board;

    return 0;
}