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

Java program to simulate BlackJack. The rules; a.There is one deck of playing ca

ID: 3708109 • Letter: J

Question

Java program to simulate BlackJack. The rules;

a.There is one deck of playing cards.

b.Cards are drawn randomly (Shuffle() method).

c.The value of a hand is computed by adding the values of the cards in the hand.

d.The value of numeric card such as five is its numerical value.

e.The value of a face card is 10.

f.Ace is either 1 or 11.

g.Ace is 11 unless it puts the total value of the hand over 21.

h.Second, third or forth Ace are all counted as 1.

i.Generate a random number between 16-21. Keep drawing as many cards (AddCard() method) as needed until the total value of the hand is equal or greater than this random number.

j.You don't need to re-shuffle the remaining crads after each drawing.

k.You should have a class Hand, in which you compute and return the value of a hand based on the above rules.

l.You should have a "public class BlackjackHand extends Hand", which notifies the users if it a Blackjack (only two cards are drawn with the total value of 21).

m. Log all drawn cards and the total value of a hand.

n.Sort the cards in the hand so that cards of the same suit are grouped togther, and witin a suit the cards are sorted by value. Cards are sorted into order of increasing value. Note that aces are considered to have the lowest value.

Explanation / Answer

public class Blackjack {

  

public static void main(String[] args) {

int money; // Amount of money the user has.

int bet; // Amount user bets on a game.

boolean userWins; // Did the user win the game?

  

TextIO.putln("Welcome to the game of blackjack.");

TextIO.putln();

  

money = 100; // User starts with $100.

while (true) {

TextIO.putln("You have " + money + " dollars.");

do {

TextIO.putln("How many dollars do you want to bet? (Enter 0 to end.)");

TextIO.put("? ");

bet = TextIO.getlnInt();

if (bet < 0 || bet > money)

TextIO.putln("Your answer must be between 0 and " + money + '.');

} while (bet < 0 || bet > money);

if (bet == 0)

break;

userWins = playBlackjack();

if (userWins)

money = money + bet;

else

money = money - bet;

TextIO.putln();

if (money == 0) {

TextIO.putln("Looks like you've are out of money!");

break;

}

}

  

TextIO.putln();

TextIO.putln("You leave with $" + money + '.');

} // end main()

static boolean playBlackjack() {

// Let the user play one game of Blackjack.

// Return true if the user wins, false if the user loses.

  

Deck deck; // A deck of cards. A new deck for each game.

BlackjackHand dealerHand; // The dealer's hand.

BlackjackHand userHand; // The user's hand.

  

deck = new Deck();

dealerHand = new BlackjackHand();

userHand = new BlackjackHand();

  

/* Shuffle the deck, then deal two cards to each player. */

  

deck.shuffle();

dealerHand.addCard( deck.dealCard() );

dealerHand.addCard( deck.dealCard() );

userHand.addCard( deck.dealCard() );

userHand.addCard( deck.dealCard() );

  

TextIO.putln();

TextIO.putln();

  

/* Check if one of the players has Blackjack (two cards totaling to 21).

The player with Blackjack wins the game. Dealer wins ties.

*/

  

if (dealerHand.getBlackjackValue() == 21) {

TextIO.putln("Dealer has the " + dealerHand.getCard(0)

+ " and the " + dealerHand.getCard(1) + ".");

TextIO.putln("User has the " + userHand.getCard(0)

+ " and the " + userHand.getCard(1) + ".");

TextIO.putln();

TextIO.putln("Dealer has Blackjack. Dealer wins.");

return false;

}

  

if (userHand.getBlackjackValue() == 21) {

TextIO.putln("Dealer has the " + dealerHand.getCard(0)

+ " and the " + dealerHand.getCard(1) + ".");

TextIO.putln("User has the " + userHand.getCard(0)

+ " and the " + userHand.getCard(1) + ".");

TextIO.putln();

TextIO.putln("You have Blackjack. You win.");

return true;

}

  

/* If neither player has Blackjack, play the game. First the user

gets a chance to draw cards (i.e., to "Hit"). The while loop ends

when the user chooses to "Stand". If the user goes over 21,

the user loses immediately.

*/

  

while (true) {

  

/* Display user's cards, and let user decide to Hit or Stand. */

  

TextIO.putln();

TextIO.putln();

TextIO.putln("Your cards are:");

for ( int i = 0; i < userHand.getCardCount(); i++ )

TextIO.putln(" " + userHand.getCard(i));

TextIO.putln("Your total is " + userHand.getBlackjackValue());

TextIO.putln();

TextIO.putln("Dealer is showing the " + dealerHand.getCard(0));

TextIO.putln();

TextIO.put("Hit (H) or Stand (S)? ");

char userAction; // User's response, 'H' or 'S'.

do {

userAction = Character.toUpperCase( TextIO.getlnChar() );

if (userAction != 'H' && userAction != 'S')

TextIO.put("Please respond H or S: ");

} while (userAction != 'H' && userAction != 'S');

  

/* If the user Hits, the user gets a card. If the user Stands,

the loop ends (and it's the dealer's turn to draw cards).

*/

  

if ( userAction == 'S' ) {

// Loop ends; user is done taking cards.

break;

}

else { // userAction is 'H'. Give the user a card.  

// If the user goes over 21, the user loses.

Card newCard = deck.dealCard();

userHand.addCard(newCard);

TextIO.putln();

TextIO.putln("User hits.");

TextIO.putln("Your card is the " + newCard);

TextIO.putln("Your total is now " + userHand.getBlackjackValue());

if (userHand.getBlackjackValue() > 21) {

TextIO.putln();

TextIO.putln("You busted by going over 21. You lose.");

TextIO.putln("Dealer's other card was the "

+ dealerHand.getCard(1));

return false;  

}

}

} // end while loop

  

/* If we get to this point, the user has Stood with 21 or less. Now, it's

the dealer's chance to draw. Dealer draws cards until the dealer's

total is > 16. If dealer goes over 21, the dealer loses.

*/

  

TextIO.putln();

TextIO.putln("User stands.");

TextIO.putln("Dealer's cards are");

TextIO.putln(" " + dealerHand.getCard(0));

TextIO.putln(" " + dealerHand.getCard(1));

while (dealerHand.getBlackjackValue() <= 16) {

Card newCard = deck.dealCard();

TextIO.putln("Dealer hits and gets the " + newCard);

dealerHand.addCard(newCard);

if (dealerHand.getBlackjackValue() > 21) {

TextIO.putln();

TextIO.putln("Dealer busted by going over 21. You win.");

return true;

}

}

TextIO.putln("Dealer's total is " + dealerHand.getBlackjackValue());

  

/* If we get to this point, both players have 21 or less. We

can determine the winner by comparing the values of their hands. */

  

TextIO.putln();

if (dealerHand.getBlackjackValue() == userHand.getBlackjackValue()) {

TextIO.putln("Dealer wins on a tie. You lose.");

return false;

}

else if (dealerHand.getBlackjackValue() > userHand.getBlackjackValue()) {

TextIO.putln("Dealer wins, " + dealerHand.getBlackjackValue()

+ " points to " + userHand.getBlackjackValue() + ".");

return false;

}

else {

TextIO.putln("You win, " + userHand.getBlackjackValue()

+ " points to " + dealerHand.getBlackjackValue() + ".");

return true;

}

  

} // end playBlackjack()

  

  

} // end class Blackjack

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