Java 扑克牌游戏:规则、代码和类关系图

这是一个简单的 Java 扑克牌游戏,规则如下:

  1. 游戏使用标准的 52 张扑克牌。
  2. 玩家数量为 2 人。
  3. 每位玩家发 3 张牌。
  4. 玩家通过比较手牌中最大的牌来决定胜负。
  5. 牌的大小比较规则如下:
    • 点数:A 最大,然后是 K、Q、J、10、9、8、7、6、5、4、3、2。
    • 花色:黑桃 > 红桃 > 梅花 > 方片。
  6. 如果两位玩家最大的牌点数和花色相同,则为平局。

代码实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class CardGame {
    public static void main(String[] args) {
        // 创建一副扑克牌
        ArrayList<Card> poker = new ArrayList<>();
        String[] suits = {'黑桃', '红桃', '梅花', '方片'};
        String[] ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'};
        for (String suit : suits) {
            for (String rank : ranks) {
                poker.add(new Card(suit, rank));
            }
        }

        // 创建两名玩家
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入玩家1的ID:");
        String id1 = scanner.next();
        System.out.println("请输入玩家1的姓名:");
        String name1 = scanner.next();
        Player player1 = new Player(id1, name1);
        System.out.println("请输入玩家2的ID:");
        String id2 = scanner.next();
        System.out.println("请输入玩家2的姓名:");
        String name2 = scanner.next();
        Player player2 = new Player(id2, name2);

        // 洗牌
        Collections.shuffle(poker);

        // 发牌
        for (int i = 0; i < 3; i++) {
            player1.addCard(poker.remove(0));
            player2.addCard(poker.remove(0));
        }

        // 比较大小
        Card maxCard1 = player1.getMaxCard();
        Card maxCard2 = player2.getMaxCard();
        if (maxCard1.compareTo(maxCard2) > 0) {
            System.out.println(player1.getName() + "赢了!");
        } else if (maxCard1.compareTo(maxCard2) < 0) {
            System.out.println(player2.getName() + "赢了!");
        } else {
            if (maxCard1.getSuitValue() > maxCard2.getSuitValue()) {
                System.out.println(player1.getName() + "赢了!");
            } else if (maxCard1.getSuitValue() < maxCard2.getSuitValue()) {
                System.out.println(player2.getName() + "赢了!");
            } else {
                System.out.println("平局!");
            }
        }

        // 显示手牌
        player1.showCards();
        player2.showCards();
    }
}

class Card implements Comparable<Card> {
    private String suit; // 花色
    private String rank; // 点数

    public Card(String suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

    public String getRank() {
        return rank;
    }

    public int getSuitValue() {
        if (suit.equals("黑桃")) {
            return 4;
        } else if (suit.equals("红桃")) {
            return 3;
        } else if (suit.equals("梅花")) {
            return 2;
        } else {
            return 1;
        }
    }

    @Override
    public int compareTo(Card o) {
        if (this.rank.equals("A")) {
            return 1;
        } else if (o.getRank().equals("A")) {
            return -1;
        } else {
            return Integer.compare(getRankValue(), o.getRankValue());
        }
    }

    private int getRankValue() {
        if (rank.equals("J")) {
            return 11;
        } else if (rank.equals("Q")) {
            return 12;
        } else if (rank.equals("K")) {
            return 13;
        } else {
            return Integer.parseInt(rank);
        }
    }

    @Override
    public String toString() {
        return suit + rank;
    }
}

class Player {
    private String id; // ID
    private String name; // 姓名
    private ArrayList<Card> cards; // 手牌

    public Player(String id, String name) {
        this.id = id;
        this.name = name;
        this.cards = new ArrayList<>();
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void addCard(Card card) {
        cards.add(card);
    }

    public Card getMaxCard() {
        Card maxCard = cards.get(0);
        for (int i = 1; i < cards.size(); i++) {
            if (cards.get(i).compareTo(maxCard) > 0) {
                maxCard = cards.get(i);
            }
        }
        return maxCard;
    }

    public void showCards() {
        System.out.println(name + "的手牌:");
        for (Card card : cards) {
            System.out.print(card + " ");
        }
        System.out.println();
    }
}

类关系图

+----------------+          +-----------------+ 
|     Card       |          |     Player      | 
+----------------+          +-----------------+ 
| - suit: String |          | - id: String    | 
| - rank: String |          | - name: String  | 
+----------------+          | - cards: ArrayList<Card> | 
| + getSuit(): String       | | + addCard(card: Card): void | 
| + getRank(): String       | | + getMaxCard(): Card | 
| + getSuitValue(): int     | | + showCards(): void | 
| + compareTo(o: Card): int | + getId(): String | 
| + toString(): String      | | getName(): String | 
+----------------+          +-----------------+ 
          ^                             ^ 
          |                             | 
          |                             | 
+------------------+          +-----------------+ 
|    CardGame      |          |     Scanner     | 
+------------------+          +-----------------+ 
| - main(args: String[]): void |                | 
+------------------+          +-----------------+ 

解释:

  • Card 类表示一张扑克牌,包含花色和点数。
  • Player 类表示一名玩家,包含 ID、姓名和手牌。
  • CardGame 类是游戏的主类,负责游戏逻辑,包括创建牌堆、发牌、比较牌的大小和显示结果。

总结

本文介绍了一个简单的 Java 扑克牌游戏,包含游戏规则、代码实现和类关系图。通过这个例子,您可以学习如何使用 Java 实现一个简单的游戏,并了解面向对象编程中的类关系。

Java 扑克牌游戏:规则、代码和类关系图

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

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