java实现一个简单的斗地主游戏

使用Java编写一个斗地主游戏需要一定的编程知识和技能,例如面向对象编程、集合框架、GUI等。下面是一个简单的斗地主游戏的代码示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class 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;
    }

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

public class Deck {
    private List<Card> cards;

    public Deck() {
        String[] suits = {"S", "H", "D", "C"};
        String[] ranks = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        cards = new ArrayList<>();
        for (String suit : suits) {
            for (String rank : ranks) {
                Card card = new Card(suit, rank);
                cards.add(card);
            }
        }
        Collections.shuffle(cards);
    }

    public List<Card> deal(int numCards) {
        List<Card> dealtCards = new ArrayList<>();
        for (int i = 0; i < numCards; i++) {
            Card card = cards.remove(0);
            dealtCards.add(card);
        }
        return dealtCards;
    }

    public List<Card> getCards() {
        return cards;
    }
}

public class Player {
    private String name;
    private List<Card> cards;

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

    public void addCards(List<Card> cards) {
        this.cards.addAll(cards);
    }

    public String getName() {
        return name;
    }

    public List<Card> getCards() {
        return cards;
    }

    public void sortCards() {
        Collections.sort(cards, (Card c1, Card c2) -> {
            int rank1 = getRankValue(c1.getRank());
            int rank2 = getRankValue(c2.getRank());
            if (rank1 != rank2) {
                return rank1 - rank2;
            } else {
                int suit1 = getSuitValue(c1.getSuit());
                int suit2 = getSuitValue(c2.getSuit());
                return suit1 - suit2;
            }
        });
    }

    private int getRankValue(String rank) {
        switch (rank) {
            case "3":
                return 1;
            case "4":
                return 2;
            case "5":
                return 3;
            case "6":
                return 4;
            case "7":
                return 5;
            case "8":
                return 6;
            case "9":
                return 7;
            case "10":
                return 8;
            case "J":
                return 9;
            case "Q":
                return 10;
            case "K":
                return 11;
            case "A":
                return 12;
            case "2":
                return 13;
            default:
                throw new IllegalArgumentException("Invalid card rank: " + rank);
        }
    }

    private int getSuitValue(String suit) {
        switch (suit) {
            case "S":
                return 4;
            case "H":
                return 3;
            case "D":
                return 2;
            case "C":
                return 1;
            default:
                throw new IllegalArgumentException("Invalid card suit: " + suit);
        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(name).append(": ");
        for (Card card : cards) {
            sb.append(card.toString()).append(" ");
        }
        return sb.toString().trim();
    }
}

public class DouDiZhu {
    private Deck deck;
    private List<Card> threeCards;
    private Player[] players;

    public DouDiZhu(String[] names) {
        this.deck = new Deck();
        this.threeCards = deck.deal(3);
        this.players = new Player[3];
        for (int i = 0; i < names.length; i++) {
            players[i] = new Player(names[i]);
        }
        List<Card> remainingCards = deck.getCards();
        for (int i = 0; i < remainingCards.size(); i++) {
            players[i % 3].addCards(Collections.singletonList(remainingCards.get(i)));
        }
    }

    public void showThreeCards() {
        System.out.println("Three cards: " + threeCards);
    }

    public void showPlayersCards() {
        for (Player player : players) {
            player.sortCards();
            System.out.println(player.toString());
        }
    }

    public static void main(String[] args) {
        DouDiZhu game = new DouDiZhu(new String[] {"Player 1", "Player 2", "Player 3"});
        game.showThreeCards();
        game.showPlayersCards();
    }
}

这个斗地主游戏的实现包括了Deck类(表示一副牌)、Card类(表示一张牌)和Player类(表示一个玩家)。程序的主类是DouDiZhu类,它负责管理游戏的过程和输出结果。在这个程序中,每个玩家会收到17张牌,剩下的三张牌作为地主牌。游戏结束后会输出所有玩家的手牌和地主牌。需要注意的是,这个程序实现的斗地主游戏比较简单,仅仅包含了最基本的发牌、抢地主等操作。如果你需要更完整的斗地主游戏,可以扩展这个程序。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

个人练习生xx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值