pvjc26/a5/game.c
2026-05-09 12:14:14 +00:00

108 lines
1.9 KiB
C

#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "world.h"
#define MOUSE_COUNT 5
struct game {
int catx, caty;
int mousex[MOUSE_COUNT];
int mousey[MOUSE_COUNT];
int alive[MOUSE_COUNT];
int score;
};
void* init_game() {
srand(time(NULL));
struct game* g = calloc(1, sizeof(struct game));
g->catx = 10;
g->caty = 10;
for (int i = 0; i < MOUSE_COUNT; i++) {
g->mousex[i] = rand() % 40;
g->mousey[i] = rand() % 20;
g->alive[i] = 1;
}
g->score = 0;
return g;
}
int game_event(struct event* e, void* p) {
struct game* g = (struct game*)p;
int W = 40;
int H = 20;
if (e->type == EVENT_KEY) {
if (e->key == KEY_UP && g->caty > 0)
g->caty--;
if (e->key == KEY_DOWN && g->caty < H - 1)
g->caty++;
if (e->key == KEY_LEFT && g->catx > 0)
g->catx--;
if (e->key == KEY_RIGHT && g->catx < W - 1)
g->catx++;
}
for (int i = 0; i < MOUSE_COUNT; i++) {
if (g->alive[i]) {
if (g->catx == g->mousex[i] && g->caty == g->mousey[i]) {
g->alive[i] = 0;
g->score++;
}
}
}
for (int i = 0; i < MOUSE_COUNT; i++) {
if (!g->alive[i]) continue;
int m = rand() % 4;
if (m == 0 && g->mousey[i] > 0)
g->mousey[i]--;
if (m == 1 && g->mousey[i] < H - 1)
g->mousey[i]++;
if (m == 2 && g->mousex[i] > 0)
g->mousex[i]--;
if (m == 3 && g->mousex[i] < W - 1)
g->mousex[i]++;
}
clear();
set_cell('C', g->catx, g->caty);
for (int i = 0; i < MOUSE_COUNT; i++) {
if (g->alive[i]) {
set_cell('m', g->mousex[i], g->mousey[i]);
}
}
if (g->score == MOUSE_COUNT) {
return 1;
}
return 0;
}