return curr_pos;
}
-static void get_next_letter(const uint8_t curr_pos, uint8_t *word_elements, const bool *known_wrong_letters) {
+static void get_next_letter(const uint8_t curr_pos, uint8_t *word_elements, const bool *known_wrong_letters, const bool skip_wrong_letter) {
do {
if (word_elements[curr_pos] >= WORDLE_NUM_VALID_LETTERS) word_elements[curr_pos] = 0;
else word_elements[curr_pos] = (word_elements[curr_pos] + 1) % WORDLE_NUM_VALID_LETTERS;
- } while (known_wrong_letters[word_elements[curr_pos]]);
+ } while (skip_wrong_letter && known_wrong_letters[word_elements[curr_pos]]);
}
-static void get_prev_letter(const uint8_t curr_pos, uint8_t *word_elements, const bool *known_wrong_letters) {
+static void get_prev_letter(const uint8_t curr_pos, uint8_t *word_elements, const bool *known_wrong_letters, const bool skip_wrong_letter) {
do {
if (word_elements[curr_pos] >= WORDLE_NUM_VALID_LETTERS) word_elements[curr_pos] = WORDLE_NUM_VALID_LETTERS - 1;
else word_elements[curr_pos] = (word_elements[curr_pos] + WORDLE_NUM_VALID_LETTERS - 1) % WORDLE_NUM_VALID_LETTERS;
- } while (known_wrong_letters[word_elements[curr_pos]]);
+ } while (skip_wrong_letter && known_wrong_letters[word_elements[curr_pos]]);
}
static void display_letter(wordle_state_t *state, bool display_dash) {
return false;
}
+static void show_skip_wrong_letter_indicator(bool skipping, WordleScreen curr_screen) {
+ if (skipping && curr_screen <= SCREEN_CONTINUE)
+ watch_set_indicator(WATCH_INDICATOR_LAP);
+ else
+ watch_clear_indicator(WATCH_INDICATOR_LAP);
+}
+
static void update_known_wrong_letters(wordle_state_t *state) {
-#if WORDLE_SKIP_WRONG_LETTERS
for (size_t i = 0; i < WORDLE_LENGTH; i++) {
if (state->word_elements_result[i] == WORDLE_LETTER_WRONG) {
for (size_t j = 0; j < WORDLE_NUM_VALID_LETTERS; j++) {
}
}
}
-#endif
}
static void display_attempt(uint8_t attempt) {
}
static void display_playing(wordle_state_t *state) {
+ state->curr_screen = SCREEN_PLAYING;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
display_attempt(state->attempt);
display_all_letters(state);
- state->curr_screen = SCREEN_PLAYING;
}
static void reset_all_elements(wordle_state_t *state) {
static void display_title(wordle_state_t *state) {
state->curr_screen = SCREEN_TITLE;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
watch_display_string("WO WordLE", 0);
}
static void display_continue(wordle_state_t *state) {
state->curr_screen = SCREEN_CONTINUE;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
watch_display_string("Cont ", 4);
display_continue_result(state->continuing);
}
static void display_streak(wordle_state_t *state) {
char buf[12];
state->curr_screen = SCREEN_STREAK;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
#if WORDLE_USE_DAILY_STREAK
if (state->streak > 99)
sprintf(buf, "WO St--dy");
#if WORDLE_USE_DAILY_STREAK
static void display_wait(wordle_state_t *state) {
state->curr_screen = SCREEN_WAIT;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
if (state->streak < 40) {
char buf[13];
sprintf(buf,"WO%2d WaIt ", state->streak);
static void display_lose(wordle_state_t *state, uint8_t subsecond) {
char buf[WORDLE_LENGTH + 6];
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
sprintf(buf," L %s", subsecond % 2 ? _valid_words[state->curr_answer] : " ");
watch_display_string(buf, 0);
}
static void display_win(wordle_state_t *state, uint8_t subsecond) {
(void) state;
char buf[13];
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
sprintf(buf," W %s ", subsecond % 2 ? "NICE" : "JOb ");
watch_display_string(buf, 0);
}
break;
}
}
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
watch_display_string(buf, 5);
}
memset(*context_ptr, 0, sizeof(wordle_state_t));
wordle_state_t *state = (wordle_state_t *)*context_ptr;
state->curr_screen = SCREEN_TITLE;
+ state->skip_wrong_letter = false;
reset_all_elements(state);
}
// Do any pin or peripheral setup here; this will be called whenever the watch wakes from deep sleep.
break;
case EVENT_LIGHT_BUTTON_UP:
if (act_on_btn(state, BTN_LIGHT)) break;
- get_next_letter(state->position, state->word_elements, state->known_wrong_letters);
+ get_next_letter(state->position, state->word_elements, state->known_wrong_letters, state->skip_wrong_letter);
display_letter(state, true);
break;
case EVENT_LIGHT_LONG_PRESS:
+ if (state->curr_screen <= SCREEN_CONTINUE) {
+ state->skip_wrong_letter = !state->skip_wrong_letter;
+ show_skip_wrong_letter_indicator(state->skip_wrong_letter, state->curr_screen);
+ }
if (state->curr_screen != SCREEN_PLAYING) break;
- get_prev_letter(state->position, state->word_elements, state->known_wrong_letters);
+ get_prev_letter(state->position, state->word_elements, state->known_wrong_letters, state->skip_wrong_letter);
display_letter(state, true);
break;
case EVENT_ALARM_BUTTON_UP: