]> git.earman.xyz Git - sensor-watch.git/commitdiff
Made hand info into a struct
authorDavid Volovskiy <devolov@gmail.com>
Wed, 3 Sep 2025 10:45:14 +0000 (06:45 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Wed, 3 Sep 2025 10:45:14 +0000 (06:45 -0400)
watch-faces/complication/blackjack_face.c

index 5234d02a8f6067a152f58d07b3dd0213ccfa9f72..c403579ac6b54d8eeba2c4eb3d837092f0744c86 100755 (executable)
 #define MAX_PLAYER_CARDS_DISPLAY 4\r
 #define BOARD_DISPLAY_START 4\r
 \r
-uint8_t score_player = 0;\r
-uint8_t score_dealer = 0;\r
-uint8_t hand_player[BLACKJACK_MAX_HAND_SIZE] = {0xFF};\r
-uint8_t hand_dealer[BLACKJACK_MAX_HAND_SIZE] = {0xFF};\r
-uint8_t idx_player = 0;\r
-uint8_t idx_dealer = 0;\r
+typedef struct {\r
+    uint8_t score;\r
+    uint8_t idx_hand;\r
+    uint8_t hand[BLACKJACK_MAX_HAND_SIZE];\r
+} hand_info_t;\r
 \r
 typedef enum {\r
     BJ_TITLE_SCREEN,\r
@@ -63,6 +62,8 @@ typedef enum {
 static game_state_t game_state;\r
 static uint8_t deck[DECK_SIZE] = {0};\r
 static uint8_t current_card = 0;\r
+hand_info_t player;\r
+hand_info_t dealer;\r
 \r
 static uint8_t generate_random_number(uint8_t num_values) {\r
     // Emulator: use rand. Hardware: use arc4random.\r
@@ -109,31 +110,27 @@ static uint8_t get_next_card(void) {
 }\r
 \r
 static void reset_hands(void) {\r
-    score_player = 0;\r
-    score_dealer = 0;\r
-    idx_player = 0;\r
-    idx_dealer = 0;\r
-    memset(hand_player, 0xFF, sizeof(hand_player));\r
-    memset(hand_dealer, 0xFF, sizeof(hand_dealer));\r
+    memset(&player, 0, sizeof(player));\r
+    memset(&dealer, 0, sizeof(dealer));\r
     reset_deck();\r
 }\r
 \r
 static void give_player_card(void) {\r
     uint8_t card = get_next_card();\r
-    hand_player[idx_player++] = card;\r
-    score_player += card;\r
+    player.hand[player.idx_hand++] = card;\r
+    player.score += card;\r
 }\r
 \r
 static void give_dealer_card(void) {\r
     uint8_t card = get_next_card();\r
-    hand_dealer[idx_dealer++] = card;\r
-    score_dealer += card;\r
+    dealer.hand[dealer.idx_hand++] = card;\r
+    dealer.score += card;\r
 }\r
 \r
 static void display_player_hand(void) { \r
-    uint8_t cards_to_display = idx_player > MAX_PLAYER_CARDS_DISPLAY ? MAX_PLAYER_CARDS_DISPLAY : idx_player;\r
+    uint8_t cards_to_display = player.idx_hand > MAX_PLAYER_CARDS_DISPLAY ? MAX_PLAYER_CARDS_DISPLAY : player.idx_hand;\r
     for (uint8_t i=cards_to_display; i>0; i--) {\r
-        uint8_t card = hand_player[idx_player-i];\r
+        uint8_t card = player.hand[player.idx_hand-i];\r
         if (card == 10) card = 0;\r
         const char display_char = card + '0';\r
         watch_display_character(display_char, BOARD_DISPLAY_START + cards_to_display - i);\r
@@ -141,7 +138,7 @@ static void display_player_hand(void) {
 }\r
 \r
 static void display_dealer_hand(void) {\r
-    uint8_t card = hand_dealer[idx_dealer - 1];\r
+    uint8_t card = dealer.hand[dealer.idx_hand - 1];\r
     if (card == 10) card = 0;\r
     const char display_char = card + '0';\r
     watch_display_character(display_char, 0);\r
@@ -149,13 +146,13 @@ static void display_dealer_hand(void) {
 \r
 static void display_player_score(void) {\r
     char buf[4];\r
-    sprintf(buf, "%2d", score_player);\r
+    sprintf(buf, "%2d", player.score);\r
     watch_display_text(WATCH_POSITION_SECONDS, buf);\r
 }\r
 \r
 static void display_dealer_score(void) {\r
     char buf[4];\r
-    sprintf(buf, "%2d", score_dealer);\r
+    sprintf(buf, "%2d", dealer.score);\r
     watch_display_text(WATCH_POSITION_TOP_RIGHT, buf);\r
 }\r
 \r
@@ -206,11 +203,11 @@ static void begin_playing(void) {
 }\r
 \r
 static void perform_hit(void) {\r
-    if (score_player == 21) {\r
+    if (player.score == 21) {\r
         return; // Assume hitting on 21 is a mistake and ignore\r
     }\r
     give_player_card();\r
-    if (score_player > 21) {\r
+    if (player.score > 21) {\r
         display_bust();\r
     } else {\r
         display_player_hand();\r
@@ -227,9 +224,9 @@ static void perform_stand(void) {
 static void dealer_performs_hits(void) {\r
     give_dealer_card();\r
     display_dealer_hand();\r
-    if (score_dealer > 21) {\r
+    if (dealer.score > 21) {\r
         display_win();\r
-    } else if (score_dealer > score_player) {\r
+    } else if (dealer.score > player.score) {\r
         display_lose();\r
     } else {\r
         display_dealer_hand();\r
@@ -238,10 +235,10 @@ static void dealer_performs_hits(void) {
 }\r
 \r
 static void see_if_dealer_hits(void) {\r
-    if (score_dealer > 16) {\r
-        if (score_dealer > score_player) {\r
+    if (dealer.score > 16) {\r
+        if (dealer.score > player.score) {\r
             display_lose();\r
-        } else if (score_dealer < score_player) {\r
+        } else if (dealer.score < player.score) {\r
             display_win();\r
         } else {\r
             display_tie();\r