#include "game.h" #include "world.h" void game_init(GameState *game) { for (int y = 0; y < SIZE; ++y) for (int x = 0; x < SIZE; ++x) game->board[y][x] = EMPTY; game->current_player = X; game->cursor_x = 0; game->cursor_y = 0; game->game_over = 0; game->winner = EMPTY; } void draw(void *state) { GameState *game = (GameState *)state; world_clear(); for (int y = 0; y < SIZE; ++y) { for (int x = 0; x < SIZE; ++x) { world_set_color((x == game->cursor_x && y == game->cursor_y) ? 2 : 1); char *symbol = "[ ]"; if (game->board[y][x] == X) symbol = "[X]"; else if (game->board[y][x] == O) symbol = "[O]"; world_draw_string(x * 4, y * 2, symbol); } } if (game->game_over) { world_set_color(3); world_draw_string(0, SIZE * 2 + 1, game->winner == EMPTY ? "Remiza!" : (game->winner == X ? "Vyhral X!" : "Vyhral O!")); } } void check_winner(GameState *game) { for (int i = 0; i < SIZE; ++i) { if (game->board[i][0] != EMPTY && game->board[i][0] == game->board[i][1] && game->board[i][1] == game->board[i][2]) { game->winner = game->board[i][0]; game->game_over = 1; return; } if (game->board[0][i] != EMPTY && game->board[0][i] == game->board[1][i] && game->board[1][i] == game->board[2][i]) { game->winner = game->board[0][i]; game->game_over = 1; return; } } if (game->board[0][0] != EMPTY && game->board[0][0] == game->board[1][1] && game->board[1][1] == game->board[2][2]) { game->winner = game->board[0][0]; game->game_over = 1; return; } if (game->board[0][2] != EMPTY && game->board[0][2] == game->board[1][1] && game->board[1][1] == game->board[2][0]) { game->winner = game->board[0][2]; game->game_over = 1; return; } int full = 1; for (int y = 0; y < SIZE; ++y) for (int x = 0; x < SIZE; ++x) if (game->board[y][x] == EMPTY) full = 0; if (full) { game->game_over = 1; game->winner = EMPTY; } } void key_handler(int key, void *state) { GameState *game = (GameState *)state; if (game->game_over) return; switch (key) { case 'w': if (game->cursor_y > 0) game->cursor_y--; break; case 's': if (game->cursor_y < SIZE - 1) game->cursor_y++; break; case 'a': if (game->cursor_x > 0) game->cursor_x--; break; case 'd': if (game->cursor_x < SIZE - 1) game->cursor_x++; break; case ' ': { if (game->board[game->cursor_y][game->cursor_x] == EMPTY) { game->board[game->cursor_y][game->cursor_x] = game->current_player; check_winner(game); if (!game->game_over) game->current_player = (game->current_player == X) ? O : X; } } break; } } void update(void *state) { }