• JAVA学习笔记(十八)


    经典案例:模拟斗地主洗牌发牌

    案例介绍:按照斗地主的规则,完成洗牌发牌的动作。

    案例需求分析:

    准备牌:

      完成数字与纸牌的映射关系:

      使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

    洗牌:

      通过数字完成洗牌发牌

    发牌:

      将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

      存放的过程中要求数字大小与斗地主规则的大小对应。

      将代表不同纸牌的数字分配给不同的玩家与底牌。

    看牌:

      通过Map集合找到对应字符展示。

      通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

    实现步骤:

      首先,要修改java文件编码,由GBK修改为UTF-8,因为默认的字符编码GBK没有我们要的梅花、方片、黑桃、红桃(♠♥♦♣)等特殊字符。

    下面是具体代码:

    package homework0418;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;
    
    public class DoudiZhu {
    
        public static void main(String[] args) {
            //创建一个HashMap集合
            HashMap<Integer,String> pokers=new HashMap<Integer,String>();
            //创建花色数组
            String[] colors= {"黑桃","梅花","方块","红桃"};
            //创建点数数组
            String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //创建一副牌 花色+点数
            int count=0;
            //创建一个存储索引的ArrayList集合
            ArrayList<Integer> indexs=new ArrayList<Integer>();
            for(String num:numbers) {
                for(String c:colors) {
                pokers.put(count, c+num);
                indexs.add(count);
                count++;
            }
                }
            indexs.add(0);
            pokers.put(0, "小王");
            indexs.add(1);
            pokers.put(1, "大王");
            //洗牌
            Collections.shuffle(indexs);
            //发牌
            //创建四个TreeSet集合分别存储三个人的牌和底牌编号
            TreeSet<Integer> zhangsan=new TreeSet<Integer>();
            TreeSet<Integer> lisi=new TreeSet<Integer>();
            TreeSet<Integer> wangwu=new TreeSet<Integer>();
            TreeSet<Integer> bottom=new TreeSet<Integer>();
            for(int i=0;i<indexs.size();i++) {
                if(i<3) {
                    bottom.add(indexs.get(i));
                }else if(i%3==0) {
                    zhangsan.add(indexs.get(i));
                }else if(i%3==1) {
                    lisi.add(indexs.get(i));
                }else if(i%3==2) {
                    wangwu.add(indexs.get(i));
                }
            }
            //通过索引查看pokers中对应的牌
            look("张三",zhangsan,pokers);
            look("李四",lisi,pokers);
            look("王五",wangwu,pokers);
            look("底牌",bottom,pokers);
        }
        private static void look(String name,TreeSet<Integer> ts,HashMap<Integer,String> pokers) {
            System.out.print(name+"的牌是:");
            for(int i:ts) {
                System.out.print(pokers.get(i)+" ");
            }    
            System.out.println();
                }
    }
  • 相关阅读:
    Redis集群搭建步骤
    JS性能优化
    javaweb中实现在线人数统计
    tomcat在linux中启动慢的解决方案
    Redis高可用架构
    bjpowernode课程体系及题库
    java 相关
    码农翻身全年文章精华
    Spring源码深度解析
    PHPSTROM快捷键备份
  • 原文地址:https://www.cnblogs.com/boringLee/p/9020308.html
Copyright © 2020-2023  润新知