In: Computer Science
problem 3-1
You are going to build a C++ program which runs a single game of Rock, Paper, Scissors. Two players (a human player and a computer player) will compete and individually choose Rock, Paper, or Scissors. They will then simultaneously declare their choices and the winner is determined by comparing the players’ choices. Rock beats Scissors. Scissors beats Paper. Paper beats Rock.
The learning objectives of this task is to help develop your understanding of abstract classes, inheritance, and polymorphism.
Your task is to produce a set of classes that will allow a human player to type instructions from the keyboard and interact with a computer player.
Your submission needs to contain the following files, along with their header files:
Part 1: Abstract
Classes
Define and implement an abstract class named
Player that has the following behaviours:
void move();
string getMoves();
char getMove(); //returns the most recent move made
bool win(Player * opponent); //compares players’ moves to see who
wins
Declare the move() and getMoves() functions as pure virtual and set proper access modifiers for the attributes and methods.
If no one wins, the game should output “draw! go again”, and the game continues until a winner is determined.
Part 2: Polymorphism
Computer Class:
Define and implement a class named Computer that inherits from Player. By default, Computer will use Rock for every turn. If it is constructed with another value (Paper or Scissors), it will instead make that move every turn.
The Computer class has the following constructor and behaviours:
Computer(string letter); //set what move the computer will
//make (rock, paper, or scissors)
//if the input is not r, R, p, P, s, S or
//a string starting with one of these letters,
//set the move to the default ‘r’
string getMoves(); //returns all moves stored in a string
void move(); //increments number of moves made
To explain, if the computer was constructed with Computer(‘s’), and it made 3 moves, getMoves() should return:
sss
For advice about testing, please use the debugging manual (Links to
an external site.).
Person Class:
Define and implement a class named Person that inherits from Player. The Person can choose Rock, Paper, or Scissors based on the user’s input.
The Player class has the following behaviours:
void move(); //allow user to type in a single character to
//represent their move. If a move is impossible,
//“Move unavailable” is outputted and the user is
//asked to input a character again.
//Otherwise, their input is stored
string getMoves(); //returns all moves stored in a string
Write a main function that uses Computer and Person to play Rock, Paper, Scissors. The Computer can be made with either constructors, but should set the default move to ‘r’. The player should be asked to input a move which is then compared against the computer’s move to determine who wins.
All the Player’s previous moves should be outputted, followed by all the Computer’s moves outputted on a new line.
Example Test Cases
Source Code:
#include <iostream>
using namespace std;
class humanClass{
public:
char* moves;
int totalMoves;
int noOfMove;
humanClass(){
cout << "Enter your input: ";
cin >> totalMoves;
moves = new char[totalMoves];
for( int i = 0; i < totalMoves; i++ ){
cin >> moves[i];
}
noOfMove = 0;
}
char move(){
if( noOfMove >= totalMoves ){
cout << "Error" << endl;
return '-';
}
char returnV = moves[noOfMove];
noOfMove = noOfMove + 1;
return returnV;
}
};
class computerClass{
public:
char move(){
return 'R';
}
};
class refereeClass{
public:
void competition( humanClass H, computerClass C ){
int totalMoves = H.totalMoves;
for(int i = 0; i < totalMoves; i++){
char winner = 'T';
char humanMove = H.move();
char compMove = C.move();
if( humanMove=='R'){
if(compMove=='S'){
winner='W'; }
if(compMove=='P'){
winner='L';
}
}
if( humanMove=='S'){
if(compMove=='R'){
winner='L'; }
if(compMove=='P'){
winner='W';
}
}
if( humanMove=='P'){
if(compMove=='S'){
winner='L'; }
if(compMove=='R'){
winner='W';
}
}
cout << winner << " ";
}
cout << endl;
}
};
int main(){
humanClass H;
computerClass C;
refereeClass R;
R.competition( H, C );
return 0;
}
Note: If you have any related doubts, queries, feel free to ask by commenting down below.
And if my answer suffice your requirements, then kindly upvote.
Happy Learning