View Single Post
Old 06-09-2007, 07:37 PM   #48 (permalink)
aditya.shevade
Console Junkie
 
aditya.shevade's Avatar
 
Join Date: Jun 2006
Location: USA
Posts: 991
Default Re: Post ur C/C++ Programs Here

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();
	
}
__________________
--- Console Junkie
aditya.shevade is offline