diff --git a/main.c b/main.c index 4a7665f..e0ceed5 100644 --- a/main.c +++ b/main.c @@ -1,90 +1,80 @@ #include #include #include - -char *word_bank[] = { - "hypothesis", - "science", - "usurp", - "conditional", - "passionate", - "orion", - NULL // sentinel value marking end -}; +#include +#include "game_state.h" #define WINDOW_HEIGHT 500 #define WINDOW_WIDTH 700 #define CHAR_SPACING 40 -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +void process_key_events() { + char buf[2] = {'c', '\0'}; + int k; + const char *key_name; + + while ((k = GetKeyPressed()) != 0) { + key_name = GetKeyName(k); + + char c = get_curr_letter(); + sprintf(buf, "%c\0", c); + + if (key_name != NULL && + strcmp(key_name, buf) == 0) { + next(); + } + } +} + +void render_game_state() { + char buf[2] = {'c', '\0'}; + char *curr_word = get_curr_word(); + int curr_letter_index = get_curr_letter_index(); + size_t word_len = strlen(curr_word); + + DrawText(curr_word, 10, 10, 20, BLACK); + + int x = (WINDOW_WIDTH / 2) - (CHAR_SPACING * (word_len / 2)); + int y = WINDOW_HEIGHT / 2; + + for (int i = 0; i < word_len; i++) { + char c = curr_word[i]; + + sprintf(buf, "%c\0", c); + + Color color; + if (i == curr_letter_index) { + color = GOLD; + } else if (i < curr_letter_index) { + color = DARKGRAY; + } else { + color = GRAY; + } + + DrawText(buf, x, y, 50, color); + x += CHAR_SPACING; + } + + char wins_text[20]; + snprintf(wins_text, 20, "%d wins", get_wins()); + DrawText(wins_text, WINDOW_WIDTH - 100, WINDOW_HEIGHT - 20, 20, GRAY); +} int main(int argc, char *argv[]) { - char **curr_word = word_bank; - unsigned short curr_letter_index = 0; - unsigned short wins = 0; - InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Typing game"); + init_game_state(); + while (!WindowShouldClose()) { - char buf[2] = {'c', '\0'}; - size_t word_len = strlen(*curr_word); + process_key_events(); - int k = 0; - const char *key_name; - // process queued key events - while ((k = GetKeyPressed()) != 0) { - key_name = GetKeyName(k); - - char c = (*curr_word)[curr_letter_index]; - sprintf(buf, "%c\0", c); - - if (key_name != NULL && - strcmp(key_name, buf) == 0) { - if (curr_letter_index < word_len - 1) { // next letter - curr_letter_index++; - } else { // next word - if (*(curr_word + 1) == NULL) { // wrap around - curr_word = word_bank; - } else { - curr_word++; - wins++; - } - curr_letter_index = 0; - } - } - } - - // render BeginDrawing(); ClearBackground(WHITE); - DrawText(*curr_word, 10, 10, 20, BLACK); + + render_game_state(); - int x = (WINDOW_WIDTH / 2) - (CHAR_SPACING * (word_len / 2)); - int y = WINDOW_HEIGHT / 2; - - for (int i = 0; i < word_len; i++) { - char c = (*curr_word)[i]; - - sprintf(buf, "%c\0", c); - - Color color; - if (i == curr_letter_index) { - color = GOLD; - } else if (i < curr_letter_index) { - color = GRAY; - } else { - color = DARKGRAY; - } - - DrawText(buf, x, y, 50, color); - x += CHAR_SPACING; - } - DrawFPS(WINDOW_WIDTH - 100, 10); // top right - char wins_text[20]; - snprintf(wins_text, 20, "%d wins", wins); - DrawText(wins_text, WINDOW_WIDTH - 100, WINDOW_HEIGHT - 20, 20, GRAY); EndDrawing(); }