91 lines
1.7 KiB
C
91 lines
1.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <ncurses.h>
|
|
#include <time.h>
|
|
|
|
#include "include/main.h"
|
|
#include "include/snake.h"
|
|
#include "include/field.h"
|
|
#include "../config.h"
|
|
|
|
void die(char *fmt, ...) {
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
|
|
fprintf(stderr, "fatal: ");
|
|
vfprintf(stderr, fmt, args);
|
|
fprintf(stderr, "\n");
|
|
|
|
va_end(args);
|
|
exit(1);
|
|
}
|
|
|
|
void free_s(void *p) {
|
|
free(p);
|
|
p = NULL;
|
|
}
|
|
|
|
int irandom(int lower, int upper) {
|
|
int i;
|
|
i = (rand() % (upper - lower + 1)) + lower;
|
|
return i;
|
|
}
|
|
|
|
int main(void) {
|
|
int c, dirn, score;
|
|
Snake *s;
|
|
Field *f;
|
|
|
|
srand(time(NULL));
|
|
|
|
// init ncurses
|
|
initscr();
|
|
keypad(stdscr, true);
|
|
noecho();
|
|
cbreak();
|
|
nodelay(stdscr, true);
|
|
curs_set(0);
|
|
|
|
s = new_snake(starting_len, getmaxx(stdscr) / 2, getmaxy(stdscr) / 2);
|
|
f = new_field(n_apples, getmaxx(stdscr), getmaxy(stdscr));
|
|
dirn = UP;
|
|
score = 0;
|
|
|
|
while ((c = getch())) {
|
|
clear();
|
|
refresh();
|
|
|
|
field_print(f);
|
|
switch (c) {
|
|
case up_key:
|
|
if (dirn != DOWN)
|
|
dirn = UP;
|
|
break;
|
|
case down_key:
|
|
if (dirn != UP)
|
|
dirn = DOWN;
|
|
break;
|
|
case right_key:
|
|
if (dirn != LEFT)
|
|
dirn = RIGHT;
|
|
break;
|
|
case left_key:
|
|
if (dirn != RIGHT)
|
|
dirn = LEFT;
|
|
break;
|
|
case quit_key: goto quit;
|
|
}
|
|
snake_forward(s, dirn);
|
|
snake_print(s);
|
|
|
|
refresh();
|
|
napms(screen_speed);
|
|
}
|
|
|
|
quit:
|
|
delete_snake(s);
|
|
delete_field(f);
|
|
endwin();
|
|
}
|