cleaning on scoring function
authorLaurent Mazet <mazet@softndesign.org>
Sat, 8 Jun 2024 19:27:31 +0000 (21:27 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 8 Jun 2024 19:27:31 +0000 (21:27 +0200)
display.c
function.c

index 6c7a2af5c6b08ec46a7e75e7c58e112dad23f12d..bb831536b541917885e2818effbb36ef70fea845 100644 (file)
--- a/display.c
+++ b/display.c
@@ -216,7 +216,7 @@ void scorewindow (int score, int xoffset, int yoffset)
         mvaddch (yoffset + 1, xoffset + i, ACS_HLINE);
     }
     char str[12] = {0};
-    sprintf (str, " % 3d", score);
+    sprintf (str, " %3d", score);
     mvaddstr (yoffset + 2, xoffset, str);
 }
 
index 34efeacdfc4f63ba6ec7bea67194e7950df344da..fcceb103ee1ab585716f4d418b3e0a1e6b948769 100644 (file)
@@ -65,6 +65,17 @@ void cleanplay (play_t *play)
     memset (play->tab, ' ', play->xsize * play->ysize);
 }
 
+int _nbletters (play_t *play)
+{
+    int i, n = 0;
+    for (i = 0; i < play->xsize * play->ysize; i++) {
+        if (play->tab[i] != ' ') {
+            n++;
+        }
+    }
+    return n;
+}
+
 char *_getletteraddr (play_t *play, int x, int y)
 {
     return play->tab + x + y * play->xsize;
@@ -251,21 +262,7 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag)
         for (i = 0; i < play->xsize; i++) {
 
             char letter = *_getletteraddr (play, i, j);
-            if (letter == ' ') {
-                if (accountable) {
-                    intern = s * wfactor;
-                    if (nbletters > 1) {
-                        score += intern;
-                        if (nbletters >= board->length) {
-                            score += board->premium;
-                        }
-                    }
-                }
-                s = 0;
-                accountable = 0;
-                wfactor = 1;
-                nbletters = 0;
-            } else {
+            if (letter != ' ') {
                 s += _findvalue (bag, letter) * _letterfactor (board, turn, i, j);
                 if (*_getletteraddr (turn, i, j) != ' ') {
                     accountable = 1;
@@ -273,15 +270,21 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag)
                 wfactor *=  _wordfactor (board, turn, i, j);
                 nbletters++;
             }
-        }
-        if (accountable) {
-            intern = s * wfactor;
-            if (nbletters > 1) {
-                score += intern;
-                if (nbletters >= board->length) {
-                    score += board->premium;
+            if (((letter == ' ') || (i == play->xsize - 1)) && (accountable)) {
+                intern = s * wfactor;
+                if (nbletters > 1) {
+                    score += intern;
+                    if (_nbletters (turn) >= board->length) {
+                        score += board->premium;
+                    }
                 }
             }
+            if (letter == ' ') {
+                s = 0;
+                accountable = 0;
+                wfactor = 1;
+                nbletters = 0;
+            }
         }
     }
 
@@ -294,18 +297,7 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag)
         for (j = 0; j < play->ysize; j++) {
 
             char letter = *_getletteraddr (play, i, j);
-            if (letter == ' ') {
-                if ((accountable) && (nbletters > 1)) {
-                    score += s * wfactor;
-                    if (nbletters >= board->length) {
-                        score += board->premium;
-                    }
-                }
-                s = 0;
-                accountable = 0;
-                wfactor = 1;
-                nbletters = 0;
-            } else {
+            if (letter != ' ') {
                 s += _findvalue (bag, letter) * _letterfactor (board, turn, i, j);
                 if (*_getletteraddr (turn, i, j) != ' ') {
                     accountable = 1;
@@ -313,11 +305,17 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag)
                 wfactor *=  _wordfactor (board, turn, i, j);
                 nbletters++;
             }
-        }
-        if ((accountable) && (nbletters > 1)) {
-            score += s * wfactor;
-            if (nbletters >= board->length) {
-                score += board->premium;
+            if (((letter == ' ') || (j == play->ysize - 1)) && (accountable) && (nbletters > 1)) {
+                score += s * wfactor;
+                if (_nbletters (turn) >= board->length) {
+                    score += board->premium;
+                }
+            }
+            if (letter == ' ') {
+                s = 0;
+                accountable = 0;
+                wfactor = 1;
+                nbletters = 0;
             }
         }
     }