From: Laurent Mazet Date: Wed, 28 Aug 2024 20:49:30 +0000 (+0200) Subject: snake lives X-Git-Tag: v1.0~21 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=39eebead75592527bbc5ae78ffccb0f564fce860;p=snake.git snake lives --- diff --git a/function.c b/function.c index ac28ef0..908a00e 100644 --- a/function.c +++ b/function.c @@ -300,6 +300,7 @@ int movesnake (board_t *board, snake_t *snake, int dir) snake->length++; break; } + *cell = ' '; snake->x[0] = x; snake->y[0] = y; @@ -312,4 +313,23 @@ int movesnake (board_t *board, snake_t *snake, int dir) return ret; } +void drawbonus (board_t *board, int malus, int bonus) +{ + int i; + + memset (board->tab, ' ', board->width * board->height); + + for (i = 0; i < malus; i++) { + int x = rand () % board->width; + int y = rand () % board->height; + *getcell (board, x, y) = '4'; + } + + for (i = 0; i < bonus; i++) { + int x = rand () % board->width; + int y = rand () % board->height; + *getcell (board, x, y) = '5'; + } +} + /* vim: set ts=4 sw=4 et: */ diff --git a/function.h b/function.h index b7e8d5f..49e7cfa 100644 --- a/function.h +++ b/function.h @@ -45,6 +45,8 @@ void freesnake (snake_t *snake); int movesnake (board_t *board, snake_t *snake, int dir); +void drawbonus (board_t *board, int malus, int bonus); + #endif /* __FUNCTION_H__ */ /* vim: set ts=4 sw=4 et: */ diff --git a/snake.c b/snake.c index 25dc596..8a15985 100644 --- a/snake.c +++ b/snake.c @@ -19,7 +19,10 @@ char *progname = NULL; char *version = "0.1"; char *filename = NULL; -int scale = 0; +int scale = 1; +int seed = 0; +int malus = 10; +int bonus = 5; char *help = " Move up cursor\n" @@ -102,6 +105,9 @@ int main (int argc, char *argv[]) return 1; } + /* init seed */ + seed = newseed (seed); + /* init curses window */ initscr (); noecho (); @@ -117,6 +123,7 @@ int main (int argc, char *argv[]) int h0board = LINES - 2 * (yoffset + 1); board_t *board = initboard (w0board, h0board); applyscale (board, scale); + drawbonus (board, malus, bonus); /* window positions */ int xboard = board->xoffset = xoffset + 1; @@ -141,17 +148,24 @@ int main (int argc, char *argv[]) int stop = 0; int mode = 0; timeval_t turn = {0, 0}; - int speed = 3000; + timeval_t renew = {0, 0}; + int speed = 1000; while (!stop) { - boardwindow (board, 1); - displaysnake (board, snake); - if (isovertime (&turn)) { - setendtime (&turn, speed); - if (!movesnake (board, snake, snake->dir)) { - mode = 2; + boardwindow (board, 0); + if (mode == 1) { + if (isovertime (&turn)) { + setendtime (&turn, speed); + if (!movesnake (board, snake, snake->dir)) { + mode = 2; + } + } + if (isovertime (&renew)) { + drawbonus (board, malus, bonus); + setendtime (&renew, 10 * speed); } } + displaysnake (board, snake); int ch = getch (); @@ -190,27 +204,19 @@ int main (int argc, char *argv[]) switch (ch) { case KEY_UP: case 'i': - if (!movesnake (board, snake, 0)) { - mode = 2; - } + snake->dir = 0; break; case KEY_LEFT: case 'j': - if (!movesnake (board, snake, 1)) { - mode = 2; - } + snake->dir = 1; break; case KEY_DOWN: case 'k': - if (!movesnake (board, snake, 2)) { - mode = 2; - } + snake->dir = 2; break; case KEY_RIGHT: case 'l': - if (!movesnake (board, snake, 3)) { - mode = 2; - } + snake->dir = 3; break; } } diff --git a/time.c b/time.c index 9c1e119..a342181 100644 --- a/time.c +++ b/time.c @@ -27,7 +27,7 @@ int isovertime (timeval_t *t) struct timeval _c; struct timeval *c = &_c; gettimeofday (c, NULL); - return ((t->tv_sec + t->tv_usec == 0) || (t->tv_sec < c->tv_sec) || ((t->tv_sec == c->tv_sec) && ( t->tv_usec < c->tv_usec))); + return ((t->tv_sec < c->tv_sec) || ((t->tv_sec == c->tv_sec) && ( t->tv_usec < c->tv_usec))); } void msleep (int msec)