]> git.cworth.org Git - wordgame/blobdiff - word-game.c
Print the per-word statistics at the end of the game.
[wordgame] / word-game.c
index 29cf01bdd9fcb0ed1d109d2662e9b8d754cf5ee9..2b9fa4e1e3df481096778425c9a1092a9d06b41c 100644 (file)
@@ -57,6 +57,24 @@ _count_possible (dict_cursor_t       cursor,
        _count_possible (dict_cursor_next (cursor, c), depth + 1, possible);
 }
 
+static void
+_print_stats (int found[WORD_GAME_MAX_WORD_LENGTH+1],
+             int possible[WORD_GAME_MAX_WORD_LENGTH+1],
+             int found_total,
+             int possible_total)
+{
+    int i;
+
+    for (i = 2; i <= 17; i++)
+       if (possible[i])
+           printf ("%d:(%d/%d) ", i, found[i], possible[i]);
+
+    printf ("total:(%d/%d = %.2f%%)\n",
+           found_total, possible_total,
+           100 * (double) found_total / possible_total);
+}
+
+
 void
 word_game_play (const char     *puzzle,
                dict_t          *dict,
@@ -92,6 +110,7 @@ word_game_play (const char   *puzzle,
        tv_stop.tv_sec += time_limit_seconds;
     } else {
        sprintf (prompt, "> ");
+       remaining = 1;
     }
     do {
        if (time_limit_seconds) {
@@ -100,22 +119,19 @@ word_game_play (const char        *puzzle,
            sprintf (prompt, "%02d:%02d ", minutes, seconds);
        }
        response = readline (prompt);
-       add_history (response);
+       if (response == NULL)
+           break;
        if (strlen (response) == 0) {
            if (! just_saw_puzzle) {
                printf ("%s\n", puzzle);
                just_saw_puzzle = TRUE;
            } else {
-               for (i = 2; i <= 17; i++)
-                   if (possible[i])
-                       printf ("%d:(%d/%d) ", i, found[i], possible[i]);
-               printf ("total:(%d/%d = %.2f%%)\n",
-                       found_total, possible_total,
-                       100 * (double) found_total / possible_total);
+               _print_stats (found, possible, found_total, possible_total);
            }
        } else {
            dict_entry_t *entry;
            just_saw_puzzle = FALSE;
+           add_history (response);
            if (response[strlen (response) - 1] == '\n')
                response[strlen (response) - 1] = '\0';
            entry = dict_lookup (answers, response);
@@ -143,14 +159,23 @@ word_game_play (const char        *puzzle,
        }
     } while (remaining > 0);
 
-    printf ("%s\n", puzzle);
-
-    printf ("Words you found:\n");
-    dict_print_by_length_if (answers, seen_predicate);
+    printf ("\n%s\n", puzzle);
 
-    printf ("\nWords you missed:\n");
-    dict_print_by_length_if (answers, unseen_predicate);
     printf ("\n");
+    _print_stats (found, possible, found_total, possible_total);
+    printf ("\n");
+
+    if (found_total) {
+       printf ("Words you found:\n");
+       dict_print_by_length_if (answers, seen_predicate);
+       printf ("\n");
+    }
+
+    if (found_total < possible_total) {
+       printf ("Words you missed:\n");
+       dict_print_by_length_if (answers, unseen_predicate);
+       printf ("\n");
+    }
 
     printf ("You found %d of %d words (%.2f%%)\n",
            found_total, possible_total,