Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C++ only, I know its been answered but i need simpler code! Assignment: Create a

ID: 3917033 • Letter: C

Question

C++ only, I know its been answered but i need simpler code!

Assignment: Create a Blackjack (21) game. Your version of the game will imagine only a SINGLE suit of cards, so 13 unique cards, {2,3,4,5,6,7,8,9,10,J,Q,K,A}. Upon starting, you will be given two cards from the set, non-repeating. Your program MUST then tell you the odds of receiving a beneficial card (that would put your value at 21 or less), and the odds of receiving a detrimental card (that would put your value over 21). Recall that the J, Q, and K cards are worth ‘10’ points, the A card can be worth either ‘1’ or ‘11’ points, and the other cards are worth their numerical values. For this assignment you may simplify it by choosing to have the Ace worth only ONE of the two values rather than both.

FOR YOUR ASSIGNMENT: Provide two screenshots, one in which the game suggests it’s a good idea to get an extra card and the result, and one in which the game suggests it’s a bad idea to get an extra card, and the result of taking that extra card.

Explanation / Answer

PROGRAM IN C++:

#include <iostream>
#include <random>
#include <vector>
#include <time.h>
using namespace std;

int DrawCard(); //Draws a card for a player
int GameWin(vector<int> playerCards, vector<int> dealerCards); //Checks to see if a game is won
bool DealerHit(vector<int> dealerCards); //Checks the rules to see if the dealer will hit
bool TwentyOne(vector<int> cards); //Checks to see if a player has 21
bool Bust(vector<int> cards); //Checks to see if a player has busted
void PrintGame(vector<int> playerCards, vector<int> dealerCards); //Prints the regular game board
void PrintFull(vector<int> playerCards, vector<int> dealerCards); //Prints the game board, showing the dealer's cards
void Probability(vector<int> playerCards, vector<int> dealerCards, int runs); //Runs the Probability simulation

int main()
{
   srand(time(NULL)); //seed the random generator
   bool quit = false;
   cout << "Welcome to David Tiscareno's Blackjack Game!" << endl;
   while (!quit) //Start the game loop
   {
       int play;
       //Ask the player if they want to play
       cout << "Would you like to play a game? (1 for Yes, 0 for No): ";
       cin >> play;
       if (play == 1) //Play the game
       {
           vector<int> playerCards; //The player's cards
           vector<int> dealerCards; //The dealer's cards

           //Deal out the opening hands
           dealerCards.push_back(DrawCard());
           dealerCards.push_back(DrawCard());
           playerCards.push_back(DrawCard());
           playerCards.push_back(DrawCard());

           bool gameOver = false;
           cout << endl << endl << "Initial Deal:" << endl;
           while (!gameOver) //As long as the game hasn't ended
           {
               char hitStand;
               PrintGame(playerCards, dealerCards); //Print the game board
               if (Bust(playerCards)) //If you have busted, game over
               {
                   cout << endl << endl << "I'm sorry. You busted and lost the game." << endl << endl;
                   gameOver = true;
               }
               else if (TwentyOne(playerCards)) //If you have 21, automatically stand
               {
                   //Show the entire board
                   cout << endl << endl << "The dealer shows his hand . . ." << endl << endl;
                   PrintFull(playerCards, dealerCards);
                   //Check to see if the dealer will hit
                   bool hit = DealerHit(dealerCards);
                   while (hit == true) //The dealer keeps hitting as long as the rules allow
                   {
                       if (playerCards.size() != 2) //If the player has a blackjack, the game ends without the dealer hitting
                       {
                           cout << endl << endl << "The dealer hits . . ." << endl << endl;
                           dealerCards.push_back(DrawCard());
                           hit = DealerHit(dealerCards);
                           PrintFull(playerCards, dealerCards);
                       }
                       else
                           hit = false;
                   }
                   if (TwentyOne(dealerCards)) //If the dealer hits 21 . . .
                   {
                       if (playerCards.size() == 2 && dealerCards.size() == 2) //If both have blackjack
                           cout << endl << endl << "You both have blackjack. This is a push (tie)." << endl << endl;
                       else if (playerCards.size() == 2 && dealerCards.size() != 2) //If only the player has blackjack
                           cout << endl << endl << "You have blackjack! Congratulations! You win!" << endl << endl;
                       else if (playerCards.size() != 2 && dealerCards.size() == 2) //If only the dealer has blackjack
                           cout << endl << endl << "I'm sorry. The dealer has blackjack and you lost the game." << endl << endl;
                       else //If neither has blackjack
                           cout << endl << endl << "You both have the same total. This is a push (tie)." << endl << endl;
                       gameOver = true;
                   }
                   else
                   {
                       //If you have blackjack and the dealer does not even have 21 . . .
                       if (playerCards.size() == 2)
                           cout << endl << endl << "You have blackjack! Congratulations! You win!" << endl << endl;
                       else
                       {
                           if (Bust(dealerCards)) //If the dealer busts . . .
                               cout << endl << endl << "The dealer busts . . . ";
                           else //Otherwise
                               cout << endl << endl << "The dealer stands . . . ";
                           cout << "Congratulations! You win!" << endl << endl;
                       }
                       gameOver = true;
                   }
               }
               else
               {
                   //Run the simulation
                   Probability(playerCards, dealerCards, 1000);

                   //Ask the player what he wants to do
                   cout << endl << endl << "What do you want to do? (H/S) ";
                   cin >> hitStand;
                   if (hitStand == 'H' || hitStand == 'h') //The player hits
                   {
                       cout << endl << "The player hits . . ." << endl;
                       playerCards.push_back(DrawCard());
                   }
                   else if (hitStand == 'S' || hitStand == 's') //The player stands
                   {
                       //Show the entire board
                       cout << endl << "The player stands and the dealer shows his hand . . ." << endl;
                       PrintFull(playerCards, dealerCards);
                       //Check to see if the dealer will hit
                       bool hit = DealerHit(dealerCards);
                       while (hit == true) //The dealer keeps hitting as long as the rules allow
                       {
                           cout << endl << endl << "The dealer hits . . ." << endl;
                           dealerCards.push_back(DrawCard());
                           hit = DealerHit(dealerCards);
                           PrintFull(playerCards, dealerCards);
                       }
                       if (TwentyOne(dealerCards)) //If the dealer hits 21 . . .
                       {
                           if (dealerCards.size() == 2) //If only the dealer has blackjack
                               cout << endl << endl << "I'm sorry. The dealer has blackjack and you lost the game." << endl << endl;
                           else //Otherwise
                               cout << endl << endl << "I'm sorry. The dealer has hit 21 and you lost the game." << endl << endl;
                           gameOver = true;
                       }
                       else
                       {
                           if (Bust(dealerCards)) //If the dealer busts
                               cout << endl << endl << "The dealer busts . . . Congratulations! You win!" << endl << endl;
                           else
                           {
                               cout << endl << endl << "The dealer stands . . . ";
                               //Check to see who won the game
                               int result = GameWin(playerCards, dealerCards);
                               if (result == 1)
                                   cout << "Congratulations! You win!" << endl << endl;
                               else if (result == 0)
                                   cout << "I'm sorry. You lost the game." << endl << endl;
                               else
                                   cout << "You both have the same total. This is a push (tie)." << endl << endl;
                           }
                           gameOver = true;
                       }
                   }
                   else
                       cout << endl << "Please specify H or S." << endl;
               }
           }
       }
       else if (play == 0) //Quit
           quit = true;
       else //Try again
           cout << endl << "I'm sorry, you must respond with "1" or "0"." << endl;
   }
}

//DrawCard:
//Draws a card for a player
int DrawCard()
{
   int cardNum;
   cardNum = (rand() % 13) + 1;
   return cardNum;
}

//GameWin
//Checks to see if a game is won
//Returns 1 if player wins, 0 if player lost, and -1 if there is a tie
int GameWin(vector<int> playerCards, vector<int> dealerCards)
{
   int playerSum = 0;
   int dealerSum = 0;
   //Add player cards together
   for (int i = 0; i < playerCards.size(); i++)
   {
       playerSum += playerCards[i];
       //Check for Face Cards
       if (playerCards[i] == 11)
           playerSum -= 1;
       else if (playerCards[i] == 12)
           playerSum -= 2;
       else if (playerCards[i] == 13)
           playerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < playerCards.size(); i++)
   {
       if (playerCards[i] == 1 && playerSum <= 11)
           playerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   //Add dealer cards together
   for (int i = 0; i < dealerCards.size(); i++)
   {
       dealerSum += dealerCards[i];
       //Check for Face Cards
       if (dealerCards[i] == 11)
           dealerSum -= 1;
       else if (dealerCards[i] == 12)
           dealerSum -= 2;
       else if (dealerCards[i] == 13)
           dealerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < dealerCards.size(); i++)
   {
       if (dealerCards[i] == 1 && dealerSum <= 11)
           dealerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   if (playerSum > dealerSum)
       return 1; //Win
   else if (dealerSum > playerSum)
       return 0; //Lose
   else
       return -1; //Tie
}

//DealerHit
//Check to see if the dealer would hit according to the rules
bool DealerHit(vector<int> dealerCards)
{
   int dealerSum = 0;
   //Add dealer cards together
   for (int i = 0; i < dealerCards.size(); i++)
   {
       dealerSum += dealerCards[i];
       //Check for Face Cards
       if (dealerCards[i] == 11)
           dealerSum -= 1;
       else if (dealerCards[i] == 12)
           dealerSum -= 2;
       else if (dealerCards[i] == 13)
           dealerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < dealerCards.size(); i++)
   {
       if (dealerCards[i] == 1 && dealerSum <= 11)
           dealerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   //Stop hitting at 17
   if (dealerSum > 16)
       return false;
   else
       return true;
}

//TwentyOne
//Checks to see if a player has 21
bool TwentyOne(vector<int> cards)
{
   int sum = 0;
   //Add cards together
   for (int i = 0; i < cards.size(); i++)
   {
       sum += cards[i];
       //Check for Face Cards
       if (cards[i] == 11)
           sum -= 1;
       else if (cards[i] == 12)
           sum -= 2;
       else if (cards[i] == 13)
           sum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < cards.size(); i++)
   {
       if (cards[i] == 1 && sum <= 11)
           sum += 10; //Add the extra ten from an ace, if it is helpful
   }
   //Return whether or not it equals 21
   if (sum == 21)
       return true;
   else
       return false;
}

//Bust
//Checks to see if a player has busted
bool Bust(vector<int> cards)
{
   int sum = 0;
   //Add cards together
   for (int i = 0; i < cards.size(); i++)
   {
       sum += cards[i];
       //Check for Face Cards
       if (cards[i] == 11)
           sum -= 1;
       else if (cards[i] == 12)
           sum -= 2;
       else if (cards[i] == 13)
           sum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < cards.size(); i++)
   {
       if (cards[i] == 1 && sum <= 11)
           sum += 10; //Add the extra ten from an ace, if it is helpful
   }
   //Return whether or not you bust
   if (sum > 21)
       return true;
   else
       return false;
}

//PrintGame
//Prints the regular game board
void PrintGame(vector<int> playerCards, vector<int> dealerCards)
{
   cout << "Dealer's Cards: (total #) # ";
   for (int i = 1; i < dealerCards.size(); i++)
   {
       //Replace numbers with the proper letters
       if (dealerCards[i] == 1)
           cout << "A ";
       else if (dealerCards[i] == 11)
           cout << "J ";
       else if (dealerCards[i] == 12)
           cout << "Q ";
       else if (dealerCards[i] == 13)
           cout << "K ";
       else //Or print the number
           cout << dealerCards[i] << " ";
   }
   int playerSum = 0;
   //Add player cards together
   for (int i = 0; i < playerCards.size(); i++)
   {
       playerSum += playerCards[i];
       //Check for Face Cards
       if (playerCards[i] == 11)
           playerSum -= 1;
       else if (playerCards[i] == 12)
           playerSum -= 2;
       else if (playerCards[i] == 13)
           playerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < playerCards.size(); i++)
   {
       if (playerCards[i] == 1 && playerSum <= 11)
           playerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   cout << endl << endl << "Player's Cards: (total " << playerSum << ") ";
   for (int i = 0; i < playerCards.size(); i++)
   {
       //Replace numbers with the proper letters
       if (playerCards[i] == 1)
           cout << "A ";
       else if (playerCards[i] == 11)
           cout << "J ";
       else if (playerCards[i] == 12)
           cout << "Q ";
       else if (playerCards[i] == 13)
           cout << "K ";
       else //Or print the number
           cout << playerCards[i] << " ";
   }
}

//PrintFull
//Prints the game board, showing the dealer's cards
void PrintFull(vector<int> playerCards, vector<int> dealerCards)
{
   int dealerSum = 0;
   //Add dealer cards together
   for (int i = 0; i < dealerCards.size(); i++)
   {
       dealerSum += dealerCards[i];
       //Check for Face Cards
       if (dealerCards[i] == 11)
           dealerSum -= 1;
       else if (dealerCards[i] == 12)
           dealerSum -= 2;
       else if (dealerCards[i] == 13)
           dealerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < dealerCards.size(); i++)
   {
       if (dealerCards[i] == 1 && dealerSum <= 11)
           dealerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   cout << "Dealer's Cards: (total " << dealerSum << ") ";
   for (int i = 0; i < dealerCards.size(); i++)
   {
       //Replace numbers with the proper letters
       if (dealerCards[i] == 1)
           cout << "A ";
       else if (dealerCards[i] == 11)
           cout << "J ";
       else if (dealerCards[i] == 12)
           cout << "Q ";
       else if (dealerCards[i] == 13)
           cout << "K ";
       else //Or print the number
           cout << dealerCards[i] << " ";
   }
   int playerSum = 0;
   //Add player cards together
   for (int i = 0; i < playerCards.size(); i++)
   {
       playerSum += playerCards[i];
       //Check for Face Cards
       if (playerCards[i] == 11)
           playerSum -= 1;
       else if (playerCards[i] == 12)
           playerSum -= 2;
       else if (playerCards[i] == 13)
           playerSum -= 3;
   }
   //Check for Aces
   for (int i = 0; i < playerCards.size(); i++)
   {
       if (playerCards[i] == 1 && playerSum <= 11)
           playerSum += 10; //Add the extra ten from an ace, if it is helpful
   }
   cout << endl << endl << "Player's Cards: (total " << playerSum << ") ";
   for (int i = 0; i < playerCards.size(); i++)
   {
       //Replace numbers with the proper letters
       if (playerCards[i] == 1)
           cout << "A ";
       else if (playerCards[i] == 11)
           cout << "J ";
       else if (playerCards[i] == 12)
           cout << "Q ";
       else if (playerCards[i] == 13)
           cout << "K ";
       else //Or print the number
           cout << playerCards[i] << " ";
   }
}

//Probability
//Runs the Probability simulation
void Probability(vector<int> playerCards, vector<int> dealerCards, int runs)
{
   int hitWins = 0; //Wins if you hit
   int standWins = 0; //Wins if you stand
   int hitDraws = 0; //Draws if you hit
   int standDraws = 0; //Draws if you stand

   cout << endl << endl << "Probability Simulation running . . . " << endl
       << "Playing " << runs << " games to determine probability of win if you stand or hit . . . " << endl;

   //Hit Simulations
   for (int i = 0; i < runs; i++)
   {
       vector<int> tempDealer; //temporary dealer
       tempDealer.push_back(dealerCards[1]); //Only place the card showing into the dealer's hand
       vector<int> tempPlayer; //temporary player
       //Place the player's cards into the temporary player
       for (int j = 0; j < playerCards.size(); j++)
           tempPlayer.push_back(playerCards[j]);
       tempPlayer.push_back(DrawCard()); //Draw an extra card
       if (!Bust(tempPlayer)) //If you bust, you lose
       {
           //Otherwise, the player follows the dealer's rules about hitting
           bool hit = DealerHit(tempPlayer);
           while (hit == true)
           {
               tempPlayer.push_back(DrawCard());
               hit = DealerHit(tempPlayer);
           }
           if (!Bust(tempPlayer)) //If you bust, you lose
           {
               //Otherwise the dealer plays according to his rules
               hit = DealerHit(tempDealer);
               while (hit == true)
               {
                   tempDealer.push_back(DrawCard());
                   hit = DealerHit(tempDealer);
               }
               if (Bust(tempDealer)) //If he busts, you win
                   hitWins++;
               else //Otherwise
               {
                   //Check to see if you win
                   int win = GameWin(tempPlayer, tempDealer);
                   if (win == 1)
                       hitWins++;
                   else if (win == -1)
                       hitDraws++;
               }
           }
       }
   }
   //Stand Simulations
   for (int i = 0; i < runs; i++)
   {
       vector<int> tempDealer; //temporary dealer
       tempDealer.push_back(dealerCards[1]); //Only place the card showing into the dealer's hand
       //The dealer plays according to his rules
       bool hit = DealerHit(tempDealer);
       while (hit == true)
       {
           tempDealer.push_back(DrawCard());
           hit = DealerHit(tempDealer);
       }
       if (Bust(tempDealer)) //If he busts, you win
           standWins++;
       else //Otherwise
       {
           //Check to see if you win
           int win = GameWin(playerCards, tempDealer);
           if (win == 1)
               standWins++;
           else if (win == -1)
               standDraws++;
       }
   }

   //Output
   cout << "Probability hit resulted in " << hitWins << " wins, " << runs - (hitWins + hitDraws)
       << " losses, and " << hitDraws << " draws." << endl;
   cout << "Probability stand resulted in " << standWins << " wins, " << runs - (standWins + standDraws)
       << " losses, and " << standDraws << " draws." << endl;
   float hitWinsFloat = hitWins;
   float standWinsFloat = standWins;
   cout << "Your probability of winning if you hit is " << (hitWinsFloat / runs) * 100 << "%" << endl;
cout << "Your probability of winning if you stand is " << (standWinsFloat / runs) * 100 << "%" << endl << endl;

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote