Java小游戏第三弹:斗地主

斗地主:是一种在中国流行的纸牌游戏。游戏最少由3个玩家进行,用一副54张牌(连鬼牌),其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜。该扑克游戏最初流行于中国湖北武汉市汉阳区,现已逐渐在全球各地流行。

在启动游戏房间的时候,应该提前准备好54张牌,完成洗牌、发牌、牌排序、逻辑。利用集合知识完成这部分功能。 

import java.util.*;
 
public class GameDemo {
    /**
       1,定义一个静态的集合存储54张牌对象
     */
    public static List<Card> allCards = new ArrayList<>();
 
    /**
       2,做牌:定义静态代码块初始化牌数据
     */
    static {
        // 3,定义点数:个数确定,类型确定,使用数组
        String[] sizes = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        // 4,定义花色:个数确定,类型确定,使用数组
        String[] colors = {"♠","♥","♣","♦"};
        // 5,组合点数和花色
        int index = 0; //记录牌的大小
        for (String size : sizes) {
            index++;
            for (String color : colors) {
                // 6,封装成一个牌对象。
                Card c = new Card(size,color,index);
                // 7,存入到集合容器中
                allCards.add(c);
            }
        }
        // 8,大小王存入到集合对象中"🃏","👲"
        Card c1 = new Card("","🃏",++index);
        Card c2 = new Card("","👲",++index);
        Collections.addAll(allCards,c1,c2);
        System.out.println("新牌:" + allCards);
    }
 
    public static void main(String[] args) {
        // 9,洗牌
        Collections.shuffle(allCards);
        System.out.println("洗牌后:" + allCards);
 
        // 10, 发牌 (定义三个玩家,每个玩家的牌也是一个集合容器)
        List<Card> linhuchong = new ArrayList<>();
        List<Card> jiumozhi = new ArrayList<>();
        List<Card> renyingying = new ArrayList<>();
 
        // 11,开始发牌(从牌集合中发出51张牌给三个玩家,剩余3张作为底牌)
 
        for (int i = 0; i < allCards.size(); i++) {
            // 先拿到当前牌对象
            Card c = allCards.get(i);
            if (i % 3 == 0){
                // 请阿冲接牌
                linhuchong.add(c);
            }else if (i % 3 == 1){
                // 请阿鸠接牌
                jiumozhi.add(c);
            }else if (i % 3 == 2){
                // 请盈盈接牌
                renyingying.add(c);
            }
        }
 
        // 12,拿到最后三张底牌(把最后三张牌截取成一个子集合)
        List<Card> lastThreeCards = allCards.subList(allCards.size() - 3,allCards.size());
 
        // 13,给玩家的牌排序(从大到小  可以自己先试试怎么实现)
        sortCards(linhuchong);
        sortCards(jiumozhi);
        sortCards(renyingying);
 
        // 14,输出玩家的牌
        System.out.println("阿冲:" + linhuchong);
        System.out.println("阿鸠:" + jiumozhi);
        System.out.println("盈盈:" + renyingying);
        System.out.println("三张底牌:" + lastThreeCards);
    }
 
    /**
       给牌排序
     * @param cards
     */
    private static void sortCards(List<Card> cards) {
        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                return o1.getIndex() - o2.getIndex();
            }
        });
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值