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

📄 idiotsdelight.java

📁 java版的数据结构的完全代码 免费提供了 学习数据结构的请下载
💻 JAVA
字号:
// Introduced in Chapter 4import java.util.Scanner;/** The solitaire card game Idiot's Delight. */public class IdiotsDelight {  /** For reading from the console. */  public static final Scanner INPUT = new Scanner(System.in);    /** The four stacks of Cards. */  private Stack<Card>[] stacks;  /** The Deck of Cards. */  private Deck deck;  /** Create and shuffle the Deck.  Deal one Card to each Stack. */  public IdiotsDelight() {    deck = new Deck();    deck.shuffle();    stacks = new Stack[4]; // This causes a compiler warning    for (int i = 0; i < 4; i++) {      stacks[i] = new ArrayStack<Card>();    }    try {      deal();    } catch (IllegalMoveException e) {      e.printStackTrace();      System.exit(1);    }  }  /**   * Deal one Card from the Deck onto each Stack.   * @throws IllegalMoveException if the Deck is empty.   */  public void deal() throws IllegalMoveException {    if (deck.isEmpty()) {      throw new IllegalMoveException();    }    for (Stack<Card> s : stacks) {      s.push(deck.deal());    }  }    /** Play the game. */  public void play() {    while (true) {      try {        // Print game state        System.out.println("\n" + this);        // Check for victory        boolean done = true;        for (Stack<Card> s : stacks) {          if (!(s.isEmpty())) {            done = false;            break;          }        }        if (done) {          System.out.println("You win!");          return;        }        // Get command        System.out.print("Your command (pair, suit, deal, or quit)? ");        String command = INPUT.nextLine();        // Handle command        if (command.equals("pair")) {          removePair();        } else if (command.equals("suit")) {          removeLowCard();        } else if (command.equals("deal")) {          deal();        } else {          return;        }      } catch (IllegalMoveException e) {        System.out.println("I'm sorry, that's not a legal move.");      }    }  }  /**   * Remove the lower of two Cards of the same suit, as specified by   * the user.   * @throws IllegalMoveException if the low card is not of the same   * suit as, and of lower rank than, the high card.   */  public void removeLowCard() throws IllegalMoveException {    System.out.print("Location (1-4) of low card? ");    int i = INPUT.nextInt();    System.out.print("Location (1-4) of high card? ");    int j = INPUT.nextInt();    INPUT.nextLine();         // To clear out input    Card lowCard = stacks[i - 1].peek();    Card highCard = stacks[j - 1].peek();    if ((lowCard.getSuit() != highCard.getSuit())        || ( lowCard.getRank() > highCard.getRank())) {      throw new IllegalMoveException();    }    stacks[i - 1].pop();  }  /**   * Remove two Cards of the same rank, as specified by the user.   * @throws IllegalMoveException if the cards are not of the same   * rank.   */  public void removePair() throws IllegalMoveException {    System.out.print("Location (1-4) of first card? ");    int i = INPUT.nextInt();    System.out.print("Location (1-4) of second card? ");    int j = INPUT.nextInt();    INPUT.nextLine();         // To clear out input    Card card1 = stacks[i - 1].peek();    Card card2 = stacks[j - 1].peek();    if (!(card1.equals(card2))) {      throw new IllegalMoveException();    }    stacks[i - 1].pop();    stacks[j - 1].pop();  }  public String toString() {    String result = "";    for (int i = 0; i < 4; i++) {      if (stacks[i].isEmpty()) {        result += "-- ";      } else {        result += stacks[i].peek() + " ";      }    }    return result + "\n" + deck.size() + " cards left in the deck";  }    /** Create and play the game. */  public static void main(String[] args) {    System.out.println("Welcome to Idiot's Delight.");    IdiotsDelight game = new IdiotsDelight();    game.play();  }  }

⌨️ 快捷键说明

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