]> git.cworth.org Git - wordgame/commitdiff
Add the ability to specify grid letters on the command line.
authorCarl Worth <cworth@cworth.org>
Wed, 29 Nov 2006 07:09:46 +0000 (23:09 -0800)
committerCarl Worth <cworth@cworth.org>
Wed, 29 Nov 2006 07:10:59 +0000 (23:10 -0800)
grid.c
grid.h
grid4.c

diff --git a/grid.c b/grid.c
index 273a6e83e765cb28c2ac291a17766e3ee1249b16..c68ae435353d4e09380cfbd46aa874a6cf91c7ec 100644 (file)
--- a/grid.c
+++ b/grid.c
@@ -86,6 +86,31 @@ grid_init (grid_t *grid, int size)
            cubes_source[cubes[i]][rand_within(6)];
 }
 
+void
+grid_set_letters (grid_t       *grid,
+                 const char    *letters)
+{
+    int i;
+    int num_cubes = grid->size * grid->size;
+    char letter;
+
+    if (strlen (letters) != num_cubes) {
+       fprintf (stderr, "Error: Invalid string for %dx%d grid. Expected %d letters: %s\n",
+                grid->size, grid->size, num_cubes, letters);
+       exit (1);
+    }
+
+    for (i = 0; i < num_cubes; i++) {
+       letter = tolower (letters[i]);
+       if (letter < 'a' || letter > 'z') {
+           fprintf (stderr, "Error: Invalid character '%c' in letters: %s\n",
+                    letters[i], letters);
+           exit (1);
+       }
+       grid->letters[i / grid->size][i % grid->size] = letter;
+    }
+}
+
 char *
 grid_string (grid_t *grid)
 {
diff --git a/grid.h b/grid.h
index e5b3d1e09b12164db08851f552f62a9bf621aece..e6c205d9085d76774dae4c0cb7239a6ee3625b1c 100644 (file)
--- a/grid.h
+++ b/grid.h
@@ -43,6 +43,10 @@ typedef struct _grid {
 void
 grid_init (grid_t *grid, int size);
 
+void
+grid_set_letters (grid_t       *grid,
+                 const char    *letters);
+
 char *
 grid_string (grid_t *grid);
 
diff --git a/grid4.c b/grid4.c
index cd1e90b7f245c50e7e9e16ee44c20a22029d3528..989e38dae1c3a2d4435e68b5d1d6fbc3daf3ff24 100644 (file)
--- a/grid4.c
+++ b/grid4.c
 #include "grid.h"
 #include "word-game.h"
 
+#include <string.h>
 #include <sys/time.h>
 #include <time.h>
 
 #define GAME_LENGTH (3 * 60)
 int
-main (void)
+main (int argc, char *argv[])
 {
     dict_t dict, solution;
     grid_t grid;
     struct timeval tv;
+    const char *letters = NULL;
+
+    if (argc > 1) {
+       if (argc == 2) {
+           letters = argv[1];
+       } else {
+           fprintf (stderr, "Usage: %s [letters]\n", argv[0]);
+           fprintf (stderr, "Uses the given 16 letters or else a random grid.\n");
+           return 1;
+       }
+    }
 
     gettimeofday (&tv, NULL);
     srand (tv.tv_sec ^ tv.tv_usec);
@@ -37,6 +49,8 @@ main (void)
     dict_add_words_from_file (&dict, "words.txt");
 
     grid_init (&grid, 4);
+    if (letters)
+       grid_set_letters (&grid, letters);
 
     dict_init (&solution);
     grid_solve (&grid, &dict, &solution);