JavaSE基础案例之模拟斗地主
通过模拟斗地主案例来练习集合的使用
- 结果预览:
- 思路:
- 具体代码实现:
- 1.创建集合装扑克牌
- 2.洗牌和发牌
- 3.定义看牌方法
- 原码:
结果预览:
每次发牌后,三位玩家的手牌是随机的并且已经按照手牌大小排完序,运行两次验证手牌的随机性。
马老师的牌还不错,芜湖~起飞
思路:
1.创建HashMap,键是编号,值是牌。
2.创建ArrayList,存储编号。
3.创建花色数组和点数数组。
4.从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号。
5.洗牌(洗的是编号),用Collections的shuffl()方法实现。
6.发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合。
7.定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
8.调用看牌方法
为了方便理解,我用图形的方式来描述下过程:
具体代码实现:
1.创建集合装扑克牌
//创建HashMap集合 key是编号用Integer value是牌用StringHashMap<Integer,String> hm=new HashMap<>();//创建ArrayList集合用来存储编号ArrayList<Integer> list=new ArrayList<>();//创建花色数组和点数数组String [] color={"♠", "♦", "♥","♣"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号int index=0;//增强For循环存储花色和点数for(String num:number){for(String col:color){hm.put(index,col+num);list.add(index);index++;}}//52张牌存完了 还剩大小王 现在添加进去hm.put(index,"小王");list.add(index);index++;hm.put(index,"大王");list.add(index);//以上的操作实现了把54张扑克牌放入一个集合容器。
2.洗牌和发牌
//洗牌(洗的是编号),用collections的shuffle()方法实现。Collections.shuffle(list);//发牌 用TreeSet接收 用三位玩家名字命名TreeSet<Integer> PDD=new TreeSet<>();TreeSet<Integer> DaSiMa=new TreeSet<>();TreeSet<Integer> LuBenWei=new TreeSet<>();//三张底牌TreeSet<Integer> finalCard=new TreeSet<>();for(int x=0;x<list.size();x++){//定义一个变量接收索引int a= list.get(x);//最后三个索引if(x>=list.size()-3){finalCard.add(a);}else if(x%3 == 0){PDD.add(a);}else if(x%3 == 1){DaSiMa.add(a);}else {LuBenWei.add(a);}}
3.定义看牌方法
//定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm ){System.out.print(name+"的手牌为:");//遍历牌 就是遍历索引for(Integer key:ts){String poker = hm.get(key);System.out.print(poker+" ");}System.out.println();}
原码:
package 模拟斗地主;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/*需求:通过程序实现 斗地主过程中的洗牌,发牌和看牌功能,并且为了方便看牌手牌要排序。思路:1:创建HashMap集合,键是编号,值是牌。2:创建Arraylist集合用于存储编号。3:创建花色数组和点数数组。4:从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号。5 :洗牌(洗的是编号),用collections的shuffle()方法实现。6:发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收7:定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)8:调用方法看牌*/public class ChinesePoker {public static void main(String[] args) {//创建HashMap集合 key是编号用Integer value是牌用StringHashMap<Integer,String> hm=new HashMap<>();//创建ArrayList集合用来存储编号ArrayList<Integer> list=new ArrayList<>();//创建花色数组和点数数组String [] color={"♠", "♦", "♥","♣"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号int index=0;//增强For循环存储花色和点数for(String num:number){for(String col:color){hm.put(index,col+num);list.add(index);index++;}}//52张牌存完了 还剩大小王 现在添加进去hm.put(index,"小王");list.add(index);index++;hm.put(index,"大王");list.add(index);//洗牌(洗的是编号),用collections的shuffle()方法实现。Collections.shuffle(list);//发牌 用TreeSet接收 用三位玩家名字命名TreeSet<Integer> PDD=new TreeSet<>();TreeSet<Integer> DaSiMa=new TreeSet<>();TreeSet<Integer> LuBenWei=new TreeSet<>();//三张底牌TreeSet<Integer> finalCard=new TreeSet<>();for(int x=0;x<list.size();x++){//定义一个变量接收索引int a= list.get(x);//最后三个索引if(x>=list.size()-3){finalCard.add(a);}else if(x%3 == 0){PDD.add(a);}else if(x%3 == 1){DaSiMa.add(a);}else {LuBenWei.add(a);}}//调用看牌方法lookPoker("PDD",PDD,hm);lookPoker("大司马",DaSiMa,hm);lookPoker("卢本伟",LuBenWei,hm);lookPoker("底牌",finalCard,hm);}//定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm ){System.out.print(name+"的手牌为:");//遍历牌 就是遍历索引for(Integer key:ts){String poker = hm.get(key);System.out.print(poker+" ");}System.out.println();}}
JavaSE基础案例之模拟斗地主相关推荐
- java基础案例-购物车模拟
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.需求 二.分析 三.代码 四.效果图 五.总结 一.需求 1.模拟购物车模块的功能,需要实现添加商品到购物车中去,同时需 ...
- 博学谷:【案例】模拟斗地主发牌游戏
1.需求 使用一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分发给用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容. 2.步骤 买一副扑克牌,将花色和数字分别进行组合,生成所有的普 ...
- Java编程基础19——Map集合斗地主案例
1_Map集合概述和特点 A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双 ...
- Java16-day07【Map(概述、特点、功能、遍历)、HashMap集合练习、集合嵌套、Collections、模拟斗地主升级版】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))
1.Map集合概述和特点 1.需求: 根据学号获取学生姓名 2.Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能 ...
- Java——集合(模拟斗地主洗牌和发牌进行排序)
//改进版,没有进行按牌的地位从小到大排序 package com.yy.test;import java.util.ArrayList; import java.util.Collections;p ...
- JavaSE基础18笔记集合
18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...
- java基础语法day20(Map、模拟斗地主发牌)
第1章 Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. 1. Collection中的集合, ...
- 【JAVASE】模拟斗地主洗牌发牌
1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...
- java使用集合模拟斗地主洗牌发牌案例
package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...
最新文章
- 基于Lua脚本语言的嵌入式UART通信的实现
- Kingbase金仓更改表空间
- mask rcnn实例分割_使用Mask-RCNN的实例分割
- Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05
- mysql数据库特征_如何掌握MySQL数据库中动态表的特征
- 什么是RAID(独立磁盘冗余阵列)?
- 对软件研发项目管理的深入探讨
- mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
- java c 传递字符串数组_JNI传递字符串数组J-StringArray
- HTML:对话框插件thickbox使用技巧
- 成功通过PMP认证考试的七大要点
- hdu2586How far away ?
- 360 自动 html 极速模式,用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式(顺带解决很多兼容性问题)...
- WinForm使用CefSharp,嵌入浏览器
- 佛说:前生五百次的凝眸,换今生一次的擦肩
- 【编译原理】LL(1)语法分析器
- 关于梯度和雅可比矩阵
- 李笑来python自学_自学是门手艺--李笑来
- python笔记手册_《Python 学习手册》读书笔记
- 有道翻译爬虫+JS逆向
热门文章
- 清华现超级“学霸” 15门课程100分4门99分(图)
- 关于DM MPP的搭建
- google vr 简介
- SpringBoot-refresh解析
- Java中WeakHashMap实现原理深究
- 笔记本电脑显示dns服务器出错,电脑出现dns错误无法上网的解决方法详解
- Codeforces - Mother of Dragons
- 用插件MAVEN-SUREFIRE-REPORT-PLUGIN生成HTML格式测试报告
- 惠普微型计算机主机拆卸,HP 惠普 Pavilion Wave 台式主机 拆机
- html关机命令,shutdown关机命令不起作用