⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blackjack.java

📁 JAVA 2入门经典 练习答案
💻 JAVA
字号:
// Chapter 14 Exercise 2
// Operates a blackjack game - no splits
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Blackjack {		
	public static void main(String[] args)
	{			
    System.out.println("Dealer stands on 17. Blackjack pays double.\nLet's play Blackjack!\n");

    while(true)
    {
      if(deck.markerCardFound())
      {
        System.out.println("New deck!");
        deck = new BlackjackDeck();
      }

      System.out.print("    Place your bet($1 minimum - whole dollars only) : $");		  

      stake = getStake();
      
      playerHand = deck.dealBlackjackHand();                // Deal the player's hand
      dealerHand = deck.dealBlackjackHand();                // Deal the dealer's hand
		  System.out.println("You were dealt: " + playerHand);
		  System.out.println("Dealer was dealt: " + dealerHand);

      if(playerPlay())
        dealerPlay();   // Player has a good hand so dealer must play

      System.out.print("\n\nAnother game(Y orN)? :");
      if(!yes())
       break;
    }

    // End of game
    System.out.println("\nYou "+ (playerCash<0 ? "lost" : "won") + " a total of $"+ Math.abs(playerCash));
	}

  // Play for the player. Returns false if the player hand is busted
  // and true otherwise
	private static boolean playerPlay()
	{
		System.out.println("\nYour hand is: " + playerHand);
	  if(playerHand.isBlackjack())
	  {
      System.out.println("You have blackjack!");
      return true;
	  }

    while(true) {
      System.out.print("Another card(Y or N)? : ");        
      if(yes())
      {
        System.out.println("Your hand is now: " + deck.dealCard(playerHand));
    
        if(playerHand.isBust())
        {
          System.out.println("Bust! You lose!");
          playerCash -= stake;
          return false;
        }
      }
      else
        return true;        
    }
	}

  // Play for the dealer
	private static void dealerPlay() {
    // Check for dealer blackjack
    // If so, the player gets the stake back only if they have blackjack
    System.out.println("\nDealer hand is: " + dealerHand);
    if(dealerHand.isBlackjack()) {
      if(playerHand.isBlackjack()) {
        System.out.println("Dealer has blackjack! It's a push!");
      } else {
        System.out.println("Dealer has blackjack! You lose!");
        playerCash -= stake;
      }
      return;
    }

    // No dealer blackjack so check for player blackjack
    if(playerHand.isBlackjack()) {
      System.out.println("You win! Twice the stake for blackjack!");
      playerCash += 2*stake;
      return;
    }

    int playerHandValue = playerHand.value();
    System.out.println("Dealer: "+dealerHand.value()+" Player: "+playerHandValue); //******** 
    // No dealer or player blackjack. Dealer must draw cards until hand
    // is 17 or above.
    while(dealerHand.value() < 17) {
      if(deck.dealCard(dealerHand).isBust()) {
        System.out.println("Dealer has: " + dealerHand + "\n Busted! You win!");
        playerCash += stake;
        return;
      }
      System.out.println("Dealer hand is: " + dealerHand);
    System.out.println("Dealer: "+dealerHand.value()+" Player: "+playerHandValue); //******** 
    }

    // Dealer has not busted so figure out who won
    int dealerHandValue = dealerHand.value();   // Get the last dealer hand value
    if(dealerHandValue == playerHandValue) {
    System.out.println("Dealer: "+dealerHand.value()+" Player: "+playerHandValue); //******** 
      System.out.println("\nIt's a push. You get your stake back.");
    }
    else if(dealerHandValue > playerHandValue) {
    System.out.println("Dealer: "+dealerHand.value()+" Player: "+playerHandValue); //******** 
      System.out.println("\nYou lose!");
      playerCash -= stake;
    } else {
      System.out.println("\nYou win!");
      playerCash += stake;
    }
    return;
  }

  private static int getStake() {
    int stake = 0;
    while(true) {
      System.out.print("    Place your bet($1 minimum - whole dollars only) : $");
      try {      
        stake = Integer.parseInt(in.readLine().trim());
        return stake;
      }catch(NumberFormatException e) {
        System.out.println("Invalid input. Try again.");
      } catch(IOException e){
          System.out.println("Error reading for the keyboard." + e.getMessage());
      }
    }
  }

  private static boolean yes() {
    String str = null;
    while(true) {
      try {
        str = in.readLine().trim();
      } catch(IOException e) {
          System.out.println("Error reading for the keyboard." + e.getMessage());
      }

      if(str.equalsIgnoreCase("Y"))
        return true;
      else if(str.equalsIgnoreCase("N"))
        break;
      else
        System.out.print("Invalid input. Try again. Enter Y or N: ");
    }
    return false;
  }
          
  private static BufferedReader in = new BufferedReader(
                        new InputStreamReader(System.in));      // Keyboard input
  private static int stake = 0;                                 // Player's current stake in dollars
  private static int playerCash = 0;                            // Player's winnings(or losses!)

  private static BlackjackDeck deck = new BlackjackDeck();      // The card deck for the game
  private static BlackjackHand playerHand;                      // The player's hand
  private static BlackjackHand dealerHand;                      // The dealer's hand

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -