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';
}
}
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__ */
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;
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);
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);
}
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 */