• 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();    //去除首尾的空格
        }
    }
    
    
    
     
     


  • 相关阅读:
    innodb-mvcc
    5.7-mysql不同隔离级别下执行sql的上锁情况-building
    shardingsphere自定义分分片
    shardingsphere自定义分布式主键如何配置
    线程池源码ThreadPoolExecutor分析
    一些知识的总结
    账户余额的批量入账与扣账实现
    jstack
    Java——总结
    Java——重写
  • 原文地址:https://www.cnblogs.com/zxy6/p/14265834.html
Copyright © 2020-2023  润新知