From: Laurent Mazet Date: Tue, 15 Oct 2024 22:08:04 +0000 (+0200) Subject: add functions: help and pause X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=6d6d090767017692e0091017b5bbb6127ad4ecfd;p=pacman.git add functions: help and pause --- diff --git a/display.c b/display.c index d01e505..f8c2f42 100644 --- a/display.c +++ b/display.c @@ -17,6 +17,9 @@ int _helpwindow (char *msg, int xoffset, int yoffset, int length) int j = 0; while ((msg) && (*msg != '\0')) { if ((*msg == '\n') || (i == length)) { + while (i < length) { + mvaddch (yoffset + j, xoffset + i++, ' '); + } i = 0; j++; } @@ -58,8 +61,12 @@ void _dobound (int xsize, int ysize, int xoffset, int yoffset) int helpwindow (char *msg, int xoffset, int yoffset) { - _displaytitle ("Help message", xoffset, yoffset); int length = strmaxlen (msg, '\n'); + int nb = strnbchr (msg, '\n'); + _dobound (length, nb + 2, xoffset, yoffset); + _helpwindow ("\n", xoffset, yoffset + 0, length); + _helpwindow ("\n", xoffset, yoffset + 1, length); + _displaytitle ("Help message", xoffset, yoffset); int j = 2; j += _helpwindow (msg, xoffset, yoffset + j, length); @@ -250,10 +257,15 @@ char *savewindow (int length, int xoffset, int yoffset) return name; } -void msgwindow (char *msg, int xoffset, int yoffset, int length) +void msgwindow (char *msg, int xoffset, int yoffset, int length, int mode) { - setcolor (black_gray); - //_dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset); + if (mode == 0) { + setcolor (black_gray); + } else { + //setcolor (black_gray); + _dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset); + setcolor (gray_black); + } if (length > 0) { int i; for (i = 0; i < length; i++) { diff --git a/display.h b/display.h index 5cb101c..320a5e5 100644 --- a/display.h +++ b/display.h @@ -14,7 +14,7 @@ void boardwindow (board_t *board, int mode); char *savewindow (int length, int xoffset, int yoffset); -void msgwindow (char *msg, int xoffset, int yoffset, int length); +void msgwindow (char *msg, int xoffset, int yoffset, int length, int mode); #endif /* __DISPLAY_H__ */ diff --git a/function.c b/function.c index d095eb2..e48e66e 100644 --- a/function.c +++ b/function.c @@ -24,6 +24,19 @@ int strmaxlen (char *str, char ch) return len; } +int strnbchr (char *str, char ch) +{ + int n = 0; + while ((str != NULL) && (*str != '\0')) { + n++; + str = strchr (str, ch); + if (str != NULL) { + str++; + } + } + return n; +} + board_t *initboard (int width, int height) { board_t *board = (board_t *) malloc (sizeof (board_t)); diff --git a/function.h b/function.h index d5926d4..2624ada 100644 --- a/function.h +++ b/function.h @@ -21,6 +21,8 @@ int strmaxlen (char *str, char ch); +int strnbchr (char *str, char ch); + board_t *initboard (int width, int height); board_t *setscale (board_t *board, int scale); diff --git a/pacman.c b/pacman.c index 9583a37..0da56ad 100644 --- a/pacman.c +++ b/pacman.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "debug.h" #include "display.h" @@ -30,10 +31,12 @@ int yoffset = 1; int scorelen = 15; char *help = - " Move up cursor\n" - " Move left cursor\n" - " Move down cursor\n" - " Move right cursor\n" + " Help message\n" + " Move up\n" + " Move left\n" + " Move down\n" + " Move right\n" + "

Pause\n" " Quit\n" " Save file\n" ; @@ -169,6 +172,7 @@ int main (int argc, char *argv[]) int yboard = board->yoffset = yoffset; int xsave = max (xboard + (board->width - savelen) / 2, 1); int ysave = yboard + (board->height - 1) / 2; + char *savename = NULL; /* pacman position */ @@ -202,7 +206,7 @@ int main (int argc, char *argv[]) /* display score */ char msg[128] = {0}; sprintf (msg, "score: % 5d", score); - msgwindow (msg, xscore, yscore, scorelen); + msgwindow (msg, xscore, yscore, scorelen, 0); /* turn span */ delta += toc (&turn); @@ -297,6 +301,23 @@ int main (int argc, char *argv[]) /* general controls */ switch (ch) { case KEY_ESC: + case 'h': + helpwindow (help, xboard + (board->width - strmaxlen (help, '\n')) / 2, yboard + (board->height - strnbchr (help, '\n') - 1) / 2); + while (getch () == ERR) { + msleep (200); + } + tic (&turn); + draw = 1; + break; + case 'p': + sprintf (msg, "Game paused"); + msgwindow (msg, xboard + (board->width - strlen (msg)) / 2, yboard + (board->height - 1) / 2, strlen (msg), 1); + while (getch () == ERR) { + msleep (200); + } + tic (&turn); + draw = 1; + break; case 'q': stop = 1; break;