用Java写程序要求如下:3、抽取纸牌 从一副纸牌中任意抽取一张,并打印出抽取的是哪一张牌。一副牌有4种花色:黑桃、红桃、方块和梅花。每种花色有13张牌,共有52张牌。 功能拓展:有4个人一起打牌,随机给4个人发牌,输出4人的发牌结果。
时间: 2024-09-15 20:14:36 浏览: 55
在Java中实现从一副扑克牌中随机抽取一张并显示牌面的功能,以及扩展到四人发牌的功能,我们可以利用`java.util.Random`类和一个包含所有牌面信息的数据结构(例如数组或列表)。以下是一个简单的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
// 定义扑克牌枚举
public enum Suit {
SPADES("黑桃"),
HEARTS("红桃"),
DIAMONDS("方块"),
CLUBS("梅花");
private String name;
Suit(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 定义牌面枚举
public enum Rank {
ACE(1),
TWO(2), ..., TEN(10), JACK(11), QUEEN(12), KING(13);
private int value;
Rank(int value) {
this.value = value;
}
public int getValue() {
return value;
}
// 打印牌面方法
@Override
public String toString() {
if (this == ACE) {
return "A";
} else if (this == JACK || this == QUEEN || this == KING) {
return this.name();
} else {
return Integer.toString(value);
}
}
}
class Card {
private final Suit suit;
private final Rank rank;
public Card(Suit suit, Rank rank) {
this.suit = suit;
this.rank = rank;
}
public void print() {
System.out.println(rank + " of " + suit.getName());
}
}
public class PokerGame {
// 扑克牌数据
private static List<Card> deck = createDeck();
private static List<Card> createDeck() {
List<Card> deck = new ArrayList<>();
for (Suit suit : Suit.values()) {
for (Rank rank : Rank.values()) {
deck.add(new Card(suit, rank));
}
}
return deck;
}
// 抽取单张牌
public static void drawCard() {
Random random = new Random();
int index = random.nextInt(deck.size());
Card card = deck.get(index);
deck.remove(index); // 为了避免重复抽取,这里移除已抽走的牌
card.print();
}
// 发牌给四人
public static void dealCardsToFourPlayers(List<Integer> players) {
if (players.size() != 4) {
throw new IllegalArgumentException("Exactly 4 players are required.");
}
deck.shuffle(); // 首先洗牌
for (int i = 0; i < 52; i++) { // 发52张牌
int playerIndex = players.get(i % players.size()); // 循环发放给每位玩家
Card card = deck.remove(0);
card.print();
System.out.printf("Player %d receives: ", playerIndex);
}
}
public static void main(String[] args) {
// 示例调用
List<Integer> players = Arrays.asList(0, 1, 2, 3);
drawCard();
dealCardsToFourPlayers(players);
}
}
```
在这个例子中,我们首先创建了一个`Card`类来表示每张牌,包括花色和点数。然后定义了两个枚举:`Suit`和`Rank`分别代表花色和点数。`PokerGame`类包含抽取单张牌的方法`drawCard`和为四人发牌的方法`dealCardsToFourPlayers`。
运行此程序时,会随机抽取一张牌并打印出来,然后模拟发牌过程给四个玩家。注意`main`方法中的玩家列表`players`需要包含四位玩家的ID(在这里是0-3)。
阅读全文