Implement calculation of WPM and test time
This commit is contained in:
parent
19774c413d
commit
309d55a064
@ -1,9 +1,3 @@
|
|||||||
#include <sys/ioctl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ncurses.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include "typing_test.h"
|
#include "typing_test.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
@ -78,12 +72,13 @@ 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) {
|
||||||
int run = 1, ch, i, new_test = 1, user_input_length;
|
int run = 1, ch, i, new_test = 1, user_input_length, start_timer;
|
||||||
|
double test_time, wpm;
|
||||||
char str[1024], *user_input = NULL;
|
char str[1024], *user_input = NULL;
|
||||||
char *prompt_string = NULL; /* Full prompt string */
|
char *prompt_string = NULL; /* Full prompt string */
|
||||||
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;
|
||||||
|
|
||||||
while (run) {
|
while (run) {
|
||||||
if (new_test == 1) {
|
if (new_test == 1) {
|
||||||
@ -136,33 +131,50 @@ void typing_ui(WINDOW *win, int level, int mode, Word_array *word_array) {
|
|||||||
printf("%s", user_input);
|
printf("%s", user_input);
|
||||||
|
|
||||||
print_typing_prompt(win, prompt, prompt_string, user_input);
|
print_typing_prompt(win, prompt, prompt_string, user_input);
|
||||||
|
start_timer = 1; /* Flag timer as ready to be started */
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = getch();
|
ch = getch();
|
||||||
if (isalnum(ch) || ch == ' ') {
|
if (isalnum(ch) || ch == ' ') {
|
||||||
/* Ensures user does not type outside of character limit */
|
/* Ensures user does not type outside of character limit */
|
||||||
|
if (start_timer) {
|
||||||
|
gettimeofday(&timer_start, NULL);
|
||||||
|
start_timer = 0;
|
||||||
|
}
|
||||||
if (user_input_length < prompt->num_characters) {
|
if (user_input_length < prompt->num_characters) {
|
||||||
user_input[user_input_length] = ch;
|
user_input[user_input_length] = ch;
|
||||||
user_input_length++;
|
user_input_length++;
|
||||||
user_input[user_input_length] = '\0';
|
user_input[user_input_length] = '\0';
|
||||||
move(0, 0);
|
move(0, 0);
|
||||||
printw("Size: %d", strlen(user_input));
|
|
||||||
}
|
}
|
||||||
} else if (ch == KEY_BACKSPACE) {
|
} else if (ch == KEY_BACKSPACE) {
|
||||||
if (user_input_length > 0) {
|
if (user_input_length > 0) {
|
||||||
user_input_length--;
|
user_input_length--;
|
||||||
user_input[user_input_length] = '\0';
|
user_input[user_input_length] = '\0';
|
||||||
move(0, 0);
|
move(0, 0);
|
||||||
printw("Size: %d", strlen(user_input));
|
|
||||||
}
|
}
|
||||||
} else if (ch == ' ') {
|
} else if (ch == ' ') {
|
||||||
new_test = 1;
|
new_test = 1;
|
||||||
|
start_timer = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
user_input_length = strlen(user_input);
|
user_input_length = strlen(user_input);
|
||||||
if (user_input_length == strlen(prompt_string) && user_input[user_input_length - 1] == prompt_string[user_input_length - 1]) {
|
if (user_input_length == strlen(prompt_string) && user_input[user_input_length - 1] == prompt_string[user_input_length - 1]) {
|
||||||
|
gettimeofday(&timer_stop, NULL);
|
||||||
|
/* Convert time stamps to miliseconds */
|
||||||
|
long long time_start = timer_start.tv_sec * 1000LL + timer_start.tv_usec / 1000;
|
||||||
|
long long time_stop = timer_stop.tv_sec * 1000LL + timer_stop.tv_usec / 1000;
|
||||||
|
|
||||||
|
/* Subtract starting time from ending time to get elapsed time */
|
||||||
|
test_time = time_stop - time_start;
|
||||||
|
test_time /= 1000; /* Convert time into seconds */
|
||||||
|
|
||||||
|
/* WPM = (Total Chars / 5) /(Total Mins) */
|
||||||
|
wpm = ((double) user_input_length / 5) / (test_time / 60);
|
||||||
clear();
|
clear();
|
||||||
move(0, 0);
|
move(0, 0);
|
||||||
|
str[0] = '\0'; /* Reset str */
|
||||||
|
printw("Time: %f WPM: %f", test_time, wpm);
|
||||||
print_centered_text(win, 0, "Test Complete!");
|
print_centered_text(win, 0, "Test Complete!");
|
||||||
print_centered_text(win, 2, "WPM: ");
|
print_centered_text(win, 2, "WPM: ");
|
||||||
print_centered_text(win, 3, "Accuracy: ");
|
print_centered_text(win, 3, "Accuracy: ");
|
||||||
@ -276,7 +288,6 @@ int main() {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printw("%d %d", cursor_x, cursor_y);
|
|
||||||
if (ch == '\n') {
|
if (ch == '\n') {
|
||||||
if (cursor_x == 0 && cursor_y == 2) {
|
if (cursor_x == 0 && cursor_y == 2) {
|
||||||
run = 0;
|
run = 0;
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ncurses.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#define NAME "Typing Test"
|
#define NAME "Typing Test"
|
||||||
#define MAX_X 5
|
#define MAX_X 5
|
||||||
#define MAX_Y 3
|
#define MAX_Y 3
|
||||||
@ -6,8 +14,9 @@
|
|||||||
#define NUM_MISC 3
|
#define NUM_MISC 3
|
||||||
#define SUCCESS 1
|
#define SUCCESS 1
|
||||||
#define FAILURE 0
|
#define FAILURE 0
|
||||||
|
|
||||||
char TIMED_MODES_STRING[5][MAX_STRING] = { "5s", "10s", "25s", "30s", "60s" };
|
char TIMED_MODES_STRING[5][MAX_STRING] = { "5s", "10s", "25s", "30s", "60s" };
|
||||||
int TIMED_MODES[5] = {5, 10, 25, 30, 60};
|
int TIMED_MODES[5] = {5, 10, 25, 30, 60};
|
||||||
char WORD_MODES_STRING[5][MAX_STRING] = { "10", "25", "50", "100", "200" };
|
char WORD_MODES_STRING[5][MAX_STRING] = { "5", "10", "25", "50", "100" };
|
||||||
int WORD_MODES[5] = {10, 25, 50, 100, 200};
|
int WORD_MODES[5] = {5, 10, 25, 50, 100};
|
||||||
char MISC_STRING[3][MAX_STRING] = {"Exit", "Stats", "Settings"};
|
char MISC_STRING[3][MAX_STRING] = {"Exit", "Stats", "Settings"};
|
@ -1,6 +1,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#define SUCCESS 1
|
#define SUCCESS 1
|
||||||
#define FAILURE 0
|
#define FAILURE 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user