#include #include "game.h" #include "world.h" // * int select_game_mode() { world_clear(); // * world_print("Zvol si herny rezim:\n1. PvP\n2. PvE\n3. AI vs Human\n"); // * char c = world_read_key(); // * return c - '0'; } void init_game(GameState *game, int mode) { game->mode = mode; game->current_player = 0; game->moves_made = 0; char default_symbols[MAX_PLAYERS] = {'X', 'O', 'A', 'B'}; for (int i = 0; i < MAX_PLAYERS; i++) { game->symbols[i] = default_symbols[i]; } if (mode == 1) { game->board_size = 4; game->num_players = 3; } else if (mode == 2) { game->board_size = 2; // začne s 2x2, rastie do 4x4 game->num_players = 2; } else { game->board_size = 3; game->num_players = 2; } for (int y = 0; y < MAX_BOARD_SIZE; y++) { for (int x = 0; x < MAX_BOARD_SIZE; x++) { game->board[y][x] = ' '; } } } void draw_game(GameState *game) { for (int y = 0; y < game->board_size; y++) { for (int x = 0; x < game->board_size; x++) { world_set_cursor(x * 4 + 1, y * 2 + 1); // * world_print("%c", game->board[y][x]); // * } } world_set_cursor(0, game->board_size * 2 + 2); // * world_print("Na rade je hrac: %c\n", game->symbols[game->current_player]); // * } void handle_input(GameState *game) { int x = 0, y = 0; while (1) { world_set_cursor(x * 4 + 1, y * 2 + 1); // * char key = world_read_key(); // * if (key == 'w' && y > 0) y--; else if (key == 's' && y < game->board_size - 1) y++; else if (key == 'a' && x > 0) x--; else if (key == 'd' && x < game->board_size - 1) x++; else if (key == ' ') { if (game->board[y][x] == ' ') { game->board[y][x] = game->symbols[game->current_player]; game->moves_made++; break; } } } } void computer_move(GameState *game) { for (int y = 0; y < game->board_size; y++) { for (int x = 0; x < game->board_size; x++) { if (game->board[y][x] == ' ') { game->board[y][x] = game->symbols[game->current_player]; game->moves_made++; return; } } } } int check_winner(GameState *game) { int max_line = 0; int size = game->board_size; for (int p = 0; p < game->num_players; p++) { char sym = game->symbols[p]; int longest = 0; // Kontrola horizontálne, vertikálne a diagonálne for (int y = 0; y < size; y++) { int row = 0, col = 0; for (int x = 0; x < size; x++) { row = (game->board[y][x] == sym) ? row + 1 : 0; col = (game->board[x][y] == sym) ? col + 1 : 0; if (row > longest) longest = row; if (col > longest) longest = col; } } int diag1 = 0, diag2 = 0; for (int i = 0; i < size; i++) { diag1 = (game->board[i][i] == sym) ? diag1 + 1 : 0; diag2 = (game->board[i][size - 1 - i] == sym) ? diag2 + 1 : 0; if (diag1 > longest) longest = diag1; if (diag2 > longest) longest = diag2; } if (longest >= 3) { game->current_player = p; return 1; } if (longest > max_line) { max_line = longest; } } return 0; }