Fixed number generation bugs. Added simple draw code that needs to be styled, yet.

This commit is contained in:
David Vereb 2019-04-01 09:08:41 -04:00
parent be3e90c0ed
commit 39fa40eaad
2 changed files with 48 additions and 14 deletions

View File

@ -29,13 +29,37 @@ Problem::~Problem()
void Problem::Draw(bool selected) void Problem::Draw(bool selected)
{ {
if(!win)
return;
// Draw the window:
if(selected)
box(win, 0, 0);
else
box(win, 0, 0); // 0, 0 gives default characters for the vertical and horizontal lines
mvwprintw(win, 1, 2, "%5d", number_top);
mvwprintw(win, 2, 2, "%5d", number_bottom);
switch(problem_type)
{
case EASY_ADDITION:
case HARD_ADDITION:
mvwprintw(win, 2, 1, "+");
break;
case EASY_SUBTRACTION:
case HARD_SUBTRACTION:
mvwprintw(win, 2, 1, "-");
break;
};
wrefresh(win);
} }
void Problem::GenerateNumbers(PROBLEM_TYPE type, unsigned short max_digits) void Problem::GenerateNumbers(PROBLEM_TYPE type, unsigned short max_digits)
{ {
// Determine how many digits long these numbers should be: // Determine how many digits long these numbers should be:
unsigned short digits = rand() % (max_digits - 1) + 1; // at least one digit unsigned short digits = rand() % (max_digits) + 1; // at least one digit
number_top = 0;
number_bottom = 0;
switch(problem_type) switch(problem_type)
{ {
@ -44,7 +68,11 @@ void Problem::GenerateNumbers(PROBLEM_TYPE type, unsigned short max_digits)
for(auto digit = 0; digit < digits; ++digit) for(auto digit = 0; digit < digits; ++digit)
{ {
unsigned short temp_number_top = rand() % 10; unsigned short temp_number_top = rand() % 10;
unsigned short temp_number_bottom = rand() % (10 - number_top); unsigned short temp_number_bottom;
if(temp_number_top == 9)
temp_number_bottom = 0;
else
temp_number_bottom = rand() % (10 - temp_number_top);
// Place into correct digit posititon: // Place into correct digit posititon:
number_top += temp_number_top * (pow(10, digit)); number_top += temp_number_top * (pow(10, digit));
@ -90,7 +118,12 @@ void Problem::GenerateNumbers(PROBLEM_TYPE type, unsigned short max_digits)
} }
// NOTE(dev): don't allow negative numbers: // NOTE(dev): don't allow negative numbers:
if(number_bottom > number_top) if(number_bottom > number_top)
{
if(number_top)
number_bottom %= number_top; number_bottom %= number_top;
else
number_bottom = 0; // lol, 0 - 0 is hard?
}
break; break;
}; };
} }
@ -114,9 +147,4 @@ void Problem::GenerateWindow(unsigned win_x, unsigned win_y)
win = newwin(height, width, win_y, win_x); win = newwin(height, width, win_y, win_x);
if(!win) if(!win)
return; return;
// Draw the window:
box(win, 0, 0); // 0, 0 gives default characters for the vertical and horizontal lines
mvwprintw(win, 1, 1, "TEST");
wrefresh(win);
} }

View File

@ -54,10 +54,13 @@ int main(int argc, char *argv[])
continue; // restart loop continue; // restart loop
Problem *test = nullptr; Problem *test = nullptr;
if(addition != subtraction)
{
if(addition) if(addition)
test = new Problem(EASY_ADDITION, 3, 3, 12); test = new Problem(EASY_ADDITION, 3, 3, 12);
if(subtraction) if(subtraction)
test = new Problem(EASY_SUBTRACTION, 3, 3, 12); test = new Problem(EASY_SUBTRACTION, 3, 3, 12);
}
if(addition && subtraction) if(addition && subtraction)
{ {
if(rand() % 2) if(rand() % 2)
@ -66,6 +69,9 @@ int main(int argc, char *argv[])
test = new Problem(HARD_SUBTRACTION, 5, 3, 12); test = new Problem(HARD_SUBTRACTION, 5, 3, 12);
} }
if(test)
test->Draw(true);
getch(); getch();
if(test) if(test)