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;
|
int run = 1, ch, i, new_test = 1, user_input_length, start_timer;
|
||||||
double test_time, wpm, accuracy;
|
double test_time, wpm, accuracy;
|
||||||
char str[1024], temp[24], *user_input = NULL;
|
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_array *prompt = NULL;
|
||||||
Word *prompt_lines; /* Array of lines for displaying */
|
Word *prompt_lines; /* Array of lines for displaying */
|
||||||
struct timeval timer_start, timer_stop;
|
struct timeval timer_start, timer_stop;
|
||||||
curs_set(1);
|
|
||||||
while (run) {
|
while (run) {
|
||||||
if (new_test == 1) {
|
if (new_test == 1) {
|
||||||
clear();
|
clear();
|
||||||
accuracy = 0;
|
accuracy = 0;
|
||||||
|
curs_set(1);
|
||||||
|
|
||||||
/* Reset str */
|
/* Reset str */
|
||||||
str[0] = '\0';
|
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");
|
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 */
|
/* Wait on user input */
|
||||||
ch = getch();
|
ch = getch();
|
||||||
if (ch != ' ') {
|
if (ch != ' ') {
|
||||||
@ -304,14 +341,43 @@ void stat_ui(WINDOW *win, Stat_struct *stats) {
|
|||||||
gcvt(stats->data[TIME_TYPED], 5, temp_num);
|
gcvt(stats->data[TIME_TYPED], 5, temp_num);
|
||||||
append_line(temp_num, temp_str);
|
append_line(temp_num, temp_str);
|
||||||
print_centered_text(win, row, 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++;
|
row++;
|
||||||
temp_str[0] = '\0';
|
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: ");
|
append_line("25 Word Test: ", temp_str);
|
||||||
print_centered_text(win, 11, "25 Word Test: ");
|
gcvt(stats->data[W_25], 5, temp_num);
|
||||||
print_centered_text(win, 12, "50 Word Test: ");
|
append_line(temp_num, temp_str);
|
||||||
print_centered_text(win, 13, "100 Word Test: ");
|
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");
|
print_centered_text(win, 15, "Return to Menu");
|
||||||
refresh();
|
refresh();
|
||||||
@ -435,7 +501,7 @@ int main() {
|
|||||||
/* Settings */
|
/* Settings */
|
||||||
settings_ui(stdscr);
|
settings_ui(stdscr);
|
||||||
} else if (cursor_y == 1 || cursor_y == 0) {
|
} 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();
|
clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -448,7 +514,8 @@ int main() {
|
|||||||
|
|
||||||
/* Saves stats and closes file */
|
/* Saves stats and closes file */
|
||||||
/* Open stats first */
|
/* Open stats first */
|
||||||
/* save_stats(stats_file, &stats); */
|
stats_file = fopen("stats", "w");
|
||||||
|
save_stats(stats_file, &stats);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
12
utilities.c
12
utilities.c
@ -76,8 +76,8 @@ int parse_words_file(FILE *words_file, Word_array *words) {
|
|||||||
/* Creates empty stats file */
|
/* Creates empty stats file */
|
||||||
int create_stats_file(FILE *stats_file) {
|
int create_stats_file(FILE *stats_file) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < NUM_STATS; i++) {
|
||||||
fputs("0\n", stats_file);
|
fputs("0\n", stats_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +85,7 @@ int create_stats_file(FILE *stats_file) {
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Loads user data from stats file located in same directory as program */
|
||||||
int load_stats(FILE *stats_file, Stat_struct *stats) {
|
int load_stats(FILE *stats_file, Stat_struct *stats) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int temp_stat;
|
int temp_stat;
|
||||||
@ -101,8 +102,13 @@ int load_stats(FILE *stats_file, Stat_struct *stats) {
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Saves user data to stats file located in same directory as program */
|
||||||
int save_stats(FILE *stats_file, Stat_struct *stats) {
|
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);
|
fclose(stats_file);
|
||||||
}
|
}
|
||||||
|
20
utilities.h
20
utilities.h
@ -8,14 +8,16 @@
|
|||||||
#define TYPING_PROMPT_START_Y 3
|
#define TYPING_PROMPT_START_Y 3
|
||||||
#define TYPING_PROMPT_END_Y 6
|
#define TYPING_PROMPT_END_Y 6
|
||||||
#define BEST_WPM 0
|
#define BEST_WPM 0
|
||||||
#define W_10 1
|
#define W_5 1
|
||||||
#define W_25 2
|
#define W_10 2
|
||||||
#define W_50 3
|
#define W_25 3
|
||||||
#define W_100 4
|
#define W_50 4
|
||||||
#define TESTS_COMPLETE 5
|
#define W_100 5
|
||||||
#define CHARS_TYPED 6
|
#define TESTS_COMPLETE 6
|
||||||
#define CHARS_CORRECT 7
|
#define CHARS_TYPED 7
|
||||||
#define TIME_TYPED 8
|
#define CHARS_CORRECT 8
|
||||||
|
#define TIME_TYPED 9
|
||||||
|
#define NUM_STATS 10
|
||||||
|
|
||||||
/* Word Structure
|
/* Word Structure
|
||||||
length - length of word
|
length - length of word
|
||||||
@ -35,7 +37,7 @@ typedef struct {
|
|||||||
} Word_array;
|
} Word_array;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double data[9];
|
double data[NUM_STATS];
|
||||||
} Stat_struct;
|
} Stat_struct;
|
||||||
|
|
||||||
void clear_word_array(Word_array *array);
|
void clear_word_array(Word_array *array);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user