]> git.cworth.org Git - wordgame/blobdiff - word-game.c
Increase the window size a bit
[wordgame] / word-game.c
index 29cf01bdd9fcb0ed1d109d2662e9b8d754cf5ee9..48e8692edaf41a0ef8f6d65f3ccf964878bd3c98 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright © 2006 Carl Worth
  *
- * This program is free software; you can redistribute it and\/or modify
+ * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
  * any later version.
@@ -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,30 +110,34 @@ word_game_play (const char *puzzle,
        tv_stop.tv_sec += time_limit_seconds;
     } else {
        sprintf (prompt, "> ");
+       remaining = 1;
     }
-    do {
+    while (1) {
        if (time_limit_seconds) {
-           minutes = remaining / 60;
-           seconds = remaining % 60;
-           sprintf (prompt, "%02d:%02d ", minutes, seconds);
+           if (remaining > 0) {
+               minutes = remaining / 60;
+               seconds = remaining % 60;
+               sprintf (prompt, "%02d:%02d ", minutes, seconds);
+           } else {
+               printf ("Time's up.\a\n");
+               sprintf (prompt, "> ");
+               time_limit_seconds = 0;
+           }
        }
        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);
@@ -141,16 +163,25 @@ word_game_play (const char        *puzzle,
            remaining = floor (0.5 + (tv_stop.tv_sec - tv.tv_sec) + (tv_stop.tv_usec - tv.tv_usec) / 1000000.0);
            minutes = remaining / 60;
        }
-    } 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,