Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * a game where you need to claculate right the mathemathical equations that appears
- * the game counts points
- * +1 point for right answer -2 points for wrong answer
- * the game ends when the player arrives to 15 points
- * */
- #define _XOPEN_SOURCE 500
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <time.h>
- #include <string.h>
- // function prototype
- void clear (void);
- void showscore (int);
- char opera (int, int, int, int*);
- int clean_stdin (void);
- int main(void)
- {
- // clear the screen
- clear();
- // variables used in program
- // var1 and var2 = math problam varibales
- // input = user input
- // seed = math opartion generator
- // hardness = game dificulty chooser
- // result = right answer
- // score = user score counter
- // wac, rac = "wrong answer counter", "right answer counter"
- int var1, var2, input, seed, hardness, result = 0, score = 0, wac = 0, rac = 0;
- // op = "opartion" - char holder for printing: '-' || '+' || 'X'
- // check = checking character in loops to make sure correct input is inserted
- char op = '\0', check;
- // game difficulty chooser - 3 options
- // 1 = var1 && var2 <=10 | 2 = var1 && var2 <= 15 | 3 = var1 && var2 <= 20
- do
- {
- clear();
- printf("Get 15 Points to Win!\nChoose Difficulty:\nEASY: 1 MEDIUM: 2 HARD: 3\n");
- }
- // makes sure input is a positive number between 1 and 3, if not, cleans stdin
- while(((scanf("%d%c", &hardness, &check) != 2 || check != '\n') && clean_stdin()) || hardness < 1 || hardness > 3);
- // convert hardness to in game top numbers for var1 & var2
- hardness = (hardness +1) * 5 +1;
- // delay for animation sake
- usleep(800000);
- clear();
- // game loop when score is less than 15
- while(score < 15)
- {
- // user input reset
- input = 0;
- // pseudo random numbers generator, using system time as seed
- srand48(time(NULL) % 257);
- var1 = drand48() * 10000;
- var1 = var1 % hardness;
- srand48(time(NULL));
- var2 = drand48() *257;
- var2 = var2 % hardness;
- // seed generator for opartion decision
- srand48(time(NULL) % 1234);
- seed = (drand48() *12345);
- seed = seed % 100;
- // swap var1 and var2 if - opartions is generated and var2 > var1 to avoid negative numbers
- if(seed > 33 && seed <= 66 && var1 < var2)
- {
- var1 = var1 ^ var2;
- var2 = var1 ^ var2;
- var1 = var1 ^ var2;
- }
- // op for opartion printing and result sum for checking user answer
- op = opera(seed, var1, var2, &result);
- // recive answer from user
- do
- {
- clear();
- // score print
- showscore(score);
- // print exrcise
- printf("\n%i %c %i = ", var1, op, var2);
- }
- while((scanf("%d%c", &input, &check) !=2 || check != '\n') && clean_stdin());
- // cheat
- if(input == 257)
- break;
- // clear screen for animation sake
- clear();
- // check for right answer
- if(input == result)
- {
- // score update and right answer counter update
- score++;
- rac++;
- // print score and right answer massage
- showscore(score);
- printf("\n%i is Correct! +1 Point!\n", result);
- // delay for animation sake
- usleep(1200000);
- }
- // wrong answer handle
- else
- {
- // wrong answer counter update
- wac++;
- // 0 or 1 score handle (to avoid negate score)
- if(score == 0 || score == 1)
- {
- score = 0;
- showscore(score);
- printf("\n%i is Wrong!", input);
- }
- // 1 > score handle
- else
- {
- // score update
- score-=2;
- // score print wrong answer massage
- showscore(score);
- printf("\n%i is Wrong! -2 Points!", input);
- }
- // right answer print
- printf("\n\nThe Right answer is: %i\n\n", result);
- // delay for animation sake
- usleep(2000000);
- }
- // clear screen for animation sake
- clear();
- }
- // winning message
- for(int i = 0; i < 6; i++)
- {
- clear();
- usleep(400000);
- printf("######## VICTORY!! ########\n\nRight answers: %i Wrong answers: %i\n", rac, wac);
- printf(" Well Done!\n Your'e great at 2nd Grade Math!\n");
- usleep(600000);
- }
- // delay for animation sake
- usleep(2500000);
- // program exit
- return 0;
- }
- void clear (void)
- {
- // clear the screen
- printf("\033[2J");
- printf("\033[%d;%dH", 0, 0);
- }
- int clean_stdin (void)
- {
- while(getchar() != '\n');
- return 1;
- }
- void showscore (score)
- {
- // print score - usage at the begining of every turn during the game
- printf("score: %i points\n", score);
- }
- char opera (int seed, int var1, int var2, int* presult)
- // this function return a relevant mathmetical opartion acording to the generated seed
- {
- if(seed <= 33)
- {
- *presult = var1 * var2;
- return 'X';
- }
- else if(seed > 33 && seed < 66)
- {
- *presult = var1 - var2;
- return '-';
- }
- else
- {
- *presult = var1 + var2;
- return '+';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement