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();
    }
}

类关系图:

             CardGame
              /   \
            /       \
          Card       Player
                     ^ 
                     | 
                   Card

解释:

  • CardGame 类是游戏的入口,负责创建牌、玩家、洗牌、发牌、比较大小以及显示手牌等操作。
  • Card 类代表一张牌,包含花色和点数。
  • Player 类代表一名玩家,包含ID、姓名和手牌。

代码说明:

  1. **创建一副扑克牌:**代码使用两个字符串数组 suitsranks 来表示花色和点数,然后使用嵌套循环遍历所有可能的组合,创建 Card 对象并添加到 poker 数组中。
  2. **创建两名玩家:**代码使用 Scanner 类从控制台获取玩家的ID和姓名,创建 Player 对象。
  3. **洗牌:**代码使用 Collections.shuffle() 方法随机打乱 poker 数组。
  4. **发牌:**代码使用 poker.remove(0) 方法依次从 poker 数组中移除牌,并分别添加到两个玩家的手牌中。
  5. **比较大小:**代码首先比较两名玩家手牌中的最大牌,如果最大牌相同,则比较花色,最后根据比较结果打印出获胜者。
  6. **显示手牌:**代码使用 Player.showCards() 方法显示两名玩家的手牌。

总结:

本代码示例提供了一个简单的扑克牌游戏,可以帮助初学者了解Java面向对象编程的基本概念,如类、对象、方法、属性、继承、多态等。

其他建议:

  • 可以考虑添加更多游戏功能,例如:
    • 可以添加更多玩家,
    • 可以添加更多回合,
    • 可以添加更多玩法,例如比点数、比花色等。
  • 可以使用图形界面来改善游戏体验,例如使用 Swing 或 JavaFX。
  • 可以使用单元测试来验证代码的正确性。

希望本代码示例对您有所帮助!

Java 扑克牌游戏:比大小 - 简单易懂的代码示例

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

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