Java 纸牌游戏模拟器:规则、代码和玩法
使用 Java 语言编写一个模拟纸牌游戏软件
该软件具有以下功能:
- 创建一副扑克牌(共 54 张) 包括四种花色:黑桃,红桃,梅花,方片,包括十三种点数:2-10,J,Q,K,A
- 创建两名玩家(or 多名) 玩家至少要有 ID,姓名,手牌等属性,手牌为扑克牌的集合
- 将创建好的扑克牌进行随机洗牌。
- 从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发三张牌
- 比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按照花色比较,大小由黑(4)、红(3)、梅(2)、方(1),花色大者获胜。
- 输出比较结果,显示每位玩家的手牌和最终获胜者。
- 提供重新开始游戏的选项。
代码实现如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
enum Suit {
SPADE, HEART, CLUB, DIAMOND
}
enum Rank {
TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
}
class Card {
private Suit suit;
private 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 suit + ' ' + rank;
}
}
class Player {
private int id;
private String name;
private List<Card> hand;
public Player(int id, String name) {
this.id = id;
this.name = name;
this.hand = new ArrayList<>();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public List<Card> getHand() {
return hand;
}
public void addCard(Card card) {
hand.add(card);
}
@Override
public String toString() {
return "Player{" +
"id=" + id +
", name='" + name + "'" +
", hand=" + hand +
'}';
}
}
public class CardGame {
private List<Card> deck;
private List<Player> players;
public void createDeck() {
deck = new ArrayList<>();
for (Suit suit : Suit.values()) {
for (Rank rank : Rank.values()) {
deck.add(new Card(suit, rank));
}
}
deck.add(new Card(null, null)); // add two jokers
deck.add(new Card(null, null));
}
public void shuffleDeck() {
Collections.shuffle(deck);
}
public void createPlayers(int numPlayers) {
players = new ArrayList<>();
for (int i = 1; i <= numPlayers; i++) {
players.add(new Player(i, "Player " + i));
}
}
public void dealCards(int numCards) {
for (int i = 0; i < numCards; i++) {
for (Player player : players) {
player.addCard(deck.remove(0));
}
}
}
public void play() {
createDeck();
shuffleDeck();
createPlayers(2);
dealCards(3);
System.out.println("Player 1: " + players.get(0).getHand());
System.out.println("Player 2: " + players.get(1).getHand());
Card maxCard1 = getMaxCard(players.get(0).getHand());
Card maxCard2 = getMaxCard(players.get(1).getHand());
if (compareCards(maxCard1, maxCard2) > 0) {
System.out.println("Player 1 wins!");
} else if (compareCards(maxCard1, maxCard2) < 0) {
System.out.println("Player 2 wins!");
} else {
System.out.println("Tie!");
}
}
private Card getMaxCard(List<Card> hand) {
Card maxCard = hand.get(0);
for (Card card : hand) {
if (card.getRank().ordinal() > maxCard.getRank().ordinal()) {
maxCard = card;
}
}
return maxCard;
}
private int compareCards(Card card1, Card card2) {
if (card1.getRank().ordinal() > card2.getRank().ordinal()) {
return 1;
} else if (card1.getRank().ordinal() < card2.getRank().ordinal()) {
return -1;
} else {
if (card1.getSuit() == null && card2.getSuit() == null) {
return 0;
} else if (card1.getSuit() == null) {
return -1;
} else if (card2.getSuit() == null) {
return 1;
} else {
return card1.getSuit().ordinal() - card2.getSuit().ordinal();
}
}
}
public static void main(String[] args) {
CardGame game = new CardGame();
game.play();
}
}
原文地址: https://www.cveoy.top/t/topic/oO1R 著作权归作者所有。请勿转载和采集!