109 lines
3.2 KiB
C
109 lines
3.2 KiB
C
#include <curses.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "world.h"
|
|
#include "game.h"
|
|
|
|
// Funkcia sa zavolá na začiatku hry
|
|
void* init_game() {
|
|
// Vytvoríme stav hry
|
|
struct game* stav = calloc(1, sizeof(struct game));
|
|
|
|
// Nastavíme počiatočné pozície
|
|
stav->myska_x = 5;
|
|
stav->myska_y = 5;
|
|
stav->macka_smer_x = 0;
|
|
stav->macka_smer_y = 0;
|
|
stav->macka_x = 15;
|
|
stav->macka_y = 15;
|
|
stav->skore = 0;
|
|
stav->koniec_hry = 0;
|
|
strcpy(stav->sprava, "Chyt myšku! Používaj šípky.");
|
|
|
|
return stav;
|
|
}
|
|
|
|
// Hlavná herná slučka - volá sa stále dokola
|
|
int game_event(struct event* event, void* game) {
|
|
struct game* stav = game;
|
|
|
|
// Ak stlačil ESC, koniec hry
|
|
if (event->type == EVENT_ESC) {
|
|
return 1;
|
|
}
|
|
|
|
// Ak je koniec hry, nič nerob
|
|
if (stav->koniec_hry) {
|
|
return 0;
|
|
}
|
|
|
|
// Kontrola, či mačka chytila myšku
|
|
if (stav->macka_x == stav->myska_x && stav->macka_y == stav->myska_y) {
|
|
stav->skore++;
|
|
sprintf(stav->sprava, "Skóre: %d", stav->skore);
|
|
|
|
// Nastav novú náhodnú pozíciu myšky
|
|
stav->myska_x = rand() % event->width;
|
|
stav->myska_y = rand() % event->height;
|
|
}
|
|
|
|
// Pohyb mačky podľa klávesnice
|
|
if (event->type == EVENT_KEY) {
|
|
if (event->key == KEY_UP) {
|
|
stav->macka_smer_x = 0;
|
|
stav->macka_smer_y = -1;
|
|
}
|
|
else if (event->key == KEY_DOWN) {
|
|
stav->macka_smer_x = 0;
|
|
stav->macka_smer_y = 1;
|
|
}
|
|
else if (event->key == KEY_LEFT) {
|
|
stav->macka_smer_x = -1;
|
|
stav->macka_smer_y = 0;
|
|
}
|
|
else if (event->key == KEY_RIGHT) {
|
|
stav->macka_smer_x = 1;
|
|
stav->macka_smer_y = 0;
|
|
}
|
|
}
|
|
|
|
// Automatický pohyb mačky (každý časový interval)
|
|
if (event->type == EVENT_TIMEOUT) {
|
|
// Pohyb mačky
|
|
int nova_x = stav->macka_x + stav->macka_smer_x;
|
|
int nova_y = stav->macka_y + stav->macka_smer_y;
|
|
|
|
// Kontrola, či je pohyb v rámci obrazovky
|
|
if (nova_x >= 0 && nova_x < event->width && nova_y >= 0 && nova_y < event->height) {
|
|
stav->macka_x = nova_x;
|
|
stav->macka_y = nova_y;
|
|
}
|
|
|
|
// Náhodný pohyb myšky (1 ku 4 šanca, že sa pohne)
|
|
if (rand() % 4 == 0) {
|
|
int smer = rand() % 4;
|
|
switch (smer) {
|
|
case 0: if (stav->myska_y > 0) stav->myska_y--; break;
|
|
case 1: if (stav->myska_y < event->height-1) stav->myska_y++; break;
|
|
case 2: if (stav->myska_x > 0) stav->myska_x--; break;
|
|
case 3: if (stav->myska_x < event->width-1) stav->myska_x++; break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Vykreslenie hry
|
|
clear_screen();
|
|
|
|
// Vykreslenie mačky (žltá na červenom)
|
|
set_color_cell('M', stav->macka_x, stav->macka_y, COLOR_YELLOW, COLOR_RED);
|
|
|
|
// Vykreslenie myšky (biela na modrom)
|
|
set_color_cell('m', stav->myska_x, stav->myska_y, COLOR_WHITE, COLOR_BLUE);
|
|
|
|
// Vykreslenie správy
|
|
set_message(stav->sprava, 1, 0);
|
|
|
|
return 0;
|
|
}
|
|
|