/********************************************************************************************
| C O M M E N T S |
+-------------------------------------------------------------------------------------------+
| T I T L E: random_number_gamev3.c |
| A U T H O R: Jacob A. Bridges |
| D A T E: 3.1.2011 |
| |
| This program will take a range of numbers from the user and randomly select one number. |
| Then it asks the user to guess the random number. Keeps track of times the user |
| tries to guess the number. |
| |
| What new in Version 3? The game keeps track of your average scores for every game then |
| displays them when the player stops playing the game. It also displays the average |
| of all your scores. |
| |
+-------------------------------------------------------------------------------------------+
********************************************************************************************/
#include
#include
#include
/////////////////////////////////////////////////////////////////////////////////////////////
// Defining some Gloabl Variables
/////////////////////////////////////////////////////////////////////////////////////////////
int iR_NUMBER = 0;
int iCHOICE = 0;
int iCOUNTER = 0;
int iMIN = 0;
int iMAX = 0;
int iRANGE = 0;
int iSCORE = 0;
int iSCORES = 0;
int iTOTAL = 0;
char NEWGAME = 0;
int main ()
{
int *scores;
int *temp_storage;
int score_index;
/////////////////////////////////////////////////////////////////////////////////////////////
// Header
/////////////////////////////////////////////////////////////////////////////////////////////
printf("\n\n");
printf("\t#####################\n");
printf("\t# THE GUESSING GAME #\n");
printf("\t#####################\n");
printf("\nWelcome to the Random Number Guessing Game!\n");
/////////////////////////////////////////////////////////////////////////////////////////////
// Beginning of the "PLAY AGAIN?" loop
/////////////////////////////////////////////////////////////////////////////////////////////
do {
if (iTOTAL)
temp_storage = scores;
// iTOTAL used to keep track of games played
iTOTAL = iTOTAL + 1;
scores = calloc(iTOTAL, sizeof(int));
if (iTOTAL != 1)
{
for (score_index = 0; score_index < iTOTAL - 1; score_index++)
scores[score_index] = temp_storage[score_index];
free(temp_storage);
}
/////////////////////////////////////////////////////////////////////////////////////////////
// Setting a range of values
/////////////////////////////////////////////////////////////////////////////////////////////
printf("Please start by picking a range of values: \n\n");
printf("Highest value in range: ");
scanf(" %d", &iMAX);
printf("Lowest value in range: ");
scanf(" %d", &iMIN);
printf("\n > You chose the range to be from %d to %d. < ", iMIN, iMAX);
iRANGE = (iMAX - iMIN);
// Seeding the random function
srand( time( NULL ) );
// Setting counter to ZERO
iCOUNTER = 0;
/////////////////////////////////////////////////////////////////////////////////////////////
// Selecting a random value from our range
/////////////////////////////////////////////////////////////////////////////////////////////
int iR_NUMBER = ( iMIN + ( rand() % ( iRANGE + 1 ) ) );
/////////////////////////////////////////////////////////////////////////////////////////////
// The WHILE loop
/////////////////////////////////////////////////////////////////////////////////////////////
printf("\n\nCan you guess the number I am thinking of?");
do {
// Starting the counter
iCOUNTER = iCOUNTER + 1;
// Asks the user for a number
printf("\nYour Guess: ");
scanf( " %d", &iCHOICE );
// Compares the user's input to the random number
if( iCHOICE < iR_NUMBER )
printf( "Your guess is too low, try again!" );
else if( iCHOICE > iR_NUMBER )
printf( "Your guess is too high, try again!" );
else
printf( "\n\n\t*YOU GUESSED IT!*\n\n" );
} while( iCHOICE != iR_NUMBER );
/////////////////////////////////////////////////////////////////////////////////////////////
// End of game sequence
/////////////////////////////////////////////////////////////////////////////////////////////
// Calculates player's "GRADE"
iSCORE = (int)(100 * ((float)(iRANGE - iCOUNTER) / iRANGE));
//printf(" %d%%\n", iSCORE);
// Logs your score
iSCORES = iSCORES + iSCORE;
// Tells the answer
printf( "The answer was %d.", iR_NUMBER );
// Gives the player's "score"
printf( "\nIt took you %d guesses.", iCOUNTER );
if( iSCORE == 100 )
printf( " AMAZING GUESS!" );
else if( iSCORE >= 90 )
printf( " Great job!" );
else if( iSCORE >= 80 )
printf( " Nice Work." );
else if( iSCORE >= 70 )
printf( " Try harder next time." );
else if( iSCORE >= 60 )
printf( " You are bad at this game." );
else
printf( " EPIC FAIL." );
/////////////////////////////////////////////////////////////////////////////////////////////
// Option to play again
/////////////////////////////////////////////////////////////////////////////////////////////
printf("\nWould you like to play again? Y/N? \n > ");
scanf(" %c", &NEWGAME);
scores[iTOTAL - 1] = iSCORE;
} while (NEWGAME == 'y' || NEWGAME == 'Y');
// If player chooses to end game
printf("\n+-----------------------------------------------------+");
printf("\n| You played %d time(s).", iTOTAL);
printf("\n| Your average score was %d%%\n", (iSCORES/iTOTAL));
for (score_index = 0; score_index < iTOTAL; score_index++)
printf("| Score for game %d: %d%%\n", score_index + 1, scores[score_index]);
free(scores);
printf("+-----------------------------------------------------+");
printf("\n");
system("pause");
return 0;
}