#include #include typedef struct { int **board; int size; int turn; int current; } Game; void initializeGame(Game *game, int size) { game->size = size; game->turn = 0; game->current = 1; game->board = (int **)malloc(size * sizeof(int *)); for (int i = 0; i < size; i++) { game->board[i] = (int *)malloc(size * sizeof(int)); for (int j = 0; j < size; j++) { game->board[i][j] = 0; } } } void printHorizonLine(int size, const char *start, const char *seg, const char *end) { for (int i = 0; i < size; i++) { if (i == 0) { printf("%s", start); } printf("───"); if (i + 1 == size) { printf("%s\n", end); } else { printf("%s", seg); } } } void displayBoard(Game *game) { /* ┌───┬───┬───┐ │ O │ X │ O │ ├───┼───┼───┤ │ O │ X │ O │ ├───┼───┼───┤ │ O │ X │ O │ └───┴───┴───┘ */ printHorizonLine(game->size, "┌", "┬", "┐"); for (int i = 0; i < game->size; i++) { if (i != 0) { printHorizonLine(game->size, "├", "┼", "┤"); } for (int j = 0; j < game->size; j++) { switch (game->board[i][j]) { case 1: printf("| O "); break; case 2: printf("| X "); break; default: printf("| "); break; } } printf("|\n"); } printHorizonLine(game->size, "└", "┴", "┘"); } int isEnd(Game *game) { return game->turn >= game->size * game->size; } int checkWin(Game *game) { for (int i = 0; i < game->size; i++) { for (int j = 0; j < game->size; j++) { if (game->board[i][j] != game->current) { break; } if (j + 1 == game->size) { return 1; } } for (int j = 0; j < game->size; j++) { if (game->board[j][i] != game->current) { break; } if (j + 1 == game->size) { return 1; } } } for (int j = 0; j < game->size; j++) { if (game->board[j][j] != game->current) { break; } if (j + 1 == game->size) { return 1; } } for (int j = 0; j < game->size; j++) { if (game->board[j][game->size - j - 1] != game->current) { break; } if (j + 1 == game->size) { return 1; } } return 0; } char getCurrentPlayer(Game *game) { return game->current == 1 ? 'O' : 'X'; }