斗地主发牌

斗地主发牌

普遍看见于微信小程序上面各种各样的斗地主,我这里展示无序发牌与未排序的三个玩家的牌


/**
 * 斗地主发牌
 * 按照斗地主的规则,完成洗牌发牌的动作。
 * 具体规则:
 * 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
 */

代码

我们在静态时准备一个牌盒

 //准备牌盒
    static ArrayList<String> list=new ArrayList<>();

然后准备54张牌,将其放入盒中,这里牌前面的小符号可以在网上找自己喜欢的或者直接输入法自带,这里主要就是牌的花色与牌的号数相匹配,变成四个红桃,黑桃,方块,爱心

static {
        String[] colorArr={"♠","♥","♣","♦"};
        String[] numberArr={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for(String number:numberArr) {
            for (String color : colorArr) {
                list.add(color + number);
            }
        }
        list.add("joker");
        list.add("JOKER");

    }

然后进行洗牌和发牌

 public static void main(String[] args) {
        //洗牌
        System.out.println("未洗牌:"+list);
        Collections.shuffle(list);
        System.out.println("洗牌后:"+list);
       ArrayList<String> DiPai=new ArrayList<>();
       ArrayList<String> AA=new ArrayList<>();
        ArrayList<String> BB=new ArrayList<>();
       ArrayList<String> CC=new ArrayList<>();
        for (int i = 0; i <list.size() ; i++) {
            String poker=list.get(i);
            if(i <= 2){
                DiPai.add(poker);
                continue;
            }
            if(i % 3 == 0){
                AA.add(poker);
            }else if(i % 3 == 1){
                BB.add(poker);
            }else{
                CC.add(poker);
            }
        }
        System.out.println("底牌为:"+ DiPai);
        System.out.println("石原里美:"+AA);
        System.out.println("长泽雅美:"+BB);
        System.out.println("桥本环奈:"+CC);

    }

在这里想象准备四个盒子(底牌盒子和分别三个玩家盒子),随机三张给底牌,剩下的牌按照按照51的三种分法分给三个不同玩家,这样也保证了三个不同玩家得到的牌是公正的

结果展示

未洗牌:[♠3, ♥3, ♣3, ♦3, ♠4, ♥4, ♣4, ♦4, ♠5, ♥5, ♣5, ♦5, ♠6, ♥6, ♣6, ♦6, ♠7, ♥7, ♣7, ♦7, ♠8, ♥8, ♣8, ♦8, ♠9, ♥9, ♣9, ♦9, ♠10, ♥10, ♣10, ♦10, ♠J, ♥J, ♣J, ♦J, ♠Q, ♥Q, ♣Q, ♦Q, ♠K, ♥K, ♣K, ♦K, ♠A, ♥A, ♣A, ♦A, ♠2, ♥2, ♣2, ♦2, joker, JOKER]
洗牌后:[♣10, ♣A, JOKER, ♥5, ♠J, ♠10, ♦5, ♥4, ♣9, ♥Q, ♦A, ♦9, ♠5, ♦6, ♠2, ♥3, ♦8, ♥A, ♥2, ♠6, ♥8, ♥K, ♦4, ♦Q, ♠4, ♣3, ♦K, ♥10, ♥9, ♣6, ♠K, ♣8, ♦7, ♠A, ♣K, ♦J, joker, ♠8, ♦2, ♠9, ♥J, ♥7, ♣7, ♣J, ♠Q, ♣5, ♣4, ♦3, ♥6, ♣2, ♠7, ♠3, ♦10, ♣Q]
底牌为:[JOKER, ♣10, ♣A]
石原里美:[joker, ♠3, ♠4, ♠5, ♠9, ♠A, ♠K, ♣5, ♣7, ♥10, ♥2, ♥3, ♥5, ♥6, ♥K, ♥Q, ♦5]
长泽雅美:[♠6, ♠8, ♠J, ♣2, ♣3, ♣4, ♣8, ♣J, ♣K, ♥4, ♥9, ♥J, ♦10, ♦4, ♦6, ♦8, ♦A]
桥本环奈:[♠10, ♠2, ♠7, ♠Q, ♣6, ♣9, ♣Q, ♥7, ♥8, ♥A, ♦2, ♦3, ♦7, ♦9, ♦J, ♦K, ♦Q]

如果嫌弃这是使用ArrayList集合是实现的无序发牌,

可以去尝试一下hashmap,ArrayList,TreeSet集合实现的有序发牌

public class test07Collections {
    //准备牌盒
    static HashMap<Integer,String> hashmap=new HashMap<Integer,String>();
    static  ArrayList<Integer> list=new ArrayList<>();
    //准备牌 4*13+2=54
    static {
        int index=0;
        String[] colorArr={"♠","♥","♣","♦"};
        String[] numberArr={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for(String number:numberArr) {
            for (String color : colorArr) {
                String poker=color+number;
                hashmap.put(index,poker);//将每张牌对应的编号存储在hashmap集合的键中
                list.add(index);//将每张牌的编号同样存储在arraylist集合中
                index++;//每存储一张牌,编号加1

            }
        }
        hashmap.put(index,"JOKER");
        list.add(index);
        index++;//编号加1
        hashmap.put(index,"joker");
        list.add(index);
    }
 public static void main(String[] args) {
        //洗牌
        Collections.shuffle(list);
        TreeSet<Integer> AA = new TreeSet<Integer>();//玩家1
        TreeSet<Integer> BB = new TreeSet<Integer>();//玩家2
        TreeSet<Integer> CC = new TreeSet<Integer>();//玩家3
        TreeSet<Integer> DiPai = new TreeSet<Integer>();//底牌
        for (int i = 0; i < list.size(); i++) {
            if (i <= 2) {
                DiPai.add(list.get(i));
                continue;
            }
            if (i % 3 == 0) {
                AA.add(list.get(i));
            } else if (i % 3 == 1) {
                BB.add(list.get(i));
            } else {
                CC.add(list.get(i));
            }
        }

 总结

斗地主发牌java有很多写法,就看你这样简单明了的写出一个好的程序,我这个都有点繁琐,感觉不怎么好看,希望我这个对您写斗地主发牌有点参照

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值