斗地主实例 --- HashMap实例应用

举报
ksh1998 发表于 2021/12/26 00:01:13 2021/12/26
【摘要】 前言: 在学习单列集合的时候做过一版,无序的 斗地主实例。那个主要是应用,单列集合来实现。 这次学习了双列集合,所以还是那个斗地主实例,使用双列集合的HashMap来实现一下。 文章目录 实现步骤...

前言:
在学习单列集合的时候做过一版,无序的 斗地主实例。那个主要是应用,单列集合来实现。
这次学习了双列集合,所以还是那个斗地主实例,使用双列集合的HashMap来实现一下。

实现步骤:

重点:
1 HashMap<Integer,String> map=new HashMap<>();//综合应用
2 List colors = List.of(“♠”, “♥”, “♣”, “♦”);//花色
3List paiIndex = List.of(“2”, “A”, “K”, “Q”, “J”, “10”, “9”, “8”, “7”, “6”, “5”, “4”, “3”);//牌号

1 准备牌

  //1 准备牌
        HashMap<Integer,String> map=new HashMap<>();//存放装好的牌
        ArrayList<Integer> paiKey=new ArrayList<>();//用于打乱牌索引,打乱之后的集合
        List<String> colors = List.of("♠", "♥", "♣", "♦");//花色
        List<String> paiIndex = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");//牌号
        //用于记录牌的索引(HashMap的key)
        int i=0;
        //添加两张特殊牌
        map.put(i++,"大王");
        map.put(i++,"小王");
        //组织牌,遍历两个集合进行组装
         for (String index : paiIndex) {
            for (String color : colors) {
                String cp=color+index;//对52张牌进行组织
                map.put(i++,cp);
            }
        }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2 洗牌

   //洗牌,对hashMap的key进行打乱
        Set<Integer> keySet = map.keySet();//获取hashMap的key,以集合形式返回
        for (Integer key : keySet) { //把Set集合中的key,存到List集合中
                paiKey.add(key);
            }
            //打乱牌的索引
            Collections.shuffle(paiKey);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3发牌

轮流发牌公式:
集合索引%3 =0是第一个玩家,等于1是第二个玩家,等于2是第三个玩家。

 //发牌
          ArrayList<Integer> dipai=new ArrayList<>();//底牌
          ArrayList<Integer> play1=new ArrayList<>();//玩家1
          ArrayList<Integer> play2=new ArrayList<>();//玩家2
          ArrayList<Integer> play3=new ArrayList<>();//玩家3
        //遍历paikey集合
        for (int index = 0; index < paiKey.size(); index++) {
            //获取每一个牌的索引
            Integer in = paiKey.get(index);
            //判断是否只剩底牌
            if(index>=51){
                dipai.add(in);
            }else {
                if(index%3==0){
                    //给第一位玩家
                    play1.add(in);
                }else if(index%3==1){
                    //给第二位玩家
                    play2.add(in);
                }else if(index%3==2){
                    //给第三位玩家
                    play3.add(in);
                }
            }
        }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4 排序

  //排序

        Collections.sort(play1);
        Collections.sort(play2);
        Collections.sort(play3);
        Collections.sort(dipai);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5 看牌

 //底牌

        System.out.println("底牌是:");
        showPaike(map,dipai);
        System.out.println();
        System.out.println("------------------------------------");
        //玩家一
        System.out.println("玩家一");
       showPaike(map,play1);
        System.out.println();
        System.out.println("------------------------------------");
        //玩家二
        System.out.println("玩家二");
        showPaike(map,play2);
        System.out.println();
        System.out.println("------------------------------------");
        //玩家三
        System.out.println("玩家三");
       showPaike(map,play3);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

看牌的方法(公共方法)

  private static void showPaike(HashMap<Integer,String> poker,ArrayList<Integer> list){
        for (Integer integer : list) {
            String s = poker.get(integer);
            System.out.print(s+"");
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6结果

在这里插入图片描述

总结:
这次比上一次多了一个给玩家牌排序的步骤,(默认按照升序排序,真对HashMap的key)。
目前暂时只实现了发牌,下一步就是逐渐的实现发牌之后的步骤,敬请期待!

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/108507218

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。