Computer Programming 1: In C++ with comments, and with drawn cards. Your final g
ID: 3841403 • Letter: C
Question
Computer Programming 1:
In C++ with comments, and with drawn cards.
Your final group project will be to create a class or classes for the Black Jack game.
It will shuffle the card deck of 52 cards (faces and suits) and show each card face and suit before and after shuffling.
Present the dealers cards, one up and one covered.
Present the player's cards, two up.
Ask the player to hit or stand.
Show the dealer's cards. Take additional cards for dealer as long as it is under seventeen.
Determine whose the winner.
Play until player indicates.
Include constructors and destructors.
Implementation separate from definition.
Grading Criteria:
20 Documentation
30 In-Class Presentation
50 Execution
Explanation / Answer
#include<iostream>
#include<vector>
#include<ctime>
#include<string>
#include<algorithm>
using namespace std;
class Card
{
public:
enum rank {ACE=1,TW,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING};
enum suit {CLUBS,DIAMONDS,HEARTS,SPADES};
friend ostream& operator<<(ostream& os,const Cars& aCard);
{
delete *iter;
*iter=0;
m_Cards.clear();
}
int HAND:: GetTotal() const
{
if(m_Cards.empty())
return 0;
if(m_Cards[0]->GetValue()==0)
return 0;
int total=0;
vector<Card>::const_iterator iter;
for(iter=m_Cards.begin():iter !=m_Cards.end();++iter)
total+=(*iter)->GetValue();
bool containsAce=false;
for(iter=m_Cards.begin():iter !=m_Cards.end();++iter)
if((*iter->GetValue()==Card::ACE)
containsACE=true;
if(containsACE && total<=11)
{
total+=10;
}
return total;
}
calss GenericPlayer:public Hand
{
friend ostream& operator<<(ostream& os,const GenericPlayer& aGenericPlayer);
public:
GenericPlayer(const string& name+"");
virtual ~GenericPlayer();
virtual bool IsHitting() const=0;
bool IsBusted() const;
void Bust() const;
protected:
string m_Name;
};
GenericPlayer::GenericPlayer(const string& name):
m_Name(name)
{
}
GenericPlayer::~GenericPlayer()
{
}
bool GenericPlayer::IsBusted()const
{
rteun (GetTotal()>21);
}
void Genericplayer::Bust() const
{
cout<<m_Name<<"busts. ";
}
class Player:public GenericPlayer
{
public:
Player(const string& name=" ");
virtual ~Player();
virtual bool IsHitting() const;
void Win() const;
void Lose() const;
void push() const;
};
Player::Player(const string&name):
Card(rank r=ACE,suit s=SPADES,bool ifUp=true);
int GetValue() const;
void Flip();
private:
GenericPlayer(name)
{
}
player::~Player()
{
}
bool Player::IsHitting() const
{
cout<<m_Name<<",do you want a hit?(Y/N): ";
char response;
cin>>response;0
return(response=='y'||response=='Y');
}
void Player::Win() const
{
cout<<m_Name<<"wins. ";
}
void Player::Loase() const
{
cout<<m_Name<<"lose. ";
}
void Player::Push() const
{
cout<<m_Name<<"pushes. ";
}
class House:public GenericPlayer
{
public:
House(const string& name="House");
virtual ~House();
virtual bool IsHitting() const;
void FlipFirstCard();
};
House::House(const string& name);
GenericPlayer(name)
{
}
House::~House()
{
}
bool House::IsHittin() const
{
return (GetTotal()<=16);
}
void House:;FlipFirstCard()
{
if(!m_Cards.empty())
m_Cards[0]->flip();
else
cout<<"No cards to flip! ";
}
class Deck:public Hand
{
public:
Deck();
virtual ~Deck();
void Populate();
void shuffle();
void Deal(Hand& aHand);
void AdditionalCards(GenericPlayer& aGenericplayer);
};
Deck::Deck()
{
m_Cards.reverse(52);
populate();
}
Deck::~Deck()
{
}
void Deck::Populate()
{
Clear();
for(int s=Card::CLUBS;s<=Card::SPADES;++s)
{
for(int r=Card:ACE;r<=Card:KING;++r)
{
Add(new Card(static_cast <Card::rank>(r),static_cast<Card::suit>(s))));
}
}
}
void Deck::Shuffle()
{
rank m_Rank;
suit m_Suit;
bool m_IsFaceUp;
};
Card::Card(rank r suit s,bool ifUp):m_Rank(r),m_Suit(s),m_IsFaceUp(ifUp)
{
}
random_shuffle(m_Cards.begin(),m_Cards.end());
}
void Deck::Deal(Hsnd& aHand)
{
if(!m_Cards.empty())
{
aHand.ADD(m_Cards.back());
m_Cards.pop_back();
}
else
{
cout<<"out of cards,Unable to deal. ";
}
}
void Deck::AdditionalCards(Genericplayer& aGenericPlayer)
{
cout<<endl;
while(!(aGenericPlayer.IsBusted()) && aGenericPlayer.IsHitting())
{
Deal(aGenericPlayer);
cout<<aGenericPlayer<<endl;
if(aGenericPlayer.IsBusted())
aGenericPlayer.Bust();
}
}
class Game
{
public:
Game(const vector<string>& names);
~Game();
void Play(0;
friend void Instructions();
private:
Deck m_Deck;
House m_House;
vector<Player>m_Players;
};
Game::Game<const vector<string>& names)
{
vector<string>::const_iterator pName;
for(pName=names.begin();pName!=names.end();++pName)
m_Players.push_back(Player(*pName));
srand(time(0));
m_Deck.Populate();
m_Deck.Shuffle();
}
Game::~Game()
{
}
void Instructions()
{
cout<<" Goal:reach 21 without going over ";
cout<<" The House (computer player) will be playing against you ";
cout<<" if the house busts(goes over),all players who ";
cout<<" havenot busted will win. ";
cout<< if the house doesnot bust,all player ";
cout<<" who havenot busted ,will win,if their ";
cout<<" total value is greater tahn the house's ";
cout<<" if a player gets 21 and the house doesnot ";
cout<<" the player is a winner ";
cout<<" if a player and the house both get 21 ";
cout<<" it is declared a push (tie) ";
cout<<" up to seven players may play ";
cout<<" c=clubs,d=diamonds,h=hearts,s=spades ";
}
void Game::Play()
{
vetor<Player>::iteratorpPlayer;
for(int i=0;i<2;++i)
{
for(pPlayer=m_Player.begin(); pPlayer!=m_Player.end(); ++pPlayer)
m_Deck.Deal(*pPlayer);
m_Deck.Deal(m_House);
}
int Card::GetValues()const
{
int value=0;
if(m_IsFaceUp)
{
value=m_Rank;
if(value>10) value=10;
m_Hosue.FlipFirstCard();
for(pPlayer=m_Player.begin(); pPlayer!=m_Player.end(); ++pPlayer)
cout<<*pPlayer<<endl;
cout<<m_House<<endl;
for(pPlayer=m_Player.begin(); pPlayer!=m_Player.end(); ++pPlayer)
m_Deck.AdditonaCards(*pPlayer);
m_house.FlipFirstCard();
cout<<endl<<m_House;
m_Deck.AdditonalCards(m_House);
if(m_House.IsBusted())
{
for(pPlayer=m_players.begin(); pPlayer!=m_Players.end(); ++pPlayer)
if(!(pPlayer->IsBusted())
pPlayer->Win();
}
else
{
for(pplayer=m_Players.begin(); pPlayer!=m_Players.end(); ++pPlayer)
if(!(pplayer->IsBusted())
{
if(pPlayers->GetTotal()>m_House.GetTotal())
pPlayer->Win();
else if(pPlayer->GetTotal<m-House.GetTotal())
pPlayer->Lose();
else
pPlayer->Push();
}
}
for(pPlayer=m_Players.begin(); pPlayer!=m_Players.end(); ++pPlayer)
pPlayer->clear();
m_House.Clear();
}
ostream& oprator<<(ostream& os,const Card& aCard);
ostream& oprator<<(ostream& os,const GenericPlayer& aGenericPlayer);
int main()
{
cout<<" Welcome to blackjac!Have Fun playing! ";
Instructions();
int numPlayer=0;
whi;e(numPlayer<1||numPlayer>7)
{
cout<<"How many playeers?(1-7):";
cin>>numPlayers:
}
vector<string> names;
string name;
for(int i=0;i<numPlayers; ++i)
{
cout<<"enter player name";
cin>.name;
names.push_back(name);
}
cout<<endl;
Game aGame(names);
char again='y';
while(again !='n'&& again !='N')
{
aGame.Play();
cout<<" do you want to play again?(Y/N):";
cin>>again;
}
return 0;
}
ostream& operator<<(ostream& os,const Card& aCard)
{
const string RANKS[]={"0","A","2","3","4","5","6","7","8","9","10","J","Q","K"}
return value;
}
void Card::Flip()
{
m_IsFaceUPp=!(m_IsFaceUp);
}
class Hand
{
const string SUITS[]={"c","d","h","s"};
if(aCard.m_IsFaceUp)
os<<RANKS[aCard.m_Rank]<<SUITS[a.Card.m_Suit];
else
os<<"XX";
return os;
}
ostream& operator<<(ostream& os,const GenericPlayer& aGenericplayer)
{
os<<aGenericplayer.m_Name<<": ";
vector <Card8>:;const_iterator pCard;
if(!aGenericplayer.m_Cards.empty())
{
for(pCard=aGenericplayer.m_Cards.begin();
pCard!=aGenericplayer.m_Cards.end(); ++pCard)
os<<*(*pCard)<<" ";
if(aGenericplayer.GetTotal()!=0)
cout<<"("<<aGenericplayer.GetTotal()<<")";
}
else
os<<"<empty>";
return os;
}
public :
Hand();
virtual ~Hand();
void Add(Card* pCard);
void Clear();
int GetTotal() const;
protected:
vector <Card*> m_Cards;
};
Hand::Hand()
{
m_Cards.reserve(7);
}
Hand::~Hand()
{
Clear();
}
void Hand::Add(Card* pCard){
m_Cards.push_back(pCard);
}
void Hand::Clear()
{
vector <Card*> ::iterator iter=m_Cards.begin();
for(iter=m_Cards.begin(); iter!=m_Cards.end(); ++iter)
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.