]> git.earman.xyz Git - sensor-watch.git/commitdiff
Hi-lo: Additional code tweaks
authorChris <chris.ellis.git.dev@gmail.com>
Sun, 1 Sep 2024 18:30:31 +0000 (19:30 +0100)
committerMatheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Sat, 7 Sep 2024 22:59:04 +0000 (19:59 -0300)
movement/watch_faces/complication/higher_lower_game_face.c
movement/watch_faces/complication/higher_lower_game_face.h

index bbf456bf8e1df3eab9ef92bbb4badea21ddfb81e..f9dbcd096719d83f61ab54c38784022ab910d673 100755 (executable)
 #define GAME_BOARD_SIZE 6\r
 #define MAX_BOARDS 40\r
 #define GUESSES_PER_SCREEN 5\r
-#define WIN_SCORE MAX_BOARDS * GUESSES_PER_SCREEN\r
+#define WIN_SCORE (MAX_BOARDS * GUESSES_PER_SCREEN)\r
 #define STATUS_DISPLAY_START 0\r
 #define BOARD_SCORE_DISPLAY_START 2\r
 #define BOARD_DISPLAY_START 4\r
 #define BOARD_DISPLAY_END 9\r
 #define MIN_CARD_VALUE 2\r
 #define MAX_CARD_VALUE 14\r
-#define DUPLICATES_OF_CARD 4\r
-#define DECK_COUNT (DUPLICATES_OF_CARD * (MAX_CARD_VALUE - MIN_CARD_VALUE + 1))\r
+#define CARD_RANK_COUNT (MAX_CARD_VALUE - MIN_CARD_VALUE + 1)\r
+#define CARD_SUIT_COUNT 4\r
+#define DECK_SIZE (CARD_SUIT_COUNT * CARD_RANK_COUNT)\r
 #define FLIP_BOARD_DIRECTION false\r
 \r
 typedef struct card_t {\r
@@ -75,8 +76,8 @@ static card_t game_board[GAME_BOARD_SIZE] = {0};
 static uint8_t guess_position = 0;\r
 static uint8_t score = 0;\r
 static uint8_t completed_board_count = 0;\r
-static uint8_t _deck[DECK_COUNT];\r
-static uint8_t _curr_card;\r
+static uint8_t deck[DECK_SIZE] = {0};\r
+static uint8_t current_card = 0;\r
 \r
 static uint8_t generate_random_number(uint8_t num_values) {\r
     // Emulator: use rand. Hardware: use arc4random.\r
@@ -87,35 +88,37 @@ static uint8_t generate_random_number(uint8_t num_values) {
 #endif\r
 }\r
 \r
-static void stack_deck(uint8_t *array) {\r
-    const uint8_t unique_cards = MAX_CARD_VALUE - MIN_CARD_VALUE + 1;\r
-    for (uint8_t i = 0; i < unique_cards; i++)\r
-    {\r
-        for (uint8_t j = 0; j < DUPLICATES_OF_CARD; j++) \r
-            array[(i * DUPLICATES_OF_CARD) + j] = MIN_CARD_VALUE + i;\r
+static void stack_deck(void) {\r
+    for (size_t i = 0; i < CARD_RANK_COUNT; i++) {\r
+        for (size_t j = 0; j < CARD_SUIT_COUNT; j++)\r
+            deck[(i * CARD_SUIT_COUNT) + j] = MIN_CARD_VALUE + i;\r
     }\r
 }\r
 \r
-static void shuffle_deck(uint8_t *array, uint8_t n) {\r
+static void shuffle_deck(void) {\r
     // Randomize shuffle with Fisher Yates\r
-    uint8_t i, j, tmp;\r
-     for (i = n - 1; i > 0; i--) {\r
-         j = generate_random_number(0xFF) % (i + 1);\r
-         tmp = array[j];\r
-         array[j] = array[i];\r
-         array[i] = tmp;\r
-     }\r
+    size_t i;\r
+    size_t j;\r
+    uint8_t tmp;\r
+\r
+    for (i = DECK_SIZE - 1; i > 0; i--) {\r
+        j = generate_random_number(0xFF) % (i + 1);\r
+        tmp = deck[j];\r
+        deck[j] = deck[i];\r
+        deck[i] = tmp;\r
+    }\r
 }\r
 \r
 static void reset_deck(void) {\r
-    _curr_card = 0;\r
-    stack_deck(_deck);\r
-    shuffle_deck(_deck, DECK_COUNT);\r
+    current_card = 0;\r
+    stack_deck();\r
+    shuffle_deck();\r
 }\r
 \r
 static uint8_t get_next_card(void) {\r
-    if (_curr_card >= DECK_COUNT) reset_deck();\r
-    return _deck[_curr_card++];\r
+    if (current_card >= DECK_SIZE)\r
+        reset_deck();\r
+    return deck[current_card++];\r
 }\r
 \r
 static void reset_board(bool first_round) {\r
@@ -156,8 +159,8 @@ static void set_segment_at_position(segment_t segment, uint8_t position) {
 \r
 static void render_board_position(size_t board_position) {\r
     const size_t display_position = FLIP_BOARD_DIRECTION\r
-            ? BOARD_DISPLAY_START + board_position\r
-            : BOARD_DISPLAY_END - board_position;\r
+                                    ? BOARD_DISPLAY_START + board_position\r
+                                    : BOARD_DISPLAY_END - board_position;\r
     const bool revealed = game_board[board_position].revealed;\r
 \r
     //// Current position indicator spot\r
@@ -196,7 +199,7 @@ static void render_board_position(size_t board_position) {
     }\r
 }\r
 \r
-static void render_board() {\r
+static void render_board(void) {\r
     for (size_t i = 0; i < GAME_BOARD_SIZE; ++i) {\r
         render_board_position(i);\r
     }\r
@@ -218,7 +221,7 @@ static void render_final_score(void) {
     watch_display_string(buf, BOARD_DISPLAY_START);\r
 }\r
 \r
-static guess_t get_answer() {\r
+static guess_t get_answer(void) {\r
     if (guess_position < 1 || guess_position > GAME_BOARD_SIZE)\r
         return HL_GUESS_EQUAL; // Maybe add an error state, shouldn't ever hit this.\r
 \r
index efbd394b5bcd03a8f985b86083478d49f8d62c15..13da5869b3a66c755cc2d57a697a3052631d369c 100755 (executable)
@@ -65,6 +65,8 @@
  * The face tries to remain true to the spirit of using "cards"; to cope with the display limitations I've arrived at\r
  * the following mapping of card values to screen display, but am open to better suggestions:\r
  *\r
+ * Thanks to voloved for adding deck shuffling and drawing!\r
+ *\r
  * | Cards   |                          |\r
  * |---------|--------------------------|\r
  * | Value   |2|3|4|5|6|7|8|9|10|J|Q|K|A|\r