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