Java模拟实现斗地主功能

需要完成的功能

这里只完成创建扑克,发牌,看牌的功能,最终的实现斗地主功能还需进一步完善。
在这里插入图片描述

创建扑克

发牌的前提是有牌可发,所以我们要先创建一副牌,这里我们用的是HashMap集合来装扑克的花色以及点数;这样,我们就可以完成扑克的创建步骤。

 String[] colos = {"♥", "♠", "♦", "♣"};
        String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A","2"};
        HashMap<Integer, String> hashMappokerBox = new HashMap<>();
        int index=0;
        for (String num : nums) {
            for (String colo : colos) {
                String concat = colo.concat(num);
                hashMappokerBox.put(index, concat);
                index++;
            }
        }
        //手动添加大小王
        hashMappokerBox.put(index,"☽");
        index++;
        hashMappokerBox.put(index,"☀");

洗牌

为了完成洗牌这一步骤,我们需要将HashMap中的键放在一个ArrayList集合中,这样通过洗键就将扑克洗好了

ArrayList<Integer> pokerBox = new ArrayList<>();
 Set<Map.Entry<Integer, String>> entries = hashMappokerBox.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            Integer key = entry.getKey();
            pokerBox.add(key);
        }
        //洗牌(3遍)
        Collections.shuffle(pokerBox);//使用默认随机源对指定列表进行置换,打乱顺序
        Collections.shuffle(pokerBox);
        Collections.shuffle(pokerBox);

发牌

发到手中的扑克,我们希望是有序的,所以我们再将键集传给TreeSet集合中,利用TreeSet自动排序功能得到有序的扑克。

TreeSet<Integer> pokerPlayer1Index = new TreeSet<>();
        TreeSet<Integer> pokerPlayer2Index = new TreeSet<>();
        TreeSet<Integer> pokerPlayer3Index = new TreeSet<>();
        TreeSet<Integer> lastPokerIndex = new TreeSet<>();

        for (int i = 0; i < pokerBox.size(); i++) {
            if(pokerBox.size()-i<=3){  //底牌对应的键
                lastPokerIndex.add(pokerBox.get(i));
            }else if (i % 3 == 0) {    //玩家一的牌对应的键
                pokerPlayer1Index.add(pokerBox.get(i));
            } else if (i % 3 == 1) {   //玩家二的牌对应的键
                pokerPlayer2Index.add(pokerBox.get(i));
            } else {                   //玩家二的牌对应的键
                pokerPlayer3Index.add(pokerBox.get(i));
            }
        }

看牌

通过TreeSet中的值,也就是HashMap中的键集,可以得到对应的值

 //看牌
 {
        lookpoker(hashMappokerBox, pokerPlayer1Index,"洪世贤");
        lookpoker(hashMappokerBox, pokerPlayer2Index,"艾丽");
        lookpoker(hashMappokerBox, pokerPlayer3Index,"品如");
        lookpoker(hashMappokerBox, lastPokerIndex,"地主多");
 }

    private static void lookpoker(HashMap<Integer, String> hashMappokerBox, TreeSet<Integer> pokerPlayer1Index, String play1) {
        System.out.println(play1+"的牌");
        for (Integer index : pokerPlayer1Index) {
            String s = hashMappokerBox.get(index);
            System.out.print(s+"\t");
        }
        System.out.println();
    }

玩家到手的扑克

洪世贤的牌
♠36677899910	♦J	♠Q	♦Q	♦K	♥A	♦A	♣2
艾丽的牌
♦344557891010	♥J	♣J	♥Q	♥K	♣A	♥2	☽
品如的牌
♥33445667810	♠J	♣Q	♠K	♣K	♠A	♦2	☀
地主多的牌
♥582
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值