使用ArrayList和Map模拟斗地主发牌

本文详细介绍了一种使用ArrayList和Map实现的斗地主发牌算法。通过准备花色、数字,构造一副54张牌的扑克牌,并利用洗牌算法随机分配给三名玩家及底牌,最后对玩家手中的牌进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ArrayList和Map模拟斗地主发牌

直接上代码了。。。

public class PokerPlay {
    public static void main(String[] args) {
        //准备花色
        ArrayList<String> color=new ArrayList();
        Collections.addAll(color,"♠","♥","♦","♣");
        //准备数字
        ArrayList<String> number=new ArrayList();
        Collections.addAll(number,"3","4","5","6","7","8","9","10","J",
                "Q","K","A","2");
        //定义一个map集合:将数字与每一张牌进行对应
        HashMap<Integer,String> map=new HashMap();
        int index=0;
        for (String thisNumber:number) {
            for (String thisColor:color) {
                map.put(index++,thisColor+thisNumber);
            }
        }
        //加入大小王
        map.put(index++,"小😜");
        map.put(index++,"大😜");
        //一副54张的扑克牌 ArrayList里面为0-53的数的共54张新牌
        ArrayList cards=new ArrayList();
        for (int i = 0; i <54 ; i++) {
            cards.add(i);
        }
        //洗牌可以使用 Collection.shuffle()方法打乱扑克牌顺序
        Collections.shuffle(cards);
        //接下来就是创建3位玩家牌 以及3张底牌的数组集合进行发牌
        ArrayList iPlayer1=new ArrayList();
        ArrayList iPlayer2=new ArrayList();
        ArrayList iPlayer3=new ArrayList();
        ArrayList iThreeCards=new ArrayList();
        //遍历这副洗好的牌,同时将遍历好的牌发到三个玩家和底牌中去
        //依次发54张牌
        for (int i = 0; i <cards.size(); i++) {
            //3张底池牌
            if (i>=51){
                iThreeCards.add(cards.get(i));
            }else{
                //剩下的牌分别分到3名玩家的手上,用i去模3(i%3)获取玩家1,2,3
                if (i%3==0){
                    //玩家1的牌
                    iPlayer1.add(cards.get(i));
                }else if (i%3==1){
                    //玩家2的牌
                    iPlayer2.add(cards.get(i));
                }else {
                    //玩家3的牌
                    iPlayer3.add(cards.get(i));
                }
            }
        }
        //牌已发完,接下里分别对每位玩家的牌进行从小到大排序
        Collections.sort(iPlayer1);
        Collections.sort(iPlayer2);
        Collections.sort(iPlayer3);
        Collections.sort(iThreeCards);
        //再定义4个数组集合String类型用于存储3位玩家的牌和底池牌
        ArrayList siPlayer1=new ArrayList();
        ArrayList siPlayer2=new ArrayList();
        ArrayList siPlayer3=new ArrayList();
        ArrayList siThreeCards=new ArrayList();
        for (Object thiskey : iPlayer1) {
            siPlayer1.add(map.get(thiskey));
        }
        //这里有一个坑。。。是关于for和foreach的问题
        /*for (int i = 0; i < iPlayer1.size(); i++) {
            siPlayer1.add(map.get(i));
        }*/
        for (Object thiskey : iPlayer2) {
            siPlayer2.add(map.get(thiskey));
        }
        for (Object thiskey : iPlayer3) {
            siPlayer3.add(map.get(thiskey));
        }
        for (Object thiskey : iThreeCards) {
            siThreeCards.add(map.get(thiskey));
        }
        //打印各玩家扑克牌和底池牌
        System.out.println(siPlayer1+"----"+siPlayer1.size()+"张");
        System.out.println(siPlayer2+"----"+siPlayer2.size()+"张");
        System.out.println(siPlayer3+"----"+siPlayer3.size()+"张");
        System.out.println(siThreeCards);
    }
}

结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值