使用 Java 语言编写一个模拟纸牌游戏软件

该软件具有以下功能:

  1. 创建一副扑克牌(共 54 张) 包括四种花色:黑桃,红桃,梅花,方片,包括十三种点数:2-10,J,Q,K,A
  2. 创建两名玩家(or 多名) 玩家至少要有 ID,姓名,手牌等属性,手牌为扑克牌的集合
  3. 将创建好的扑克牌进行随机洗牌。
  4. 从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发三张牌
  5. 比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按照花色比较,大小由黑(4)、红(3)、梅(2)、方(1),花色大者获胜。
  6. 输出比较结果,显示每位玩家的手牌和最终获胜者。
  7. 提供重新开始游戏的选项。

代码实现如下:

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();
    }
}
Java 纸牌游戏模拟器:规则、代码和玩法

原文地址: https://www.cveoy.top/t/topic/oO1R 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录