java集合案例--模拟斗地主

案例:模拟斗地主发牌
需求:使用一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分发给用集合表示的三个
玩家和底牌,并打印玩家和底牌的集合内容
步骤
1.买牌 四个花,52张牌。
将花色和数字分别进行组合,生成所有的普通牌,手动添加“小王”,“大王”
2.洗牌和发牌
使用Collections攻击类的shuffle()方法打乱牌的顺序
3.看牌
遍历牌推,将每一张牌分发到三个玩家集合中
留三张作为底牌
4.看牌
分别打印每个玩家集合的内容

1.买牌
  花色和数字分别进行组合,生成所有的普通牌,手动添加“小王”,“大王”
//1.买牌
        //1.1定义一个双列集合,键:表示牌的编号   值:表示具体的牌   规则,编号越小,牌越小
        Map<Integer,String> map = new HashMap<>();
        //1.2定义一个单列集合,用来存储所有牌的编号
        List<Integer> list = new ArrayList<>();
        //1.3定义两个数组用来放牌
        String[] colors = {"♥","♠","♦","♣"};   //花色
        String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};  ////1.3用循环嵌套,获取每一张牌(一个花色有四张牌)
        int num = 0;
        for (String number : nums) {   //外循环一次,内循环一圈  外循环:获取所有的牌
            for (String color : colors) {   //内循环: 获取所有的花色
                String poker = number+color;   //拼接字符串
                map.put(num,poker);  //添加到双列集合中
                list.add(num);   //添加到单列集合中
                num++;   //编号自增一
            }
        }
        map.put(num,"小王");   //添加小王
        list.add(num++);   //先运算  在自增
        map.put(num,"大王");   //添加大王
        list.add(num++);   //先运算  在自增
        System.out.println("所有的牌:"+map);
        System.out.println("所有的编号:"+ list);

2.洗牌和发牌

洗牌
2.1使用Collections攻击类的shuffle()方法打乱牌的顺序
2.2分别创建三个玩家集合对象和底牌集合对象
2.3遍历牌推的每一张牌,分别将索引对3取模的值为0,1,2的牌存放到三个玩家集合中,将最后三张存放到底牌集合中
发牌
遍历牌推,将每一张牌分发到三个玩家集合中
留三张作为底牌
 //2.洗牌
        Collections.shuffle(list); // 打乱单列集合中的编号
        System.out.println("洗好牌以后,编号为:"+list);
        //3.发牌
        //3.1创建四个玩家集合,一个集合存放底牌,三个玩家
        List duanyu = new ArrayList();
        List guojing = new ArrayList();
        List yasuo = new ArrayList();
        List dipai = new ArrayList();
        //3.2具体的发牌动作,将所有和3取模,决定发给谁
        for (int i = 0; i <list.size() ; i++) {
            Integer polerNum = list.get(i);  //获取编号
            if(i<3){
                dipai.add(polerNum);
            }else if(i%3==0){
                duanyu.add(polerNum);
            }else if(i%3==1){
                guojing.add(polerNum);
            }else if(i%3==2){
                yasuo.add(polerNum);
            }
        }
//        System.out.println("底牌为:"+ dipai);
//        System.out.println("yasuo的牌:" + yasuo);

3.看牌

    1.将玩家集合中的牌按自然顺序进行排序 :Collections.sort(List)
2.打印玩家集合中的牌
3.重复上面的操作打印所有玩家的牌和底牌
        //4.看牌
        //定义一个方法,用来看牌
            //方法名:printpoKer
            //参数列表 List<Integer>,Map<Integer,String>
            //返回值:String
        System.out.println("yasuo的牌为:"+printPoker(yasuo,map));
        System.out.println("guojing的牌为:"+printPoker(guojing,map));
        System.out.println("duanyu的牌为:"+printPoker(duanyu,map));
        System.out.println("底牌为:"+printPoker(dipai,map));
    }
    //看牌的方法
    public static String printPoker(List<Integer> nums, Map<Integer,String> pokers){
        //1.对牌的编号进行升序排列
        Collections.sort(nums);
        //2.遍历牌的编号集合,获取到每一个编号
        StringBuffer sb = new StringBuffer();
        for (Integer num : nums) {
            //num就是要查找的具体牌,编号
        //3.根据编号到双列集合中查找该编号对应的具体牌
            String poker=pokers.get(num);
         //4.将获取到的牌进行拼接
            sb.append(poker+ " ");
        }
        //5.将最后拼接结果返回即可
        String str = sb.toString();  //因为要返回的是字符串, 所以需要转换成字符串
        return str.trim();    //去除首尾的空格
    }
}


 
 


原文地址:https://www.cnblogs.com/zxy6/p/14265834.html