A bulls and cows game.I am still working on this. Trying to add some more functionality.
I know the variable names are quite big. But I think that makes it easier to understand the program without comments.
I am new to C++. So, if you can suggest any improvements, then please do so.
One more thing, from my experience, Indian authors tend to provide knowledge based on TurboC which sucks. So, anyone going for a C++ course, please get a book suggested above, and then be sure to read professional C++ by Solter and Kleper (Wrox international). It rocks.
Aditya
Code:
/* Project Name :- Bulls and Cows.
Project Version :- 2.1.0.
Project Author :- Aditya Shevade.
Time Started :- 5th of June 2007, 08:07 pm.
Time Finished :- 5th of June 2007, 09:21 pm.
Built Using :- Anjuta 1.2.4a.
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
class BullsAndCows
{
private:
int ComputerNumber, UserNumber;
int ComputerReminderUnits, ComputerReminderTens, ComputerReminderHundreds, ComputerReminderThousands;
int UserReminderUnits, UserReminderTens, UserReminderHundreds, UserReminderThousands;
int PositionsCorrect, DigitsCorrect;
public:
void NumberInitialisation();
void InitialiseComputerValues();
void InitialiseUserValues();
void UserInput();
void Calculations();
void NoOfPositionsCorrect();
void NoOfDigitsCorrect();
void CheckWin();
int RandomNumber();
};
BullsAndCows x;
main()
{
cout << "\n\n\t\tWelcome to Bulls and Cows.";
cout << "\n\t\t\tVersion 2.1.0";
cout << "\n\n\t\tPress Enter to continue";
getchar();
x.NumberInitialisation();
return 0;
}
void BullsAndCows::NumberInitialisation()
{
do
{
srand(time(NULL));
ComputerNumber = (rand () % 10000);
}while (ComputerNumber > 10000 || ComputerNumber < 1000);
x.InitialiseComputerValues();
}
void BullsAndCows::InitialiseComputerValues()
{
ComputerReminderUnits = ComputerNumber % 10;
ComputerReminderTens = ((ComputerNumber - ComputerReminderUnits) / 10) % 10;
ComputerReminderHundreds = ((ComputerNumber - (ComputerNumber % 100)) / 100) % 10;
ComputerReminderThousands = ((ComputerNumber - ComputerNumber % 1000) / 1000);
if (ComputerReminderUnits == ComputerReminderTens || ComputerReminderUnits == ComputerReminderHundreds || ComputerReminderUnits == ComputerReminderThousands || ComputerReminderTens == ComputerReminderHundreds || ComputerReminderTens == ComputerReminderThousands || ComputerReminderHundreds == ComputerReminderThousands)
x.NumberInitialisation();
else
x.UserInput();
}
void BullsAndCows::UserInput()
{
cout << "\n\n\t\tPlease Enter Your Choise.\n\n\t\t\t";
cin >> UserNumber;
while (UserNumber > 10000 || UserNumber < 1000)
{
cout << "\n\n\t\tPlease Enter Valid Values.\n\n\t\t\t";
cin >> UserNumber;
}
x.InitialiseUserValues();
x.Calculations();
}
void BullsAndCows::InitialiseUserValues()
{
PositionsCorrect = 0, DigitsCorrect = 0;
UserReminderUnits = UserNumber % 10;
UserReminderTens = ((UserNumber - UserReminderUnits) / 10) % 10;
UserReminderHundreds = ((UserNumber - (UserNumber % 100)) / 100) % 10;
UserReminderThousands = ((UserNumber - UserNumber % 1000) / 1000);
}
void BullsAndCows::Calculations()
{
x.NoOfPositionsCorrect();
x.NoOfDigitsCorrect();
cout << "\n\n\t\tNumber of Digits Correct :-" << DigitsCorrect;
cout << "\n\n\t\tNumber of Positions Correct :-" << PositionsCorrect;
x.CheckWin();
}
void BullsAndCows::NoOfPositionsCorrect()
{
if(UserReminderUnits == ComputerReminderUnits)
PositionsCorrect++;
if(UserReminderTens == ComputerReminderTens)
PositionsCorrect++;
if(UserReminderHundreds == ComputerReminderHundreds)
PositionsCorrect++;
if(UserReminderThousands == ComputerReminderThousands)
PositionsCorrect++;
}
void BullsAndCows::NoOfDigitsCorrect()
{
if(ComputerReminderUnits == UserReminderUnits || ComputerReminderUnits == UserReminderTens || ComputerReminderUnits == UserReminderHundreds || ComputerReminderUnits == UserReminderThousands)
DigitsCorrect++;
if(ComputerReminderTens == UserReminderUnits || ComputerReminderTens == UserReminderTens || ComputerReminderTens == UserReminderHundreds || ComputerReminderTens == UserReminderThousands)
DigitsCorrect++;
if(ComputerReminderHundreds == UserReminderUnits || ComputerReminderHundreds == UserReminderTens || ComputerReminderHundreds == UserReminderHundreds || ComputerReminderHundreds == UserReminderThousands)
DigitsCorrect++;
if(ComputerReminderThousands == UserReminderUnits || ComputerReminderThousands == UserReminderTens || ComputerReminderThousands == UserReminderHundreds || ComputerReminderThousands == UserReminderThousands)
DigitsCorrect++;
}
void BullsAndCows::CheckWin()
{
if(PositionsCorrect == 4 && DigitsCorrect == 4)
{
char Answer;
cout << "\n\n\t\tCongeratulations, You won!";
cout << "\n\n\t\tDo you wish to play again?(y/n)";
cin >> Answer;
while (Answer != 'Y' && Answer != 'y' && Answer != 'N' && Answer != 'n')
{
cout << "\n\n\t\tDo you wish to play again?(y/n)";
cin >> Answer;
}
if (Answer == 'Y' || Answer == 'y')
x.NumberInitialisation();
if (Answer == 'N' || Answer == 'n')
{
cout << "\n\n\t\tThank You for playing this Game.";
exit(0);
}
}
else
x.UserInput();
}