nsnake/src/main.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();
}