display score
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 7 Jun 2024 13:43:08 +0000 (15:43 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 7 Jun 2024 13:43:08 +0000 (15:43 +0200)
display.c
display.h
function.c
function.h
scrabble.c

index df37cc4edc46428a8214eae4062baf75023f12e5..6c7a2af5c6b08ec46a7e75e7c58e112dad23f12d 100644 (file)
--- a/display.c
+++ b/display.c
@@ -138,11 +138,12 @@ int _helpwindow (char *msg, int xoffset, int yoffset, int length)
     return j;
 }
 
-void helpwindow (char *msg, char *msg2, int xoffset, int yoffset, int length)
+int helpwindow (char *msg, char *msg2, int xoffset, int yoffset)
 {
     char *title = "Help message";
-    int i;
+    int length = strmaxlen (msg, '\n');
 
+    int i;
     for (i = 0; (i < length) && (title[i] != '\0'); i++) {
         mvaddch (yoffset , xoffset + i, title[i]);
         mvaddch (yoffset + 1, xoffset + i, ACS_HLINE);
@@ -151,6 +152,8 @@ void helpwindow (char *msg, char *msg2, int xoffset, int yoffset, int length)
     j += _helpwindow (msg, xoffset, yoffset + j, length);
     j++;
     j += _helpwindow (msg2, xoffset, yoffset + j, length);
+
+    return length;
 }
 
 void valuewindow (bag_t *bag, int xoffset, int yoffset, int length, char current)
@@ -204,4 +207,17 @@ void drawwindow (draw_t *game, int xoffset, int yoffset)
     set_color (white);
 }
 
+void scorewindow (int score, int xoffset, int yoffset)
+{
+    char *title = "Score";
+    int i;
+    for (i = 0; title[i] != '\0'; i++) {
+        mvaddch (yoffset, xoffset + i, title[i]);
+        mvaddch (yoffset + 1, xoffset + i, ACS_HLINE);
+    }
+    char str[12] = {0};
+    sprintf (str, " % 3d", score);
+    mvaddstr (yoffset + 2, xoffset, str);
+}
+
 /* vim: set ts=4 sw=4 et: */
index 85d754b341338bfb23542dc708c51cf85325cbfd..ae15e2336cc70179dfa8bffae6e86728ad2d4dad 100644 (file)
--- a/display.h
+++ b/display.h
@@ -9,12 +9,14 @@ void showletter (char letter, int x, int y, int mode);
 
 void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full);
 
-void helpwindow (char *msg, char *msg2, int xoffset, int yoffset, int length);
+int helpwindow (char *msg, char *msg2, int xoffset, int yoffset);
 
 void valuewindow (bag_t *bag, int xoffset, int yoffset, int length, char current);
 
 void drawwindow (draw_t *game, int xoffset, int yoffset);
 
+void scorewindow (int score, int xoffset, int yoffset);
+
 #endif /* __DISPLAY_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index 6a5ca6ccc1e2678d4dfa4f06786edae441ac8d38..24b6f31cb6257c8750b3441fc2a069c1ee14fb51 100644 (file)
@@ -18,6 +18,30 @@ int contains (char *list, char *str)
     return 0;
 }
 
+int strcount (char *str, char ch)
+{
+    int n = 0;
+    while ((str = strchr (str, ch)) != NULL) {
+        str++;
+        n++;
+    }
+    return n;
+}
+
+int strmaxlen (char *str, char ch)
+{
+    int len = 0;
+    char *end = NULL;
+    while ((end = strchr (str, ch)) != NULL) {
+        int l = (int)(end - str);
+        if (l > len) {
+            len = l;
+        }
+        str = end + 1;
+    }
+    return len;
+}
+
 play_t *initplay (int xsize, int ysize)
 {
     play_t *play = (play_t *) malloc (sizeof (play_t));
index 6d70d63c21b6caa1ce77a10ae6213249fa64f685..f9dd4bf8a0e3dd7d6fdb088ccb0759107332929c 100644 (file)
@@ -5,6 +5,10 @@
 
 int contains (char *list, char *str);
 
+int strcount (char *str, char ch);
+
+int strmaxlen (char *str, char ch);
+
 play_t *initplay (int xsize, int ysize);
 
 void freeplay (play_t *play);
index 5d8abe64d4c14a85e000b803acfb7ed1b525c239..41c0a8d5e1323d687acbbd9ee7974a80fed6ed1b 100644 (file)
@@ -149,7 +149,10 @@ int main (int argc, char *argv[])
     int xdrawwin = xoffset;
     int ydrawwin = 2 * yoffset + max (board->ysize, 1 + (bag->nbletters + 1) /2);
 
-    helpwindow (help, getextrahelp (language), xhelpwin, yhelpwin, 30);
+    int helplen = helpwindow (help, getextrahelp (language), xhelpwin, yhelpwin);
+
+    int xscorewin = xhelpwin + helplen+ xoffset;
+    int yscorewin = yhelpwin;
 
     int mode = 0;
     showboard (play, board, xoffset, yoffset, mode);
@@ -168,6 +171,7 @@ int main (int argc, char *argv[])
         }
         showletter (highlight, x + xoffset, y + yoffset, 1);
         valuewindow (bag, xvaluewin, yvaluewin, 10, highlight);
+        scorewindow (score, xscorewin, yscorewin);
 
         switch (getch ()) {
         case '\t':