snake lives
authorLaurent Mazet <mazet@softndesign.org>
Wed, 28 Aug 2024 20:49:30 +0000 (22:49 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Wed, 28 Aug 2024 20:49:30 +0000 (22:49 +0200)
function.c
function.h
snake.c
time.c

index ac28ef0aa6d8f9bc89697e134cd53c707ddbab33..908a00e4be76da269bdddabc139d60c0417c9c30 100644 (file)
@@ -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: */
index b7e8d5f56ceee8e11b1929ddddadd5a75ba39aa6..49e7cfa8fe837e6d8c634209574006c76764d96e 100644 (file)
@@ -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 25dc5964df1e17516e29177dac5db19af8b47623..8a15985a5d33a0fe01ac2332fe63fcee55e0d2d2 100644 (file)
--- 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 =
     "<i> 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 9c1e119ecb917b0745c1769e9674ce0594bb51dc..a342181814b1e75afcc4f2951c9db8cde7a625aa 100644 (file)
--- 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)