Rewrite your solution to permit an arbitrary number of players. source.cpp #incl
ID: 3731890 • Letter: R
Question
Rewrite your solution to permit an arbitrary number of players.
source.cpp
#include <ctime>
#include <iomanip>
#include <iostream>
#include <string>
#include <random>
#include "Player.h"
using namespace std;
int main()
{
const int M = 37;
const int N = 5;
Player player[N];
player[0].setName("Edd"); player[0].setPoints(0);
player[1].setName("Ged"); player[1].setPoints(0);
player[2].setName("Jed"); player[2].setPoints(0);
player[3].setName("Ted"); player[3].setPoints(0);
player[4].setName("Zed"); player[4].setPoints(0);
default_random_engine dre(static_cast<size_t>(time(0)));
uniform_int_distribution<int> player_uid(0, N - 1);
uniform_int_distribution<int> dice_uid(1, 6);
int index = player_uid(dre);
do
{
int die1 = dice_uid(dre);
int die2 = dice_uid(dre);
int points = player[index].getPoints() + die1 + +die2;
player[index].setPoints(points);
player[index].setExtraTurn(false);
if (points > M)
{
player[index].setPoints(points / 2);
if (die1 == die2)
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " loses 1/2 points" << endl;
else
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " loses 1/2 points and next turn" << endl;
player[index].setLostTurn(true);
}
index = (index + 1) % N;
}
else if (points == M)
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << endl;
cout << player[index].getName() << " wins" << endl;
}
else if (die1 == die2)
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " extra turn" << endl;
player[index].setExtraTurn(true);
}
else
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << endl;
index = (index + 1) % N;
}
while (player[index].getLostTurn())
{
cout << player[index].getName() << " loses this turn" << endl;
player[index].setLostTurn(false);
index = (index + 1) % N;
}
}
while (player[index].getPoints() != M);
system("pause");
return 0;
}
player.h
#pragma once
#include <string>
using namespace std;
class Player
{
public:
Player(const string& new_name = "No Name");
string getName() const;
int getPoints() const;
void setName(const string& new_name);
void setPoints(int new_points);
bool getExtraTurn() const;
void setExtraTurn(bool new_extra_turn);
bool getLostTurn() const;
void setLostTurn(bool new_lost_turn);;
private:
string name;
int points;
bool lost_turn;
bool extra_turn;
};
player.cpp
#include "Player.h"
Player::Player(const string& new_name)
{
setName(new_name);
lost_turn = false;
extra_turn = false;
}
string Player::getName() const
{
return name;
}
bool Player::getLostTurn() const
{
return lost_turn;
}
void Player::setLostTurn(bool new_lost_turn)
{
lost_turn = new_lost_turn;
}
int Player::getPoints() const
{
return points;
}
void Player::setName(const string& new_name)
{
name = new_name;
}
void Player::setPoints(int new_points)
{
points = new_points;
}
bool Player::getExtraTurn() const
{
return extra_turn;
}
void Player::setExtraTurn(bool new_extra_turn)
{
extra_turn = new_extra_turn;
}
Explanation / Answer
I am doing changes in only in source.cpp file other two files remain same.
You can simply take input value(N) from terminal and Max_Point assumes as per your code.
#include <ctime>
#include <iomanip>
#include <iostream>
#include <string>
#include <random>
#include "Player.h"
using namespace std;
int main()
{
int N,M;
cout<<"how many players you want ? ";
cin>>N;
/* Choose random point (Value of M) and by reading your code it seems value of M must efficiently greater than value of N
So we can choose value of M greater then 7*N ... as per your code
*/
M=7*(rand()%N)+rand()%N;
Player player[N];
player[0].setName("Edd"); player[0].setPoints(0);
player[1].setName("Ged"); player[1].setPoints(0);
player[2].setName("Jed"); player[2].setPoints(0);
player[3].setName("Ted"); player[3].setPoints(0);
player[4].setName("Zed"); player[4].setPoints(0);
default_random_engine dre(static_cast<size_t>(time(0)));
uniform_int_distribution<int> player_uid(0, N - 1);
uniform_int_distribution<int> dice_uid(1, 6);
int index = player_uid(dre);
do
{
int die1 = dice_uid(dre);
int die2 = dice_uid(dre);
int points = player[index].getPoints() + die1 + +die2;
player[index].setPoints(points);
player[index].setExtraTurn(false);
if (points > M)
{
player[index].setPoints(points / 2);
if (die1 == die2)
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " loses 1/2 points" << endl;
else
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " loses 1/2 points and next turn" << endl;
player[index].setLostTurn(true);
}
index = (index + 1) % N;
}
else if (points == M)
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << endl;
cout << player[index].getName() << " wins" << endl;
}
else if (die1 == die2)
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << " extra turn" << endl;
player[index].setExtraTurn(true);
}
else
{
cout << player[index].getName() << '/' << setw(2) << die1 + die2 << '/' << setw(2) << player[index].getPoints() << endl;
index = (index + 1) % N;
}
while (player[index].getLostTurn())
{
cout << player[index].getName() << " loses this turn" << endl;
player[index].setLostTurn(false);
index = (index + 1) % N;
}
}
while (player[index].getPoints() != M);
system("pause");
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.