用Java写21点游戏代码完整版
时间: 2024-03-13 12:22:56 浏览: 22
以下是一个简单的 Java 21 点游戏代码,可能与您的需求略有不同。该代码使用控制台作为用户界面,可在 IDE 中直接运行。
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TwentyOneGame {
private List<Card> deck;
private List<Card> playerHand;
private List<Card> dealerHand;
private int playerScore;
private int dealerScore;
private boolean isPlayerWinner;
public TwentyOneGame() {
deck = new ArrayList<>();
playerHand = new ArrayList<>();
dealerHand = new ArrayList<>();
playerScore = 0;
dealerScore = 0;
isPlayerWinner = false;
// Initialize deck with 52 cards
for (Card.Suit suit : Card.Suit.values()) {
for (Card.Rank rank : Card.Rank.values()) {
deck.add(new Card(suit, rank));
}
}
}
public void start() {
// Shuffle deck
shuffleDeck();
// Deal initial hands
dealInitialHands();
// Check if player has blackjack
if (playerScore == 21) {
System.out.println("Congratulations, you have Blackjack!");
isPlayerWinner = true;
return;
}
// Player turn
while (playerScore < 21) {
System.out.println("Your hand: " + playerHand);
System.out.println("Your score: " + playerScore);
System.out.print("Do you want to hit? (Y/N): ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
if (input.equalsIgnoreCase("Y")) {
playerHand.add(drawCard());
playerScore = getHandScore(playerHand);
} else {
break;
}
}
// Dealer turn
while (dealerScore < 17) {
dealerHand.add(drawCard());
dealerScore = getHandScore(dealerHand);
}
// Check winner
if (playerScore > 21) {
System.out.println("You busted, dealer wins!");
} else if (dealerScore > 21) {
System.out.println("Dealer busted, you win!");
isPlayerWinner = true;
} else if (playerScore == dealerScore) {
System.out.println("It's a tie!");
} else if (playerScore > dealerScore) {
System.out.println("You win!");
isPlayerWinner = true;
} else {
System.out.println("Dealer wins!");
}
}
private void shuffleDeck() {
for (int i = 0; i < deck.size(); i++) {
int randomIndex = (int) (Math.random() * deck.size());
Card temp = deck.get(i);
deck.set(i, deck.get(randomIndex));
deck.set(randomIndex, temp);
}
}
private void dealInitialHands() {
playerHand.add(drawCard());
dealerHand.add(drawCard());
playerHand.add(drawCard());
dealerHand.add(drawCard());
playerScore = getHandScore(playerHand);
dealerScore = getHandScore(dealerHand);
System.out.println("Dealer's hand: [" + dealerHand.get(0) + ", **]");
System.out.println("Your hand: " + playerHand);
System.out.println("Your score: " + playerScore);
}
private Card drawCard() {
return deck.remove(0);
}
private int getHandScore(List<Card> hand) {
int score = 0;
boolean hasAce = false;
for (Card card : hand) {
if (card.getRank() == Card.Rank.ACE) {
score += 11;
hasAce = true;
} else {
score += card.getRank().getValue();
}
}
if (score > 21 && hasAce) {
score -= 10;
}
return score;
}
private static class Card {
private final Suit suit;
private final Rank rank;
public Card(Suit suit, Rank rank) {
this.suit = suit;
this.rank = rank;
}
public Suit getSuit() {
return suit;
}
public Rank getRank() {
return rank;
}
@Override
public String toString() {
return rank + " of " + suit;
}
public enum Suit {
CLUBS,
DIAMONDS,
HEARTS,
SPADES
}
public enum Rank {
ACE(11),
TWO(2),
THREE(3),
FOUR(4),
FIVE(5),
SIX(6),
SEVEN(7),
EIGHT(8),
NINE(9),
TEN(10),
JACK(10),
QUEEN(10),
KING(10);
private final int value;
Rank(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
}
public static void main(String[] args) {
TwentyOneGame game = new TwentyOneGame();
game.start();
}
}
```
该代码包含一个 `TwentyOneGame` 类,该类用于管理游戏,并使用 `Card` 类来表示每个卡片。 `start()` 方法启动游戏,并处理游戏的逻辑。该代码还使用 `Scanner` 类从控制台获取用户输入。