From: Kevin Worth Date: Tue, 13 Apr 2010 05:07:49 +0000 (-0400) Subject: Show Carl the latest X-Git-Url: https://git.cworth.org/git?p=kub;a=commitdiff_plain;h=d5b72f7a44d69439a539e92c9c337646954af4ab Show Carl the latest Selected groups of tiles get moved from the deck into the next open group on the board. The state can be saved by hitting enter, which passes the turn to the next player. If you make some changes, you can revert them by hitting escape. The board gets checked to see if all groups are either valid runs or sets. --- diff --git a/kub.c b/kub.c old mode 100755 new mode 100644 index 223e4ea..f76bb97 --- a/kub.c +++ b/kub.c @@ -233,7 +233,12 @@ static int tile_compare(const void *one, const void *two) static int tile_compare_1(tile_t *tile_one, tile_t *tile_two) { - return tile_one->number - tile_two->number; + return tile_one->number - tile_two->number; //Sort lowest to highest +} + +static int int_compare(int *x, int *y) +{ + return y - x; //Sort highest to lowest } /* @@ -367,6 +372,21 @@ static int tile_group_is_set(tile_group_t *tile_group) return 1; } +static gboolean board_valid(board_t *board) +{ + int i; + gboolean valid = TRUE; + for (i = 0; i < board->num_groups; ++i) + { + if (!(tile_group_is_run_one(&board->groups[i])) && + !(tile_group_is_set(&board->groups[i]))) + { + valid = FALSE; + } + } + return valid; +} + static void deck_deal(game_t *game, deck_t *deck) { tile_t temp; @@ -468,6 +488,34 @@ static void deck_draw(game_t *game, cairo_t *cr, GdkRegion *region) } } +static void board_draw(game_t *game, cairo_t *cr, GdkRegion *region) +{ + int i, j; + for (i = 0; i < game->board.num_groups; i++) + { + for (j = 0; j < game->board.groups[i].num_tiles; j++) + { + tile_draw(game, &game->board.groups[i].tiles[j], cr, region); + //tile_print(game->board.groups[i].tiles[j]); + } + } +} + +static void board_print(game_t *game) +{ + int i, j; + printf("\tBegin board print\n"); + for (i = 0; i < game->board.num_groups; i++) + { + printf("\tBegin group %d\n", i); + for (j = 0; j < game->board.groups[i].num_tiles; j++) + { + tile_print(game->board.groups[i].tiles[j]); + } + printf("\tEnd group %d\n", i); + } +} + static void hand_print(game_t *game, int player) { int i; @@ -498,7 +546,6 @@ static void hand_draw(game_t *game, int player, cairo_t *cr, GdkRegion *region, static void save_state(game_t *game) { - //DO STUFF HERE game->state.board = game->board; game->state.deck = game->deck; //game->state.players = game->players; @@ -557,18 +604,29 @@ static gboolean on_expose_event (GtkWidget *widget, GdkEventExpose *event, game_ cr = gdk_cairo_create (widget->window); deck_draw(game, cr, event->region); + board_draw(game, cr, event->region); if (game->selection_box.visible) selection_box_draw(&game->selection_box, cr); hand_draw(game, game->current_player, cr, event->region, widget); -// hand_draw(game, 0, cr, event->region); + //hand_draw(game, 0, cr, event->region); cairo_destroy (cr); return TRUE; } +/* +static gboolean on_configure_event (GtkWidget *widget, GdkEventConfigure *event, game_t *game) +{ + cairo_t *cr; + + cr = gdk_cairo_create (event->window); + hand_draw(game, game->current_player, cr, event->window, widget); +// gtk_widget_queue_draw(widget); +} +*/ static gboolean on_key_press_event (GtkWidget *widget, GdkEventKey *event, game_t *game) { cairo_t *cr; @@ -595,11 +653,9 @@ static gboolean on_key_press_event (GtkWidget *widget, GdkEventKey *event, game_ gtk_widget_queue_draw(widget); } - if (event->keyval == 112) //HIT "P" + if (event->keyval == 65474) //HIT "F5" { - deck_print(&game->deck); - //hand_draw(game, game->current_player, cr, event->region, widget); - //on_expose_event(widget, event, game); + gtk_widget_queue_draw(widget); } @@ -712,13 +768,11 @@ static gboolean on_button_release_event (GtkWidget *widget, GdkEventButton *even box->visible = 0; gtk_widget_queue_draw_area (widget, x_min, y_min, width, height); -// tile_group_t group; -// group.num_tiles = 0; - - tile_t* group[TILE_GROUP_MAX_TILES]; - int num_tiles = 0; + tile_group_t group; + group.num_tiles = 0; int i, tile_x, tile_y, tile_x2, tile_y2; + int tiles_to_remove[game->deck.num_tiles]; for (i = 0; i < game->deck.num_tiles; i++) { tile_x = game->deck.tiles[i].x; @@ -749,46 +803,45 @@ static gboolean on_button_release_event (GtkWidget *widget, GdkEventButton *even /*or bottom edge of tile selected*/ (x_min >= tile_x && x_min <= tile_x2 && y_min >= tile_y && y_min <= tile_y) ) - { -// group.tiles[group.num_tiles] = game->deck.tiles[i]; -// group.num_tiles++; + { + tiles_to_remove[group.num_tiles] = i; - group[num_tiles] = &game->deck.tiles[i]; - num_tiles++; + group.tiles[group.num_tiles] = game->deck.tiles[i]; + group.num_tiles++; } } - //printf("is run %d\n", tile_group_is_run_one(&group) ); - //printf("is set %d\n", tile_group_is_set(&group) ); + printf("is run %d\n", tile_group_is_run_one(&group) ); + printf("is set %d\n", tile_group_is_set(&group) ); -// int matching_y = y_min; - -// for (i = 0; i < group.num_tiles; i++) + qsort (tiles_to_remove, group.num_tiles, sizeof (int), int_compare); - for (i = 0; i < num_tiles; i++) + for (i = 0; i < group.num_tiles; i++) { -// tile_print(group.tiles[i]); - gtk_widget_queue_draw_area (widget, group[i]->x - 1 , group[i]->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); - group[i]->x = x_min + (i * (TILE_WIDTH)); - group[i]->y = y_min; - gtk_widget_queue_draw_area (widget, group[i]->x - 1 , group[i]->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); + tile_print(group.tiles[i]); + gtk_widget_queue_draw_area (widget, group.tiles[i].x - 1, + group.tiles[i].y - 1, TILE_WIDTH + 1, + TILE_HEIGHT + 2); + + group.tiles[i].x = x_min + (i * (TILE_WIDTH)); + group.tiles[i].y = y_min; + + gtk_widget_queue_draw_area (widget, group.tiles[i].x - 1, + group.tiles[i].y - 1, TILE_WIDTH + 1, + TILE_HEIGHT + 2); + + //Remove tile from deck + if (tiles_to_remove[i] != game->deck.num_tiles - 1) + game->deck.tiles[tiles_to_remove[i]] = game->deck.tiles[game->deck.num_tiles-1]; + game->deck.num_tiles--; } -/* int j; - int new_x = 0; - for (i = 0; i < group.num_tiles; i++) + + if (group.num_tiles > 0) { - for (j = 0; j < game->deck.num_tiles; j++) - { - if (group.tiles[i].x == game->deck.tiles[j].x && - group.tiles[i].y == game->deck.tiles[j].y) - { - new_x = x_min + (i * (TILE_WIDTH)); - gtk_widget_queue_draw_area (widget, game->deck.tiles[j].x - 1 , game->deck.tiles[j].y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); - game->deck.tiles[j].x = new_x; - game->deck.tiles[j].y = matching_y; - gtk_widget_queue_draw_area (widget, new_x - 1 , matching_y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); - } - } - }*/ + game->board.groups[game->board.num_groups] = group; + game->board.num_groups++; + } + board_print(game); + printf("\nBut is the board valid?\t\t%s\n", board_valid(&game->board)); } game->select_mode = 1; @@ -904,6 +957,11 @@ int main(int argc, char *argv[]) deck_print(&game.deck); deck_spread(&game.deck); deck_deal(&game, &game.deck); + + game.state.board = game.board; + game.state.deck = game.deck; + //game->state.players = game.players; + //hand_print(&game, 0); //With Zero being passed, will print hand for player 1(players[0]) //deck_print(&game.deck); @@ -924,6 +982,8 @@ int main(int argc, char *argv[]) G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (window), "expose_event", G_CALLBACK (on_expose_event), &game); +// g_signal_connect (G_OBJECT (window), "configure_event", +// G_CALLBACK (on_configure_event), &game); g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (on_key_press_event), &game); g_signal_connect (G_OBJECT (window), "button_press_event",