From 9a684dd8ea4557488a1ea39754bd4988f41f56a3 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 8 Jun 2024 21:27:31 +0200 Subject: [PATCH] cleaning on scoring function --- display.c | 2 +- function.c | 76 ++++++++++++++++++++++++++---------------------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/display.c b/display.c index 6c7a2af..bb83153 100644 --- 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); } diff --git a/function.c b/function.c index 34efeac..fcceb10 100644 --- a/function.c +++ b/function.c @@ -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; } } } -- 2.30.2