From b66e10406e44152c38307cf1d94da4389db0a80b Mon Sep 17 00:00:00 2001 From: David Volovskiy Date: Wed, 3 Sep 2025 06:45:14 -0400 Subject: [PATCH] Made hand info into a struct --- watch-faces/complication/blackjack_face.c | 53 +++++++++++------------ 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/watch-faces/complication/blackjack_face.c b/watch-faces/complication/blackjack_face.c index 5234d02a..c403579a 100755 --- a/watch-faces/complication/blackjack_face.c +++ b/watch-faces/complication/blackjack_face.c @@ -46,12 +46,11 @@ #define MAX_PLAYER_CARDS_DISPLAY 4 #define BOARD_DISPLAY_START 4 -uint8_t score_player = 0; -uint8_t score_dealer = 0; -uint8_t hand_player[BLACKJACK_MAX_HAND_SIZE] = {0xFF}; -uint8_t hand_dealer[BLACKJACK_MAX_HAND_SIZE] = {0xFF}; -uint8_t idx_player = 0; -uint8_t idx_dealer = 0; +typedef struct { + uint8_t score; + uint8_t idx_hand; + uint8_t hand[BLACKJACK_MAX_HAND_SIZE]; +} hand_info_t; typedef enum { BJ_TITLE_SCREEN, @@ -63,6 +62,8 @@ typedef enum { static game_state_t game_state; static uint8_t deck[DECK_SIZE] = {0}; static uint8_t current_card = 0; +hand_info_t player; +hand_info_t dealer; static uint8_t generate_random_number(uint8_t num_values) { // Emulator: use rand. Hardware: use arc4random. @@ -109,31 +110,27 @@ static uint8_t get_next_card(void) { } static void reset_hands(void) { - score_player = 0; - score_dealer = 0; - idx_player = 0; - idx_dealer = 0; - memset(hand_player, 0xFF, sizeof(hand_player)); - memset(hand_dealer, 0xFF, sizeof(hand_dealer)); + memset(&player, 0, sizeof(player)); + memset(&dealer, 0, sizeof(dealer)); reset_deck(); } static void give_player_card(void) { uint8_t card = get_next_card(); - hand_player[idx_player++] = card; - score_player += card; + player.hand[player.idx_hand++] = card; + player.score += card; } static void give_dealer_card(void) { uint8_t card = get_next_card(); - hand_dealer[idx_dealer++] = card; - score_dealer += card; + dealer.hand[dealer.idx_hand++] = card; + dealer.score += card; } static void display_player_hand(void) { - uint8_t cards_to_display = idx_player > MAX_PLAYER_CARDS_DISPLAY ? MAX_PLAYER_CARDS_DISPLAY : idx_player; + uint8_t cards_to_display = player.idx_hand > MAX_PLAYER_CARDS_DISPLAY ? MAX_PLAYER_CARDS_DISPLAY : player.idx_hand; for (uint8_t i=cards_to_display; i>0; i--) { - uint8_t card = hand_player[idx_player-i]; + uint8_t card = player.hand[player.idx_hand-i]; if (card == 10) card = 0; const char display_char = card + '0'; watch_display_character(display_char, BOARD_DISPLAY_START + cards_to_display - i); @@ -141,7 +138,7 @@ static void display_player_hand(void) { } static void display_dealer_hand(void) { - uint8_t card = hand_dealer[idx_dealer - 1]; + uint8_t card = dealer.hand[dealer.idx_hand - 1]; if (card == 10) card = 0; const char display_char = card + '0'; watch_display_character(display_char, 0); @@ -149,13 +146,13 @@ static void display_dealer_hand(void) { static void display_player_score(void) { char buf[4]; - sprintf(buf, "%2d", score_player); + sprintf(buf, "%2d", player.score); watch_display_text(WATCH_POSITION_SECONDS, buf); } static void display_dealer_score(void) { char buf[4]; - sprintf(buf, "%2d", score_dealer); + sprintf(buf, "%2d", dealer.score); watch_display_text(WATCH_POSITION_TOP_RIGHT, buf); } @@ -206,11 +203,11 @@ static void begin_playing(void) { } static void perform_hit(void) { - if (score_player == 21) { + if (player.score == 21) { return; // Assume hitting on 21 is a mistake and ignore } give_player_card(); - if (score_player > 21) { + if (player.score > 21) { display_bust(); } else { display_player_hand(); @@ -227,9 +224,9 @@ static void perform_stand(void) { static void dealer_performs_hits(void) { give_dealer_card(); display_dealer_hand(); - if (score_dealer > 21) { + if (dealer.score > 21) { display_win(); - } else if (score_dealer > score_player) { + } else if (dealer.score > player.score) { display_lose(); } else { display_dealer_hand(); @@ -238,10 +235,10 @@ static void dealer_performs_hits(void) { } static void see_if_dealer_hits(void) { - if (score_dealer > 16) { - if (score_dealer > score_player) { + if (dealer.score > 16) { + if (dealer.score > player.score) { display_lose(); - } else if (score_dealer < score_player) { + } else if (dealer.score < player.score) { display_win(); } else { display_tie();