diff --git a/typing_test.c b/typing_test.c index 19f7e32..a0c7c7f 100644 --- a/typing_test.c +++ b/typing_test.c @@ -70,7 +70,7 @@ void print_typing_prompt(WINDOW *win, Word_array *prompt, char *prompt_string, } } -void typing_ui(WINDOW *win, int level, int mode, Word_array *word_array) { +void typing_ui(WINDOW *win, int level, int mode, Word_array *word_array, Stat_struct *stats) { int run = 1, ch, i, new_test = 1, user_input_length, start_timer; double test_time, wpm, accuracy; char str[1024], temp[24], *user_input = NULL; @@ -78,11 +78,11 @@ void typing_ui(WINDOW *win, int level, int mode, Word_array *word_array) { Word_array *prompt = NULL; Word *prompt_lines; /* Array of lines for displaying */ struct timeval timer_start, timer_stop; - curs_set(1); while (run) { if (new_test == 1) { clear(); accuracy = 0; + curs_set(1); /* Reset str */ str[0] = '\0'; @@ -225,6 +225,43 @@ void typing_ui(WINDOW *win, int level, int mode, Word_array *word_array) { print_centered_text(win, 19, "Press tab to start a new test, or any key to return to main menu"); + stats->data[TESTS_COMPLETE]++; + + switch (level) { + case 0: + if (stats->data[W_5] < (int)wpm) { + stats->data[W_5] = (int)wpm; + print_centered_text(win, 17, "New High Score!"); + } + break; + case 1: + if (stats->data[W_10] < (int)wpm) { + stats->data[W_10] = (int)wpm; + print_centered_text(win, 17, "New High Score!"); + } + break; + case 2: + if (stats->data[W_25] < (int)wpm) { + stats->data[W_25] = (int)wpm; + print_centered_text(win, 17, "New High Score!"); + } + break; + case 3: + if (stats->data[W_50] < (int)wpm) { + stats->data[W_50] = (int)wpm; + print_centered_text(win, 17, "New High Score!"); + } + break; + case 4: + if (stats->data[W_100] < (int)wpm) { + stats->data[W_100] = (int)wpm; + print_centered_text(win, 17, "New High Score!"); + } + break; + } + + + /* Wait on user input */ ch = getch(); if (ch != ' ') { @@ -304,14 +341,43 @@ void stat_ui(WINDOW *win, Stat_struct *stats) { gcvt(stats->data[TIME_TYPED], 5, temp_num); append_line(temp_num, temp_str); print_centered_text(win, row, temp_str); + row += 2; + temp_str[0] = '\0'; + + append_line("5 Word Test: ", temp_str); + gcvt(stats->data[W_5], 5, temp_num); + append_line(temp_num, temp_str); + print_centered_text(win, row, temp_str); row++; temp_str[0] = '\0'; + append_line("10 Word Test: ", temp_str); + gcvt(stats->data[W_10], 5, temp_num); + append_line(temp_num, temp_str); + print_centered_text(win, row, temp_str); + row++; + temp_str[0] = '\0'; - print_centered_text(win, 10, "10 Word Test: "); - print_centered_text(win, 11, "25 Word Test: "); - print_centered_text(win, 12, "50 Word Test: "); - print_centered_text(win, 13, "100 Word Test: "); + append_line("25 Word Test: ", temp_str); + gcvt(stats->data[W_25], 5, temp_num); + append_line(temp_num, temp_str); + print_centered_text(win, row, temp_str); + row++; + temp_str[0] = '\0'; + + append_line("50 Word Test: ", temp_str); + gcvt(stats->data[W_50], 5, temp_num); + append_line(temp_num, temp_str); + print_centered_text(win, row, temp_str); + row++; + temp_str[0] = '\0'; + + append_line("100 Word Test: ", temp_str); + gcvt(stats->data[W_100], 5, temp_num); + append_line(temp_num, temp_str); + print_centered_text(win, row, temp_str); + row++; + temp_str[0] = '\0'; print_centered_text(win, 15, "Return to Menu"); refresh(); @@ -435,7 +501,7 @@ int main() { /* Settings */ settings_ui(stdscr); } else if (cursor_y == 1 || cursor_y == 0) { - typing_ui(stdscr, cursor_x, cursor_y, word_array); + typing_ui(stdscr, cursor_x, cursor_y, word_array, &stats); clear(); } } @@ -448,7 +514,8 @@ int main() { /* Saves stats and closes file */ /* Open stats first */ - /* save_stats(stats_file, &stats); */ + stats_file = fopen("stats", "w"); + save_stats(stats_file, &stats); return 0; } \ No newline at end of file diff --git a/utilities.c b/utilities.c index a1738b6..0d0a3a6 100644 --- a/utilities.c +++ b/utilities.c @@ -76,8 +76,8 @@ int parse_words_file(FILE *words_file, Word_array *words) { /* Creates empty stats file */ int create_stats_file(FILE *stats_file) { int i; - - for (i = 0; i < 9; i++) { + + for (i = 0; i < NUM_STATS; i++) { fputs("0\n", stats_file); } @@ -85,6 +85,7 @@ int create_stats_file(FILE *stats_file) { return SUCCESS; } +/* Loads user data from stats file located in same directory as program */ int load_stats(FILE *stats_file, Stat_struct *stats) { int i = 0; int temp_stat; @@ -101,8 +102,13 @@ int load_stats(FILE *stats_file, Stat_struct *stats) { return SUCCESS; } +/* Saves user data to stats file located in same directory as program */ int save_stats(FILE *stats_file, Stat_struct *stats) { - /* Placeholder */ + int i; + + for (i = 0; i < NUM_STATS; i++) { + fprintf(stats_file, "%f\n", stats->data[i]); + } fclose(stats_file); } diff --git a/utilities.h b/utilities.h index e46b786..7144a29 100644 --- a/utilities.h +++ b/utilities.h @@ -8,14 +8,16 @@ #define TYPING_PROMPT_START_Y 3 #define TYPING_PROMPT_END_Y 6 #define BEST_WPM 0 -#define W_10 1 -#define W_25 2 -#define W_50 3 -#define W_100 4 -#define TESTS_COMPLETE 5 -#define CHARS_TYPED 6 -#define CHARS_CORRECT 7 -#define TIME_TYPED 8 +#define W_5 1 +#define W_10 2 +#define W_25 3 +#define W_50 4 +#define W_100 5 +#define TESTS_COMPLETE 6 +#define CHARS_TYPED 7 +#define CHARS_CORRECT 8 +#define TIME_TYPED 9 +#define NUM_STATS 10 /* Word Structure length - length of word @@ -35,7 +37,7 @@ typedef struct { } Word_array; typedef struct { - double data[9]; + double data[NUM_STATS]; } Stat_struct; void clear_word_array(Word_array *array);