Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <array>
- #include "card.h"
- Result playABlackjack(std::array<Card, 52> &deck);
- void countPlayerScore(int *playerScore, Card &card);
- void printScore(int playerScore, int dealerScore);
- int main()
- {
- using namespace std;
- srand(static_cast<unsigned int>(time(nullptr)));
- array<Card, 52> deck;
- for (int i = 0; i < static_cast<int>(Suit::MAX_SUIT); ++i) {
- for (int j = 0; j < 13; ++j) {
- Card card { static_cast<Dignity>(j), static_cast<Suit>(i) };
- deck[static_cast<unsigned long long>(i * 13 + j)] = card;
- }
- }
- while (true) {
- shuffleDeck(deck);
- Result winner = playABlackjack(deck);
- if (winner == Result::PLAYER_WINS) {
- cout << "Player wins!" << endl;
- }
- else if (winner == Result::PLAYER_LOSE) {
- cout << "Player lose" << endl;
- }
- else {
- cout << "No one wins" << endl;
- }
- bool playAgain { false };
- while (true) {
- cout << "Do you wanna play again? (y/n): ";
- char yesNo;
- cin >> yesNo;
- if (cin.fail()) {
- cin.clear();
- cin.ignore(32676, '\n');
- continue;
- }
- if (yesNo == 'y' || yesNo == 'n') {
- playAgain = yesNo == 'y';
- break;
- }
- }
- cout << endl;
- if (playAgain) {
- continue;
- }
- else {
- break;
- }
- }
- return 0;
- }
- Result playABlackjack(std::array<Card, 52> &deck)
- {
- using namespace std;
- Card *cardPtr = &deck[0];
- int dealerScore { 0 };
- int playerScore { 0 };
- cout << "Let's play a Blackjack.\n";
- dealerScore += getCardValue(*cardPtr);
- playerScore += getCardValue(*(++cardPtr));
- countPlayerScore(&playerScore, *(++cardPtr));
- printScore(playerScore, dealerScore);
- while (true) {
- cout << "Enter 'hit' or 'stand': ";
- string hitOrStand;
- cin >> hitOrStand;
- if (cin.fail()) {
- cin.clear();
- cin.ignore(32676, '\n');
- continue;
- }
- if (hitOrStand == "hit") {
- countPlayerScore(&playerScore, *(++cardPtr));
- cout << "Player score: " << playerScore << endl;
- if (playerScore > 21) {
- return Result::PLAYER_LOSE;
- }
- }
- if (hitOrStand == "stand") {
- break;
- }
- }
- if (playerScore > 21) {
- printScore(playerScore, dealerScore);
- return Result::PLAYER_LOSE;
- }
- while (true) {
- if (dealerScore >= 17) {
- break;
- }
- dealerScore += getCardValue(*(++cardPtr));
- }
- if (dealerScore > 21) {
- printScore(playerScore, dealerScore);
- return Result::PLAYER_WINS;
- }
- else if (playerScore > dealerScore) {
- printScore(playerScore, dealerScore);
- return Result::PLAYER_WINS;
- }
- else if (playerScore < dealerScore) {
- printScore(playerScore, dealerScore);
- return Result::PLAYER_LOSE;
- }
- else {
- printScore(playerScore, dealerScore);
- return Result::NO_ONE_WINS;
- }
- }
- void countPlayerScore(int *playerScore, Card &card)
- {
- int cardValue = getCardValue(card);
- if (cardValue == 11 && *playerScore >= 11) {
- *playerScore += 1;
- }
- else {
- *playerScore += cardValue;
- }
- }
- void printScore(int playerScore, int dealerScore)
- {
- std::cout << "\nDealer score: " << dealerScore << "\nPlayer score: " << playerScore << "\n\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement