Java模拟实现斗地主功能

导读:本篇文章讲解 Java模拟实现斗地主功能,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

需要完成的功能

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

创建扑克

发牌的前提是有牌可发,所以我们要先创建一副牌,这里我们用的是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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14646.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!