Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //###HEADER.H###\\\
- #include<iostream>
- #include<string>
- #include<vector>
- #include<cctype>
- enum GAMESTATE {GAME, PL_WIN, PL_LOSE, WHATNOW, DRAW};
- extern GAMESTATE GSState;
- extern std::string sSuits[];
- extern std::string sRanks[];
- inline int random(int nMin, int nMax)
- {
- return rand() % (nMax - nMin + 1) + nMin;
- }
- class CCard
- {
- private:
- std::string m_sSuit;
- std::string m_sRank;
- int n_nValue;
- public:
- CCard(std::string suit, std::string rank);
- CCard();
- std::string getSuit();
- std::string getRank();
- int getValue();
- void setValue(int nValue);
- };
- class CPerson
- {
- private:
- std::string n_sName;
- std::vector<CCard> myHand;
- int n_nValue;
- public:
- CPerson();
- void hit();
- void setName(std::string sName);
- std::vector<CCard> getHand();
- int getHandValue();
- };
- class CDealer : public CPerson
- {
- public:
- CDealer();
- void move();
- };
- class CPlayer : public CPerson
- {
- public:
- CPlayer();
- void check();
- };
- inline std::string toLowerCase(std::string &str)
- {
- const int length = str.length();
- for(int i=0; i < length; ++i)
- {
- str[i] = std::tolower(str[i]);
- }
- return str;
- }
- extern CCard giveCard();
- //class CDeck
- //{
- //private:
- // int n_nX;
- //public:
- // CCard aDeck[52];
- // CDeck()
- // {
- // n_nX = 0;
- // for (int i = 0; i < 4; i++) {
- // for (int j = 0; j < 13; j++) {
- // aDeck[n_nX] = CCard(sSuits[i], sRanks[j]);
- // n_nX++;
- // }
- // }
- //}
- //};
- //###CARD.CPP###\\
- #include"header.h"
- //GAMESTATE GSState;
- std::string sSuits[4] = {"clubs", "diamnonds", "spades", "hearts"};
- std::string sRanks[13] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
- CCard::CCard(std::string suit, std::string rank)
- {
- m_sSuit = suit;
- m_sRank = rank;
- }
- CCard::CCard()
- {
- m_sSuit = "null";
- m_sRank = "null";
- }
- std::string CCard::getSuit()
- {
- return m_sSuit;
- }
- std::string CCard::getRank()
- {
- return m_sRank;
- }
- int CCard::getValue()
- {
- if (this->getRank() == "J" ||
- this->getRank() == "K" ||
- this->getRank() == "Q")
- {
- n_nValue = 10;
- }
- else if (this->getRank() == "A")
- {
- n_nValue = 11;
- }
- else
- {
- for (int i = 0; i < 13; i++)
- {
- if (this->getRank() == sRanks[i])
- {
- n_nValue = i + 2;
- }
- }
- }
- return n_nValue;
- }
- void CCard::setValue(int nValue)
- {
- this->n_nValue = nValue;
- }
- CCard giveCard()
- {
- return CCard(sSuits[random(0,3)], sRanks[random(0,12)]);
- }
- //###PEOPLE.CPP###\\
- #include<iostream>
- #include<vector>
- #include"header.h"
- GAMESTATE GSState;
- CPerson::CPerson()
- {
- for (int i = 0; i < 2; i++)
- {
- this->hit();
- }
- }
- CDealer::CDealer()
- {
- setName("John");
- }
- CPlayer::CPlayer()
- {
- std::string sName;
- std::cout << "What's your name? ";
- std::cin >> sName;
- setName(sName);
- }
- void CPerson::setName(std::string sName)
- {
- n_sName = sName;
- }
- std::vector<CCard> CPerson::getHand()
- {
- return this->myHand;
- }
- void CPerson::hit()
- {
- myHand.push_back(giveCard());
- /*std::cout << "You received: \nrank: "
- << myHand[myHand.size()-1].getRank()
- << " "
- << "suit: "
- << myHand[myHand.size()-1].getSuit()
- << " "
- << "value: "
- << myHand[myHand.size()-1].getValue()
- << std::endl;*/
- if (n_sName.length() > 0)
- {
- std::cout << n_sName << " got a new card!" << std::endl;
- }
- }
- int CPerson::getHandValue()
- {
- n_nValue = 0;
- for (int i = 0; i < myHand.size(); i++)
- {
- n_nValue += myHand[i].getValue();
- }
- // if (n_nValue > 21)
- // {
- // for (int i = 0; i < myHand.size(); i++)
- // {
- // if (myHand[i].getRank() == "A")
- // {
- // n_nValue -= 10;
- // }
- // }
- // }
- // else
- // {
- return n_nValue;
- // }
- }
- void CPlayer::check()
- {
- if (this->getHandValue() == 21)
- {
- GSState = PL_WIN;
- }
- else if (this->getHandValue() > 21)
- {
- GSState = PL_LOSE;
- }
- }
- void CDealer::move()
- {
- if (this->getHandValue() == 21)
- {
- GSState = PL_LOSE;
- }
- else if (this->getHandValue() <= 16)
- {
- std::cout << "Dealer stands!" << std::endl;
- }
- else if (this->getHandValue() >= 17)
- {
- GSState = WHATNOW;
- }
- }
- //###MAIN.CPP##\\
- #include<iostream> //std
- #include<conio.h> //only for getch
- #include<vector> //vector
- #include<string> //cout cardValue
- #include<ctime> //random seed
- #include"header.h"
- int main() {
- srand (static_cast<unsigned int>(time(NULL)));
- CDealer myDealer;
- CPlayer myPlayer;
- std::string sMove = "";
- GSState = GAME;
- myPlayer.check();
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- while (GSState == GAME)
- {
- std::cout << "What to do? [hit/stand/double/pass]\n" << std::endl;
- std::cin >> sMove;
- if (toLowerCase(sMove) == "print") {
- std::cout << "Your cards are:" << std::endl;
- for (unsigned i = 0; i < myPlayer.getHand().size(); i++)
- {
- std::cout << "rank: "
- << myPlayer.getHand()[i].getRank()
- << " "
- << "suit: "
- << myPlayer.getHand()[i].getSuit()
- << " "
- << "value: "
- << myPlayer.getHand()[i].getValue()
- << std::endl;
- }
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- }
- else if (toLowerCase(sMove) == "hit")
- {
- myPlayer.hit();
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- myDealer.move();
- }
- else if (toLowerCase(sMove) == "stand" || toLowerCase(sMove) == "")
- {
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- myDealer.move();
- }
- else if (toLowerCase(sMove) == "double")
- {
- myPlayer.hit();
- //double nBet
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- myDealer.move();
- }
- else if (toLowerCase(sMove) == "clear")
- {
- system("cls");
- }
- else if (toLowerCase(sMove) == "pass")
- {
- GSState = PL_LOSE;
- break;
- }
- else
- {
- std::cout << "What was that, sir?" << std::endl;
- }
- myPlayer.check();
- }
- if (GSState == WHATNOW)
- {
- if (myDealer.getHandValue() > myPlayer.getHandValue())
- {
- GSState = PL_LOSE;
- }
- else if (myDealer.getHandValue() < myPlayer.getHandValue())
- {
- GSState = PL_WIN;
- }
- else
- {
- GSState = DRAW;
- }
- }
- switch (GSState)
- {
- case PL_LOSE:
- std::cout << "You lose!"
- << std::endl
- << "Dealer: "
- << myDealer.getHandValue()
- << "\nYou: "
- << myPlayer.getHandValue();
- break;
- case PL_WIN:
- std::cout << "You win!"
- << std::endl
- << "Dealer: "
- << myDealer.getHandValue()
- << "\nYou: "
- << myPlayer.getHandValue();
- break;
- case DRAW:
- std::cout << "There is a draw at "
- << myPlayer.getHandValue()
- << std::endl;
- break;
- default:
- break;
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement