// RPS.CPP
// By Ken Mathis (CheckMate)
// Rock Paper Scissors game
// Added score keeping 8/20/02

// Header files.
#include 
#include 
#include 

// Function declarations.
int computer();
void win_lose(int, int);
void display();
void record(int);
void printstats();

// Main function.
int main()
{
	// Integer declarations.
	int choice, comp_choice;
	
	// Game loop.
	do
	{
		display(); // Calls the display function.
		
		// Get's user's choice.
		cout << ": ";
		cin >> choice;

		// Check if user wants to exit.
		if (choice == 5)
		{
			cout << "Bye Bye! :)\n";
			break;
		}
		
		// check if the user wants to view stats
		else if (choice == 4)
		{
			printstats();
		}

		// If user doesn't wannt to exit it continues the program.
		else
		{
			// Get computer choice
			comp_choice = computer();
			// Check if it's win lose or draw.
			win_lose(comp_choice,choice);
		}
	} while(1);
	return 0;
}

void display() // Display function.
{
	cout << "1 = Rock... 2 = Paper... 3 = Scissors... 4 = Stats... 5 = Exit\n";
}

int computer() // Computer choice function.
{
	int x = 1 + rand() % 3; // Random number from computer.
	
	// Check if he chose Rock Paper or Scissors.
 switch(x)
 {
      case 1:
        cout << "Comp Chose: Rock.\n";
        break;
      case 2:
        cout << "Comp Chose: Paper.\n";
        break;
      case 3:
        cout << "Comp Chose: Scissors.\n";
        break;
 }
	return (x);
}

void win_lose(int comp, int user) // Win/Lose/Draw function.
{
	// If comp chose Rock.
	if (comp == 1 && user == 1)
	{
		cout << "Tie!\n";
		
		record(2); // update records
	}
	
	if (comp == 1 && user == 2)
	{
		cout << "You won!\n";
		
		record(0);
	}

	if (comp == 1 && user == 3)
	{
		cout << "You lost!\n";
		
		record(1);
	}

	// If comp chose Paper.
	if (comp == 2 && user == 2)
	{
		cout << "Tie!\n";
		
		record(2);
	}
	
	if (comp == 2 && user == 3)
	{
		cout << "You won!\n";

		record(0);
	}

	if (comp == 2 && user == 1)
	{
		cout << "You lost!\n";
		
		record(1);
	}

	// If comp chose Scissors.
	if (comp == 3 && user == 3)
	{
		cout << "Tie!\n";

		record(2);
	}
	
	if (comp == 3 && user == 1)
	{
		cout << "You won!\n";
		
		record(0);
	}

	if (comp == 3 && user == 2)
	{
		cout << "You lost!\n";

		record(1);
	}
}

// update records
/*
0 - player win
1 - player lose
2 - tie
*/
void record(int result)
{
	int wins, loses, ties;

	ifstream infile;
	ofstream outfile;

	infile.open("stats.dat",ios::in); // get current stats
	infile >> wins;
	infile >> loses;
	infile >> ties;
	infile.close();

	switch (result) // check results
	{
	case 0:
		wins++; 
		break;
	case 1:
		loses++;
		break;
	case 2:
		ties++;
		break;
	}
	
	outfile.open("stats.dat",ios::out); // update the stats
	outfile << wins << endl;
	outfile << loses << endl;
	outfile << ties << endl;
	outfile.close();
}

// display stats
void printstats()
{
	int wins, loses, ties;

	ifstream infile; // get stats from file
	infile.open("stats.dat",ios::in);
	infile >> wins;
	infile >> loses;
	infile >> ties;
	infile.close();
	
	// display results
	cout << "You won:  " << wins << endl;
	cout << "You lost: " << loses << endl;
	cout << "You tied: " << ties << endl;
}

    Source: geocities.com/hiddenbunkerlabs/code

               ( geocities.com/hiddenbunkerlabs)