Add stats menu, add saving of highscores
This commit is contained in:
parent
e096bf71a7
commit
ccfec88c41
@ -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;
|
||||
}
|
10
utilities.c
10
utilities.c
@ -77,7 +77,7 @@ int parse_words_file(FILE *words_file, Word_array *words) {
|
||||
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);
|
||||
}
|
||||
|
20
utilities.h
20
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user