学完了集合后我们可以开始做一个简易版的 ” 斗地主 “ 了,但是呢咱们这个斗地主只能实现制造牌,洗牌、发牌、看牌这几个简单的功能,并不是我们玩的 ” 真人版斗地主 “ 哈!

链接:

Collections、Set、Map介绍

代码如下:

  1. public static void main(String[] args) {
  2. //创建一个Map集合,键表示标记为Integer类型,值表示牌为String类型
  3. HashMap<Integer, String> hashMap = new HashMap<>();
  4. //创建四个花色的集合
  5. ArrayList<String> Suit = new ArrayList<>();
  6. Collections.addAll(Suit, "", "", "", "");
  7. //创建用来存储13张牌面值的单列集合,牌面值需要按扑克牌的大小顺序依次存储,方便后面标记
  8. ArrayList<String> brandValue = new ArrayList<>();
  9. Collections.addAll(brandValue, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
  10. //定义一个标记初始化为1,为后面的发牌后牌面值排序
  11. int flag = 1;
  12. /*大小王最大所以需要提前放进去并且放在最前面,以标记作为键,大小王作为值,依次添加到Map集合中
  13. 确保之后的排序正常,添加完了之后,标记需要+1*/
  14. hashMap.put(flag++, "大王");
  15. hashMap.put(flag++, "小王");
  16. //将牌面值和花色进行组合,外层循环执行一次内层循环执行所有,牌面值集合作为外层循环,花色集合作为内层循环
  17. for (String i : brandValue) {
  18. for (String j : Suit) {
  19. //拼接4种花色和13张牌面值组成剩余的52张牌
  20. String card = j + i;
  21. /*将标记作为键,拼接好的牌作为值放到集合中,每添加一张牌标记就+1
  22. 依次添加,这样最大的牌就会对应最小的标记值*/
  23. hashMap.put(flag++, card);
  24. }
  25. }
  26. System.out.println("----------------------造牌----------------------");
  27. //打印所有拼接好的牌面值(含标记)
  28. System.out.println("所有的牌面值:" + hashMap.values());
  29. System.out.println("----------------------洗牌----------------------");
  30. /*将map集合转换成List集合,获取map集合中所有的键(标记)并存放到keyList集合中
  31. (List集合再调用shuffle()方法打乱牌的顺序,存的是乱序的标记)*/
  32. /*Set<Integer> key = hashMap.keySet();
  33. ArrayList<Integer> keyList = new ArrayList<>(key);*/
  34. ArrayList<Integer> keyList = new ArrayList<>(hashMap.keySet());
  35. //打乱所有的键(标记),模拟洗牌
  36. Collections.shuffle(keyList);
  37. //打印打乱顺序后的所有牌(标记),实际上就是List集合中乱序后的所有标记
  38. System.out.println("打乱后的标记:" + keyList);
  39. /*创建4个TreeMap集合,分别用来存储三张底牌以及玩家1,玩家2,玩家3的牌(标记),
  40. TreeMap集合会自动对所有元素进行升序排列,所以发完牌后玩家的手牌会按标记从大
  41. 到小展示出来*/
  42. TreeMap<Integer,String> play1 = new TreeMap<>();
  43. TreeMap<Integer,String> play2 = new TreeMap<>();
  44. TreeMap<Integer,String> play3 = new TreeMap<>();
  45. TreeMap<Integer,String> threeCard = new TreeMap<>();
  46. for (int i = 0; i < keyList.size(); i++) {
  47. //在List集合中找到打乱顺序后的标记
  48. Integer cardFlag = keyList.get(i);
  49. //根据标记在hashMap集合中找到对应的牌
  50. String getCard = hashMap.get(cardFlag);
  51. //根据规则先发底牌然后依次发牌给每个玩家,模拟发牌
  52. if(i >= 51){
  53. //如果标记的索引>=51,该标记给底牌
  54. threeCard.put(cardFlag,getCard);
  55. }else if(i % 3 == 0){
  56. //如果标记的索引%3==0,该标记给玩家1
  57. play1.put(cardFlag,getCard);
  58. }else if(i % 3 == 1){
  59. //如果标记的索引%3==1,该标记给玩家2
  60. play2.put(cardFlag,getCard);
  61. }else{
  62. //如果标记的索引%3==2,该标记给玩家3
  63. play3.put(cardFlag,getCard);
  64. }
  65. }
  66. System.out.println("----------------------看牌----------------------");
  67. //打印三个玩家的手牌以及三张底牌,模拟看牌
  68. System.out.println("底牌:" + threeCard.values());
  69. System.out.println("玩家一的牌:" + play1.values());
  70. System.out.println("玩家二的牌:" + play2.values());
  71. System.out.println("玩家三的牌:" + play3.values());
  72. }

以上基本都有注解标明所以就没做过多的介绍了相信这难不倒聪明的你们!

Java斗地主(集合综合练习)的更多相关文章

  1. 【Java】集合综合案例 - 播放器管理

    集合综合案例 文章目录 集合综合案例 需求分析 项目演示 详细设计 代码实现 歌曲类 播放器类 播放列表类 测试 参考资料 播放器管理 需求分析 项目演示 详细设计 代码实现 重新搞一波 复习巩固 简 ...

  2. 斗地主的综合案例实现(Map有序)

    斗地主的综合案例实现(Map有序) 整体思路 代码实现 import java.util.ArrayList; import java.util.Collections; import java.ut ...

  3. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

  4. Java web项目综合练习(Estore)

    Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...

  5. Java高并发综合

    这篇文章是研一刚入学时写的,今天整理草稿时才被我挖出来.当时混混沌沌的面试,记下来了一些并发的面试问题,很多还没有回答.到现在也学习了不少并发的知识,回过头来看这些问题和当时整理的答案,漏洞百出又十分 ...

  6. Java基础-集合的嵌套

    Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...

  7. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  8. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  9. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

随机推荐

  1. 出票系统:根据淡旺季的月份和年龄,打印票价[课后练习] 出票系统:根据淡旺季的月份和年龄,打印票价[课后练习] 4 10旺季: 4 10旺季: 成人(18-60) : 60 成人(18-60):60 儿童(<18) :半价 儿童(<18):半价 老人(>60) :1/3 老人(>60):1/3 淡季: 淡季: 成人: 40 成人:40 其他: 20 其他:20

    用if适合新手练习 package LianXiTi;import java.util.Scanner;public class first2 {// 出票系统:根据淡旺季的月份和年龄,打印票价[课后 ...

  2. 皮皮调度(1)——从Airflow到DolphinScheduler,以及“皮皮调度”的来历

    按照前一篇文章 <GraalVM -- 让Java变得再次强大> 末尾提到的计划,本来这篇文章是想写一下GraalVM的后续<深耕云原生的Java应用框架 -- Quarkus> ...

  3. Luogu2915 [USACO08NOV]奶牛混合起来Mixed Up Cows (状压DP)

    枚举末位状态 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...

  4. .NET 7 发布的最后一个预览版Preview 7, 下个月发布RC

    微软在2022年8月9日 发布了.NET 7 Preview 7[1],这是它在11月10日 RTM 之前进入发布候选阶段之前的最后预览版. 预览版 7 已在 Visual Studio 17.4 预 ...

  5. java学习第三天常用类.day11

    工具类如何设计,在开发中有两种设计: 工具方法:静态方法的使用 非静态的方法使用: 使用单列模式,为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 保证在整个应用中某一个类有且只有一个实例(一 ...

  6. 4步教你学会使用Linux-Audit工具

    摘要:简单来讲audit是Linux上的审计工具,可以用来记录和监控对文件.目录.系统资源的更改:Audit无法直接增强系统的安全性,但是它可以用于发现违反系统安全政策的行为. 本文分享自华为云社区& ...

  7. synchronized原理剖析

    synchronized原理剖析 并发编程存在什么问题? 1️⃣ 可见性 可见性:是指当一个线程对共享变量进行了修改,那么另外的线程可以立即看到修改后的最新值. 案例演示:一个线程A根据 boolea ...

  8. HttpServletResponse 类

    HttpServletResponse 类的作用 HttpServletResponse 类和 HttpServletRequest 类一样.每次请求进来,Tomcat 服务器都会创建一个 Respo ...

  9. Aoac唤醒的软件方案

    Aoac唤醒 这篇文章包含了Win10下的Aoac唤醒和Win11下的Aoac唤醒的不同地方,在结尾处: 从Win10时代开始,通过软件来唤醒机器是一个很常见的事情了,但是很少有文档去将如何通过AOA ...

  10. django 通过MQTT连接阿里云

    Django MQTT 连接阿里云 目录 Django MQTT 连接阿里云 目录 一.安装库 1.安装Python对接mqtt协议库,paho-mqtt 二. 设备认证,一机一密型接入 三.问题 1 ...