]> git.cworth.org Git - kub/commitdiff
Fix tile group validation functions
authorKevin Worth <kworth@kworth-laptop.(none)>
Thu, 7 May 2009 15:06:03 +0000 (11:06 -0400)
committerKevin Worth <kworth@kworth-laptop.(none)>
Thu, 7 May 2009 15:06:03 +0000 (11:06 -0400)
tile_group_is_set() has been tested
and appears to be working. No major changes
made here.

tile_group_is_run_one() has been tested and
appears to be working. This version has been
significantly revamped. The concept for the previous
version was "slick" but was flawed. One failure came
from testing a 3 tile group containing a yellow tile.
The yellow tile tried to increment index 3, but the max
index was 2.

no changes made to tile_group_is_run_two() which
has not been tested. It may not be needed unless
it can be shown to be "better" than _is_run_one()

kub.c

diff --git a/kub.c b/kub.c
index 69be1d22e989480c196e2a3b1f708d0efdb89892..213270901d3cd502be2afb4eb03989719a7ca6de 100644 (file)
--- a/kub.c
+++ b/kub.c
@@ -191,21 +191,27 @@ static int tile_group_is_run_one(tile_group_t *tile_group)
 {
     int i;
     qsort (&tile_group->tiles[0], tile_group->num_tiles,
 {
     int i;
     qsort (&tile_group->tiles[0], tile_group->num_tiles,
-          sizeof (tile_t), tile_compare);
-          
+        sizeof (tile_t), tile_compare);
+    
     if (tile_group->num_tiles > 13 || tile_group->num_tiles < 3)
     {
     if (tile_group->num_tiles > 13 || tile_group->num_tiles < 3)
     {
-       return 0;
+        printf("fail run - invalid num tiles; ");
+        return 0;
     }
     for (i = 0; i < tile_group->num_tiles - 1; ++i)
     }
     for (i = 0; i < tile_group->num_tiles - 1; ++i)
-       if(tile_group->tiles[i].color != tile_group->tiles[i + 1].color)
-       {
-           return 0;
-       }
-       if(tile_group->tiles[i].number != tile_group->tiles[i + 1].number -1)
-       {
-           return 0;
-       }
+    {
+        if(tile_group->tiles[i].color != tile_group->tiles[i + 1].color)
+        {
+            printf("fail run - colors don't match; ");
+            return 0;
+        }
+        if( tile_group->tiles[i].number != tile_group->tiles[i + 1].number -1 &&
+            i+1 != tile_group->num_tiles)
+        {
+            printf("fail run - invalid number sequence; ");
+            return 0;
+        }
+    }
     return 1;
 }
 
     return 1;
 }
 
@@ -275,27 +281,32 @@ static int tile_group_is_run_two(tile_group_t *tile_group)
 static int tile_group_is_set(tile_group_t *tile_group)
 {
     int i;
 static int tile_group_is_set(tile_group_t *tile_group)
 {
     int i;
-    color_t seen_color[tile_group->num_tiles];
+    color_t seen_color[4];
+    for (i = 0; i < 4; i++)
+        seen_color[i] = 0;
     
     if (tile_group->num_tiles > 4 || tile_group->num_tiles < 3)
     {
     
     if (tile_group->num_tiles > 4 || tile_group->num_tiles < 3)
     {
-       return 0;
+        printf("fail set - invalid num tiles; ");
+        return 0;
     }
     for (i = 0; i < tile_group->num_tiles - 1; ++i) 
     {
     }
     for (i = 0; i < tile_group->num_tiles - 1; ++i) 
     {
-       if (tile_group->tiles[i].number != tile_group->tiles[i + 1].number)
-       {
-           return 0;
-       }
+        if (tile_group->tiles[i].number != tile_group->tiles[i + 1].number &&
+            i+1 != tile_group->num_tiles)
+        {
+            printf("fail set - numbers don't match; ");
+            return 0;
+        }
+        seen_color[tile_group->tiles[i].color] += 1;
     }
     }
-    seen_color[i] = tile_group->tiles[i].color;
-    for (i = 0; i < tile_group->num_tiles; ++i)
+    for (i = 0; i < 4; i++)
     {
     {
-       seen_color[tile_group->tiles[i].color]++;
-       if (seen_color[tile_group->tiles[i].color] > 1)
-       {
-           return 0;
-       }
+        if (seen_color[i] > 1)
+        {
+            printf("fail set - repeat color; ");
+            return 0;
+        }
     }
     return 1;
 }
     }
     return 1;
 }
@@ -521,12 +532,13 @@ static gboolean on_button_release_event (GtkWidget *widget, GdkEventButton *even
                 group.num_tiles++;
             }
         }
                 group.num_tiles++;
             }
         }
+        printf("is run %d\n", tile_group_is_run_one(&group) );
+        printf("is set %d\n", tile_group_is_set(&group) );
         for (i = 0; i < group.num_tiles; i++)
             tile_print(group.tiles[i]);
     }
     
     game->current_tile = -1;
         for (i = 0; i < group.num_tiles; i++)
             tile_print(group.tiles[i]);
     }
     
     game->current_tile = -1;
-    printf ("You released button %d\n", event->button);
 
     return TRUE;
 }
 
     return TRUE;
 }