当前位置: 首页 > news >正文

斗地主综合案例有序版

package Day17;/*
 *@author wanghongyuan
 *@Create 2020/12/26 10:43
 */

import java.sql.ClientInfoStatus;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/*
    1.准备牌

    2.洗牌
    3.发牌
    4.排序
    5.看牌
 */
public class DouDiZhuDemo {
    public static void main(String[] args) {
        List<String> colors = List.of("♧", "♡", "♤", "♢");
        List<String> numbers = List.of("2", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "A");

        HashMap<Integer, String> poker = new HashMap<>();
        ArrayList<Integer> pokerIndex = new ArrayList<>();
        // 先把大王小王存储到集合中
        // 定义一个牌的索引
        int index = 0;
        poker.put(index, "大王");
        pokerIndex.add(index);
        index++;
        poker.put(index, "小王");
        pokerIndex.add(index);
        index++;
        // 循环嵌套遍历两个集合,组装52张牌,存储到集合当中。
        for (String number : numbers) {
            for (String color : colors) {
//                System.out.println(color+number);
                poker.put(index, color + number);
                pokerIndex.add(index);
                index++;
            }
        }
//       System.out.println(poker);
//        System.out.println(pokerIndex);
        /*
            2.洗牌
            使用Collections中的shuffle(list)方法
         */
        Collections.shuffle(pokerIndex);
//        System.out.println(pokerIndex);
    /*
        3.发牌

     */
//      定义4个集合,存储玩家牌的索引,和底牌的索引。
        ArrayList<Integer> play01 = new ArrayList<>();
        ArrayList<Integer> play02 = new ArrayList<>();
        ArrayList<Integer> play03 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();
//        遍历存储牌索引的List集合,获取每一个牌的索引
        for (int i = 0; i < pokerIndex.size(); i++) {
            Integer in = pokerIndex.get(i);
            if (i>=51){
                dipai.add(in);
            }else if (i%3==0){
                play01.add(in);
            }else if (i%3==1){
                play02.add(in);
            }else if (i%3==2){
                play03.add(in);
            }
        }

        /*
            4.排序
            使用Collections中的sort方法进行排序
            默认是升序排序
         */
        Collections.sort(play01);
        Collections.sort(play02);
        Collections.sort(play03);
        Collections.sort(dipai);
//        System.out.println(play01);
//        System.out.println(play02);
//        System.out.println(play03);
//        System.out.println(dipai);
/*
    定义一个看牌的方法,提高代码的复用性
    参数:
        String name:玩家名称
        HashMap<Integer,String> poker:存储牌的poker集合
        ArrayList<Integer> list :存储玩家和底牌的list集合
        查表法:
            遍历玩家或者底牌集合,获取牌的索引
            使用牌的索引,去Map集合中,找到对应的牌
 */
        lookPoker("刘德华",poker,play01);
        lookPoker("周润发",poker,play02);
        lookPoker("周星驰",poker,play03);
        lookPoker("底牌",poker,dipai);


    }
    public static void lookPoker(String name,HashMap<Integer,String> poker,ArrayList<Integer> list){
        // 输出玩家的名称,不换行
        System.out.print(name +":");
        // 遍历玩家或者底牌集合,获取牌的索引
        for (Integer key : list) {
            // 使用牌的索引,去Map集合中,找到对应的牌
            String pai = poker.get(key);
            System.out.print(pai+" ");
        }
        System.out.println();//打印完每一个玩家的牌换行
    }
}


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Throwable中Exception/Error异常的分类及处理
  • 异常处理的过程
  • 异常的几个注意事项
  • 如何自定义异常类
  • 2020年年终总结
  • Thread类的使用方法
  • 异常的总结
  • Thread类的获取线程名称和设置线程名称
  • Runnable类
  • 匿名内部类方式实现线程的创建
  • ThreadSafe解决线程安全的问题
  • 资源唤醒案例
  • 线程池的使用
  • Lambda标准格式
  • File类的构造方法
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • avalon2.2的VM生成过程
  • Babel配置的不完全指南
  • bootstrap创建登录注册页面
  • CentOS 7 防火墙操作
  • Computed property XXX was assigned to but it has no setter
  • input实现文字超出省略号功能
  • isset在php5.6-和php7.0+的一些差异
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript设计模式与开发实践系列之策略模式
  • js数组之filter
  • Netty 4.1 源代码学习:线程模型
  • Python 反序列化安全问题(二)
  • ucore操作系统实验笔记 - 重新理解中断
  • uva 10370 Above Average
  • Vue2.0 实现互斥
  • vuex 学习笔记 01
  • 代理模式
  • 入口文件开始,分析Vue源码实现
  • 双管齐下,VMware的容器新战略
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我是如何设计 Upload 上传组件的
  • Python 之网络式编程
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • (1)Jupyter Notebook 下载及安装
  • (CPU/GPU)粒子继承贴图颜色发射
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (转)linux下的时间函数使用
  • ../depcomp: line 571: exec: g++: not found
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net Core 中间件验签
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET Project Open Day(2011.11.13)
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 回调、接口回调、 委托