Code:
/*
Name: Math-That, math game
Author: Isaac Elbaz
Description: Math-That, is a game of questions about math and more
Date: 17/11/02 20:00
Copyright: Make free use of the code, change it :)
*/
#include <stdio.h> //Input and outputs functions
#include <stdlib.h> //Use system(), rand(), srand() and so on..
#include <conio.h> //clrscr(), gotoxy() and more..
#include <time.h> //needed to use "time" function and more.
//Constants declaration, some configurations.
#define POINTS_PER_QUESTION 10 //Points per correct question
#define LOW 50 //Low level
#define HIGH 100 //Hight Level
//Functions prototypes
int rnd(const int max); //Function the generates random numbers.
void msleep(const int SECONDS); //Generates some delay.
void print_points(const int POINTS); //Print the points of the player
void print_menu(void); //Print the menu
void start_engine(void); //Starts the engine
void blink(int mode); //Blink some text in the window
void print_end(void); //Print the end of the program
//Variable declaration
int level, answer, points, rNum1, rNum2, max_questions;
int curr_question, corr_answer; //Current question, correct
//Level, Answer, total points, random number 1, random number 2, max questions
int main(void) //Starts the program
{
srand(time(NULL) + getpid());
//With this, we can make "real" random numbers, Just INITIALIZE ONCE!
print_menu(); //Print the menu option, and configure some needed things.
START: //This will "mark" the start of our game
start_engine(); //This starts our game-engine.
return (0); //The end of our simple game.
}
int rnd(const int max)
{
return((rand()%max)); //Use the function rand to generate a random number
//And then return-it (the random number)
}
void msleep(const int SECONDS)
{
time_t delay;
delay = time(NULL) + SECONDS;
while(time(NULL) < delay) //Generates the delay
;
}
void print_points(const int POINTS)
{
gotoxy(55,1); //Move the cursor to the top-left of the console
printf("Score: %d\n",POINTS); //Write the score of the player
}
void print_menu(void)
{
printf("Hello, welcome to Math-That, a simple math game made in C\n");
printf("Now I need to ask you some questions...\n\n");
//Receive the max questions of the game
printf("How Many questions at all game? (I.E: 10)\n");
scanf("%d",&max_questions);
//The level of the questions
printf("What level of questions? (1-2)\n");
scanf("%d",&level);
//We got all the info...
msleep(1); //Delay one second before exiting, giving time to the user
//read the message
printf("\nO.K, you're ready to play, good luck!\n");
}
void start_engine(void)
{
PERGUNTA:
//Check the level of the game, if 1
//generate more simple questions, else if 2
//generates more complexes questions
if(level == 1) {
rNum1 = rnd(LOW);
rNum2 = rnd(LOW);
}
else {
rNum1 = rnd(HIGH);
rNum2 = rnd(HIGH);
}
corr_answer = rNum1 * rNum2; //The correct answer
//Start generating the questions
do
{
clrscr(); //Clear the screen
print_points(points); //Print the score
printf("\n%d X %d = "); //Print the question
scanf("%d",&answer);
if(answer == corr_answer) { //If correct...
blink(1); //Blink correct...
points += POINTS_PER_QUESTION; //Make the score
++curr_question; //Move to the next question
}
else { //Incorrect
blink(2); //Blink incorrect
//points -= POINTS_PER_QUESTION; //Unremark if you want that an
//Incorrect answer down points from the score
printf("\nThe correct answer is: %d\n",answer);
++curr_question; //Move to the next question
}
if(curr_question == 10) {
blink(3); //Blink end-of-game
print_end(); //Print the end of the program
}
goto PERGUNTA;
} while(answer != corr_answer);
}
void blink(int mode)
{
int i; //Just for the index use...
if(mode == 1) { //Print correct
for(i = 0; i <= 3; i++) {
clrscr(); //Clear the monitor
textcolor(RED); //Change the font color to red
gotoxy(35,10); //Go to this coordenate
printf("Correct!"); //print correct
msleep(1); //delay of 1 second
textcolor(WHITE); //change font color to white
gotoxy(35,10); //go to this coordenate
printf("Correct!"); //Print correct (now in white)
msleep(1); //delay 1 second
}
}
if(mode == 2) { //Same as one but now prints Incorrect
for(i = 0; i <= 3; i++) {
clrscr();
textcolor(RED);
gotoxy(35,10);
printf("Incorrect!");
msleep(1);
textcolor(WHITE);
gotoxy(35,10);
printf("Incorrect!");
msleep(1);
}
}
if(mode == 3) { //Same as te others, now print END OF THE GAME!!!
for(i = 0; i <= 3; i++) {
clrscr();
textcolor(RED);
gotoxy(35,10);
printf("END OF THE GAME!!!");
msleep(1);
textcolor(WHITE);
gotoxy(35,10);
printf("END OF THE GAME!!!");
msleep(1);
}
}
}
void print_end(void)
{
clrscr(); //Clear the screen..
gotoxy(35,10);
printf("Thanks for using this program.. hope you like it\n");
printf("Fully programmed in C with Dev-C++\n");
printf("Thanks for the guys from Cprogramming.com for the fast and perfect\
answers.. Thanks!\n");
msleep(5); //Delay 5 seconds
exit(1); //Exit...
}