no bonus/malus under the snake
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 30 Aug 2024 08:58:37 +0000 (10:58 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 30 Aug 2024 08:58:37 +0000 (10:58 +0200)
function.c
function.h
snake.c

index 01214384beca67ee7b2a25ac578eae52654940e5..d1867390ac0f9049d95542e51899498672057209 100644 (file)
@@ -332,21 +332,26 @@ int movesnake (board_t *board, snake_t *snake, int dir)
     return ret;
 }
 
-void drawbonus (board_t *board, int malus, int bonus)
+void drawbonus (board_t *board, snake_t *snake, int malus, int bonus)
 {
+    int x, y;
     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;
+        do {
+            x = rand () % board->width;
+            y = rand () % board->height;
+        } while (isown (snake, x, y));
         *getcell (board, x, y) = '4';
     }
 
     for (i = 0; i < bonus; i++) {
-        int x = rand () % board->width;
-        int y = rand () % board->height;
+        do {
+            x = rand () % board->width;
+            y = rand () % board->height;
+        } while (isown (snake, x, y));
         *getcell (board, x, y) = '5';
     }
 }
index 49e7cfa8fe837e6d8c634209574006c76764d96e..65da2491eeee50326165f2a6155a02ff48fb736a 100644 (file)
@@ -45,7 +45,7 @@ void freesnake (snake_t *snake);
 
 int movesnake (board_t *board, snake_t *snake, int dir);
 
-void drawbonus (board_t *board, int malus, int bonus);
+void drawbonus (board_t *board, snake_t *snake, int malus, int bonus);
 
 #endif /* __FUNCTION_H__ */
 
diff --git a/snake.c b/snake.c
index 63641faaff9f627284197b0e8eb7b0a2f4b922db..83d2a979ccadd3907dd39cd345d2eb30ac5322e5 100644 (file)
--- a/snake.c
+++ b/snake.c
@@ -127,7 +127,8 @@ 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);
+    snake_t *snake = initsnake (board);
+    drawbonus (board, snake, malus, bonus);
 
     /* window positions */
     int xboard = board->xoffset = xoffset + 1;
@@ -142,9 +143,6 @@ int main (int argc, char *argv[])
 
     VERBOSE (DEBUG, printf ("width: %d\nheight: %d\n", board->width, board->height));
 
-    /* init snake */
-    snake_t *snake = initsnake (board);
-
     /* help window */
     helpwindow (help, xhelp, yhelp);
 
@@ -157,22 +155,6 @@ int main (int argc, char *argv[])
     int nbturns = 0;
     while (!stop) {
 
-        boardwindow (board, 0);
-
-        switch (mode) {
-        case 0:
-            setcolor (gray_black);
-            break;
-        case 1:
-            setcolor (yellow_black);
-            break;
-        case 2:
-            setcolor (red_black);
-            break;
-        }
-        scorewindow (xscore, yscore, whelp - 2, score, (duration * speed) / 1000);
-        setcolor (gray_black);
-
         if (mode == 1) {
             if (isovertime (&turn)) {
                 setendtime (&turn, speed);
@@ -190,12 +172,28 @@ int main (int argc, char *argv[])
 
             }
             if (nbturns == ratio) {
-                drawbonus (board, malus, bonus);
+                drawbonus (board, snake, malus, bonus);
                 nbturns = 0;
             }
         }
+
+        boardwindow (board, 0);
         displaysnake (board, snake);
 
+        switch (mode) {
+        case 0:
+            setcolor (gray_black);
+            break;
+        case 1:
+            setcolor (yellow_black);
+            break;
+        case 2:
+            setcolor (red_black);
+            break;
+        }
+        scorewindow (xscore, yscore, whelp - 2, score, (duration * speed) / 1000);
+        setcolor (gray_black);
+
         int ch = getch ();
 
         /* main controls */