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 CDealer
- {
- private:
- std::vector<CCard> deHand;
- int n_nValue;
- public:
- CDealer();
- std::vector<CCard> getHand();
- void hit();
- void move();
- int getHandValue();
- };
- class CPlayer
- {
- private:
- std::vector<CCard> myHand;
- int n_nValue;
- public:
- CPlayer();
- std::vector<CCard> getHand();
- void hit();
- void check();
- int getHandValue();
- };
- 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)]);
- }
- //=====Player.cpp=====\\
- #include<iostream>
- #include<vector>
- #include"header.h"
- //GAMESTATE GSState;
- CPlayer::CPlayer()
- {
- for (int i = 0; i < 2; i++)
- {
- this->hit();
- }
- }
- std::vector<CCard> CPlayer::getHand()
- {
- return myHand;
- }
- void CPlayer::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;
- }
- void CPlayer::check()
- {
- this->n_nValue = 0;
- for (int i = 0; i < myHand.size(); i++)
- {
- this ->n_nValue += myHand[i].getValue();
- }
- if (this->n_nValue == 21)
- {
- GSState = PL_WIN;
- }
- else if (this->n_nValue > 21)
- {
- GSState = PL_LOSE;
- }
- }
- int CPlayer::getHandValue()
- {
- this->check();
- return n_nValue;
- }
- //=====Dealer.cpp=====\\
- #include<iostream>
- #include<vector>
- #include"header.h"
- GAMESTATE GSState;
- CDealer::CDealer()
- {
- for (int i = 0; i < 2; i++)
- {
- this->hit();
- }
- std::cout << "Dealer got his cards!" << std::endl;
- }
- std::vector<CCard> CDealer::getHand()
- {
- return deHand;
- }
- void CDealer::hit()
- {
- deHand.push_back(giveCard());
- }
- void CDealer::move()
- {
- n_nValue = 0;
- for (int i = 0; i < deHand.size(); i++)
- {
- n_nValue += deHand[i].getValue();
- }
- if (n_nValue == 21)
- {
- GSState = PL_LOSE;
- std::cout << "Dealer wins!" << std::endl; //test
- }
- else if (n_nValue <= 16)
- {
- std::cout << "Dealer stands!" << std::endl; //test
- }
- else if (n_nValue >= 17)
- {
- GSState = WHATNOW;
- std::cout << "wut?" << std::endl; //test
- }
- }
- int CDealer::getHandValue()
- {
- return n_nValue;
- }
- //=====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 = "";
- GAMESTATE GSState = GAME;
- while (toLowerCase(sMove) != "exit")
- {
- while (GSState == GAME)
- {
- 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;
- }
- }
- else if (toLowerCase(sMove) == "hit")
- {
- myPlayer.hit();
- myPlayer.check();
- myDealer.move();
- }
- else if (toLowerCase(sMove) == "stand" || toLowerCase(sMove) == "")
- {
- myDealer.move();
- myPlayer.check();
- }
- else if (toLowerCase(sMove) == "double")
- {
- myPlayer.hit();
- //double nBet
- myDealer.move();
- myPlayer.check();
- }
- else if (toLowerCase(sMove) == "clear")
- {
- system("cls");
- }
- else
- {
- std::cout << "What was that, sir?" << std::endl;
- }
- std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
- std::cin >> sMove;
- }
- break;
- }
- 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;
- break;
- case PL_WIN:
- std::cout << "You win!" << std::endl;
- break;
- case DRAW:
- std::cout << "There is a draw!" << std::endl;
- break;
- default:
- break;
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement