]> git.earman.xyz Git - sensor-watch.git/commitdiff
Removed Aces; Added --- across screen when losing
authorDavid Volovskiy <devolov@gmail.com>
Wed, 13 Aug 2025 00:07:03 +0000 (20:07 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Wed, 13 Aug 2025 00:07:03 +0000 (20:07 -0400)
watch-faces/complication/higher_lower_game_face.c

index cfbbb98e5e3a3052fd2ec82b505d416d7db38bc3..762c462ae1cabeee3bea26b42d72023b807a1754 100755 (executable)
 #include "higher_lower_game_face.h"\r
 #include "watch_common_display.h"\r
 \r
+\r
+#define KING   12\r
+#define QUEEN  11\r
+#define JACK   10\r
+\r
 #define TITLE_TEXT "Hi-Lo"\r
 #define GAME_BOARD_SIZE 6\r
 #define MAX_BOARDS 40\r
@@ -40,7 +45,7 @@
 #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 MAX_CARD_VALUE KING\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
@@ -160,10 +165,12 @@ static void set_segment_at_position(segment_t segment, uint8_t position) {
     watch_set_pixel(com_pin, seg);\r
 }\r
 \r
+static inline size_t get_display_position(size_t board_position) {\r
+    return FLIP_BOARD_DIRECTION ? BOARD_DISPLAY_START + board_position : BOARD_DISPLAY_END - board_position;\r
+}\r
+\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
+    const size_t display_position = get_display_position(board_position);\r
     const bool revealed = game_board[board_position].revealed;\r
 \r
     //// Current position indicator spot\r
@@ -181,18 +188,18 @@ static void render_board_position(size_t board_position) {
 \r
     const uint8_t value = game_board[board_position].value;\r
     switch (value) {\r
-        case 14: // A (≡)\r
+        case KING: // K (≡)\r
             watch_display_character(' ', display_position);\r
             set_segment_at_position(A, display_position);\r
             set_segment_at_position(D, display_position);\r
             set_segment_at_position(G, display_position);\r
             break;\r
-        case 13: // K (=)\r
+        case QUEEN: // Q (=)\r
             watch_display_character(' ', display_position);\r
             set_segment_at_position(A, display_position);\r
             set_segment_at_position(D, display_position);\r
             break;\r
-        case 12: // Q (-)\r
+        case JACK: // J (-)\r
             watch_display_character('-', display_position);\r
             break;\r
         default: {\r
@@ -216,7 +223,7 @@ static void render_board_count(void) {
 }\r
 \r
 static void render_final_score(void) {\r
-    watch_display_text_with_fallback(WATCH_POSITION_TOP_LEFT, "SCO", "SC");\r
+    watch_display_text_with_fallback(WATCH_POSITION_TOP, "SCORE", "SC  ");\r
     char buf[7] = {0};\r
     const uint8_t complete_boards = score / GUESSES_PER_SCREEN;\r
     snprintf(buf, sizeof(buf), "%2hu %03hu", complete_boards, score);\r
@@ -273,7 +280,11 @@ static void do_game_loop(guess_t user_guess) {
                 // Incorrect guess, game over\r
                 watch_display_text_with_fallback(WATCH_POSITION_TOP_LEFT, "End", "GO");\r
                 game_board[guess_position].revealed = true;\r
+                watch_display_text(WATCH_POSITION_BOTTOM, "------");\r
+                render_board_position(guess_position - 1);\r
                 render_board_position(guess_position);\r
+                if (game_board[guess_position].value == JACK && guess_position < GAME_BOARD_SIZE) // Adds a space in case the revealed option is '-'\r
+                    watch_display_character(' ', get_display_position(guess_position + 1));\r
                 game_state = HL_GS_LOSE;\r
                 return;\r
             }\r
@@ -282,7 +293,7 @@ static void do_game_loop(guess_t user_guess) {
                 // Win, perhaps some kind of animation sequence?\r
                 watch_display_text_with_fallback(WATCH_POSITION_TOP_LEFT, "WIN", "WI");\r
                 watch_display_text(WATCH_POSITION_TOP_RIGHT, "  ");\r
-                watch_display_text(WATCH_POSITION_BOTTOM, "------");\r
+                watch_display_text_with_fallback(WATCH_POSITION_BOTTOM, "WINNER", "winnEr");\r
                 game_state = HL_GS_WIN;\r
                 return;\r
             }\r