Simple Monopoly
1。The problem of human
This is a simple C++ assignment to simulate the monopoly game but in extremely simple mode.
2. This is head file
//////////////////////////////////////////////////// //Program Title: Monopoly //Purpose: To practice structures //Name: Qingzhe Huang //ID: 5037735 //Section: X ////////////////////////////////////////////////////
#include <iostream> #include <ctime>
using namespace std;
struct Property
{
char name;
int price;
int owner; //the index of player
};
struct Player
{
int money;
int position;
bool eliminated;
};
const int PlayerNum = 3; const int PropertyNum = 6; const int InitMoney = 1500;
Property properties[PropertyNum];
Player players[PlayerNum];
void initialize();
void display();
void transact(int playerIndex);
void playGame();
bool nextPlayer();
int roll1Dice();
int roll2Dice();
bool canPlay();
3. This is my cpp file
#include "Monopoly.h"
int main()
{
char choice;
cout<<"want to use fixed seed like 248?";
cin>>choice;
//thru this simple choice you can set up seed
if (choice=='y')
{
srand(248);
}
else
{
srand(time(NULL));
}
//input data
initialize();
display();
while (canPlay())
{
playGame();
}
display();
return 0; }
//check all player to see if there is player to play
bool hasPlayer()
{
for (int i=0; i< PlayerNum; i++)
{
if (!players[i].eliminated)
{
return true;
}
}
return false;
}
//check all property to see if there is property that is not owned by bank
bool hasProperty()
{
for (int j=0; j<PropertyNum; j++)
{
if (properties[j].owner == -1)
{
return true;
}
}
return false;
}
//only when there is player and there is property left that you can play
bool canPlay()
{
bool hasPlayer();
bool hasProperty();
return (hasPlayer()&&hasProperty()); }
//input data
void initialize()
{
cout<<"Enter the name and price of the 6 properties:"<<endl;
for (int i =0; i< PropertyNum; i++)
{
cin>>properties[i].name>>properties[i].price;
properties[i].owner = -1; //-1 means the bank owns it
}
for (int j=0; j< PlayerNum; j++)
{
players[j].position = -1;//starting pos
players[j].money = InitMoney;
}
}
void display()
{
for (int j =0; j< PlayerNum; j++)
{
//THE POSITION = index + 1
cout<<"player "<<j+1<<" has "<<players[j].money<<"$, is at position "
<<(players[j].position==-1?-1:players[j].position+1)<<" and is "
<<(players[j].eliminated?" ":" not ")<<"elimininated"<<endl;
}
for (int i=0; i< PropertyNum; i++)
{
cout<<"property "<<properties[i].name<<" costs "<<properties[i].price
<<"$, its owner is";
if (properties[i].owner==-1)
cout<<" bank";
else
cout<<" player "<<properties[i].owner + 1;
cout<<endl;
}
}
void transact(int playerIndex)
{
int pos=0;
//as this variable is used with more than one time
pos = players[playerIndex].position;.
if (properties[pos].owner == -1) //if it is bank property
{
//if money is less then definitely eliminated
if (players[playerIndex].money < properties[pos].price)
{
players[playerIndex].eliminated = true;
cout<<" player "<<playerIndex + 1<<" is eliminated"<<endl;
}
else
{
//buy it
players[playerIndex].money -= properties[pos].price;
properties[pos].owner = playerIndex;
cout<<" buys "<<properties[pos].name<<" and now has "
<<players[playerIndex].money<<"$"<<endl;
//if the money is 0, still eliminate it.
if (players[playerIndex].money==0)
{
cout<<"player "<<playerIndex + 1<<" is eliminated"<<endl;
players[playerIndex].eliminated = true;
}
}
}
else
{
//if it is not bank property, you are safe to play one more round
cout<<" player "<<playerIndex + 1<<" cannot buy "<<properties[pos].name
<<" because it belongs to player "<<properties[pos].owner + 1<<endl;
}
}
void playGame()
{
int temp =0;
for (int i =0; i< PlayerNum; i++)
{
if (!players[i].eliminated)
{
temp = roll2Dice();
cout<<"player "<<i + 1<<" moves "<<temp<<" steps, stops on ";
players[i].position += temp;
//modus gives you the round effect
players[i].position %= PropertyNum;
cout<<properties[players[i].position].name<<",";
transact(i);
}
}
}
//mod it and shift by one to get the step, otherwist it is index
int roll1Dice()
{
return rand()%6 + 1;
}
int roll2Dice()
{
return roll1Dice() + roll1Dice();
}