add functions: help and pause
authorLaurent Mazet <mazet@softndesign.org>
Tue, 15 Oct 2024 22:08:04 +0000 (00:08 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 15 Oct 2024 22:08:04 +0000 (00:08 +0200)
display.c
display.h
function.c
function.h
pacman.c

index d01e505e0e57ed6486b643c76c74c92771a656aa..f8c2f42118e45f815cf3235ec32b1181efcde2c4 100644 (file)
--- 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++) {
index 5cb101c6e120e107d2b749c0f2f7a6866602f34e..320a5e5fdfbd0286d6c35c557d9093346cf7eb9e 100644 (file)
--- 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__ */
 
index d095eb2a30192726f917702bf0313bbbfdc1d885..e48e66ed72768548f2b591fa89f42f03d8d22e34 100644 (file)
@@ -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));
index d5926d4706687b85c12d49415a3f012e2dd9d21f..2624ada8bf18bdb24edcb11535c71c7c7e532dad 100644 (file)
@@ -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);
index 9583a378173ca21a8d1d4655f141ec75e63bf1d6..0da56adeb31216a303f5f458dd3084d7b5e9177e 100644 (file)
--- a/pacman.c
+++ b/pacman.c
@@ -7,6 +7,7 @@
 #include <curses.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "debug.h"
 #include "display.h"
@@ -30,10 +31,12 @@ int yoffset = 1;
 int scorelen = 15;
 
 char *help =
-    "<i> Move up cursor\n"
-    "<j> Move left cursor\n"
-    "<k> Move down cursor\n"
-    "<l> Move right cursor\n"
+    "<h> Help message\n"
+    "<i> Move up\n"
+    "<j> Move left\n"
+    "<k> Move down\n"
+    "<l> Move right\n"
+    "<p> Pause\n"
     "<q> Quit\n"
     "<s> 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;