Add stats menu, add saving of highscores

This commit is contained in:
Aidan Haas 2022-12-22 17:44:10 -05:00 committed by GitHub
parent e096bf71a7
commit ccfec88c41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 95 additions and 20 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);