diff options
| author | david <[email protected]> | 2026-05-05 10:09:21 -0300 |
|---|---|---|
| committer | david <[email protected]> | 2026-05-05 10:09:21 -0300 |
| commit | a7f7b091f41410ac10ad59730ebb2f235eb2bb16 (patch) | |
| tree | ab311bc778863161ce9f56857299adcf37f0da20 /games/gamemaze.c | |
| parent | c96ea5f3ebf506794e3222a277f88036618e7e35 (diff) | |
| download | petratc-a7f7b091f41410ac10ad59730ebb2f235eb2bb16.tar.gz petratc-a7f7b091f41410ac10ad59730ebb2f235eb2bb16.zip | |
started maze game it's just a walking simulator for now
Diffstat (limited to 'games/gamemaze.c')
| -rw-r--r-- | games/gamemaze.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/games/gamemaze.c b/games/gamemaze.c new file mode 100644 index 0000000..c47d2d5 --- /dev/null +++ b/games/gamemaze.c @@ -0,0 +1,93 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <unistd.h> +#include <ncurses.h> +#include "../rat.h" + +/* +// i'm probably gonna use a loop erased random walk algorithm +//the screen will start as 100% walls then slowly build a path +//(i have no idea how many resources this will take, if it's slow i'll ask grok to multithread it) +// +// a couple ammount of cheeses will spawn in places where there are no walls +// eating cheeses will add to the base addstat() but addstat() only will be called if 1 cheese is eaten +// idk what else to do here. +// you start at the top and end at the bottom if i ever wanna automate taking care of the rat +*/ + +#define width getmaxx(stdscr) +#define height getmaxy(stdscr) + +static int running; +static int won; +static int found; + +typedef struct{ + + int posy; + int posx; + char *face[1]; + +}cursor; + +static void stop() { + clear(); + refresh(); + endwin(); + if(won){addstat(&rat.hunger); addstat(&rat.fun); printf("the rat feels less hungry...\n\n");} + won = 0; + found = 0; + running = 0; +} +//yes i stole the code from gamecatch shut up it works + + + + + +void gamemaze(){ + + srand(time(NULL)); + static int initialized = 0; + if(initialized == 0){ initscr();}else{refresh();} + ++initialized; + + found = 0; + + noecho(); + cbreak(); + nodelay(stdscr, TRUE); + keypad(stdscr, TRUE); + curs_set(0); + + cursor curs = {0, 0, {"@"}}; + + running = 1; + + while (running) { + if (!running) stop(); + int ch = getch(); + switch (ch) { + case 'q': case 'Q': stop(); break; + case 'a': case 'A': case KEY_LEFT: + curs.posx -= 1; break; + case 'd': case 'D': case KEY_RIGHT: + curs.posx += 1; break; + case 'w': case 'W': case KEY_UP: + curs.posy -= 1; break; + case 's': case 'S': case KEY_DOWN: + curs.posy += 1; break; + } + + if (!running) break; + clear(); + + mvaddstr(curs.posy, curs.posx, curs.face[0]); + + refresh(); + usleep(50000); + } + +stop(); +} |
