斗地主实例 --- 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);
            }
        }

2 洗牌

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

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);
                }
            }
        }

4 排序

  //排序

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

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);

看牌的方法(公共方法)

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

6结果

在这里插入图片描述

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

posted @ 2020-09-10 09:42  康世行  阅读(39)  评论(0编辑  收藏  举报