From d2fe4f41917d6858ea4101c30631c58308407206 Mon Sep 17 00:00:00 2001 From: Kevin Worth Date: Sat, 14 Jan 2006 09:01:24 -0800 Subject: [PATCH] Add kub program --- kub.c | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 kub.c diff --git a/kub.c b/kub.c new file mode 100644 index 0000000..3afca00 --- /dev/null +++ b/kub.c @@ -0,0 +1,192 @@ +#include +#include +#include + +char *colors[] = {"Black", "Blue", "Red", "Yellow"}; + +typedef enum {BLACK, BLUE, RED, YELLOW} color_t; + +typedef struct card { + color_t color; + int number; +} card_t; + +#define DECK_MAX_CARDS 104 + +typedef struct deck { + card_t cards[DECK_MAX_CARDS]; + int num_cards; +} deck_t; + +#define CARD_GROUP_MAX_CARDS 14 + +typedef struct card_group { + card_t cards[HAND_MAX_CARDS]; + int num_cards; +} card_group_t; + +#define BOARD_MAX_CARD_GROUPS (DECK_MAX_CARDS / 3) + +typedef struct board { + card_group_t groups[BOARD_MAX_CARD_GROUPS]; + int num_groups; +} board_t + +typedef struct player { + card_group_t hand; +} player_t; + +#define GAME_MAX_PLAYERS 4 + +typedef struct game { + player_t players[GAME_MAX_PLAYERS]; + int num_players; + board_t board; + deck_t deck; +} game_t; + +void card_print(card_t card) +{ + printf("%6s %2d\n", colors[card.color], card.number + 1); +} + +void card_group_init(card_group_t *card_group) +{ + card_group->num_cards = 0; +} + +void board_init(board_t *board) +{ + int i; + board->num_groups = 0; + + for (i = 0; i <= BOARD_MAX_CARD_GROUPS; ++i) + { + card_group_init(&board->groups[i]); + } +} + +void player_init(player_t *player) +{ + card_group_init(&player->hand); +} + +void game_init(game_t *game) +{ + int i; + game->num_players = 0 + + for (i = 0; i < GAME_MAX_PLAYERS; ++i) + { + player_init(&game->players[i]); + game->num_players += 1; + } + + board_init(&game->board); + deck_init(&game->deck); + deck_shuffle(&game->deck); +} + +int card_group_is_set(card_group_t *card_group) +{ + int i, j; + color_t seen_color[card_group->num_cards] + + if (card_group->num_cards > 4 || card_group->num_cards < 3) + { + return 0; + } + for (i = 0; i < card_group->num_cards - 1; ++i) + { + if (card_group->cards[i].number != card_group->cards[i + 1].number) + { + return 0; + } + } + seen_color[i] = card_group->cards[i].color; + for (i = 0; i < card_group->num_cards; ++i) + { + color_t color; + + seen_color[card_group->cards[i].color]++; + } + return 1; +} + +void deck_deal(deck_t *deck) +{ + card_t temp; + int rand_card; + int i; + for (i = 0; i < Players ) + { + rand_card = ((last + 1.0) * rand()) / (RAND_MAX + 1.0); + temp = deck->cards[rand_card]; + deck->cards[rand_card] = deck->cards[last]; + deck->cards[last] = temp; + } +} + + +void deck_init(deck_t *deck) +{ + int h, i, j; + deck->num_cards = 0; + for (h = 0; h <= 1; ++h) + { + for (i = 0; i <= 3; ++i) + { + for (j = 0; j <= 12; ++j) + { + deck->cards[j + (i * 13) + (h * 52)].color = i; + deck->cards[j + (i * 13) + (h * 52)].number = j; + deck->num_cards += 1; + } + } + } +} + +void deck_shuffle(deck_t *deck) +{ + card_t temp; + int rand_card; + int last; + for (last = deck->num_cards; last > 0; --last) + { + rand_card = ((last + 1.0) * rand()) / (RAND_MAX + 1.0); + temp = deck->cards[rand_card]; + deck->cards[rand_card] = deck->cards[last]; + deck->cards[last] = temp; + } +} + +void deck_print(deck_t *deck) +{ + int h, i, j; + for (h = 0; h <= 1; ++h) + { + for (i = 0; i <= 3; ++i) + { + for (j = 0; j <= 12; ++j) + { + card_print(deck->cards[j + (i * 13) + (h * 52)]); + } + } + } +} + +int main() +{ +#define MAX_PLAYERS 4 +#define HANDSIZE 14 +#define PLAYERS 4 + + deck_t deck; + + srand(time(NULL)); + + game_init(&game); + deck_print(&deck); + + return 0; + -- 2.43.0