【Java】Java基础 使用集合实现斗地主分牌

news/2025/1/12 18:47:29/

427ef4152dbf4b6c92618a198935cb6c.png

  📝个人主页:哈__

期待您的关注 

1b7335aca73b41609b7f05d1d366f476.gif

今天使用集合TreeSet来实现一个斗地主的分牌流程。

TreeSet集合的一个特点就是 元素有序,这样就方便我们分的牌自动排序。

0.思路

1.创建玩家手牌集合

我们到时候分的牌都存储在这里,但你可能会有疑问,因为存储的泛型是Integer,但扑克牌是有花色的,这该如何实现?

java">         TreeSet<Integer> zhangsan=new TreeSet<Integer>();TreeSet<Integer> lisi=new TreeSet<Integer>();TreeSet<Integer> wangwu=new TreeSet<Integer>();TreeSet<Integer> dipai=new TreeSet<Integer>();

2.创建牌堆 

我们创建了一个名为poke的HashMap结构,poke用来存储我们的扑克,而poke的key是每一张牌的一个id,value就是具体的牌。

java">        HashMap<Integer,String>poke=new HashMap<Integer,String>();String[] color={"♦","♣","♥","♠"};String[] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

我们到时候洗牌的时候,洗的是这些id,但是并不是直接在poke中洗,poke的作用只是记录我们有哪些牌。所以 我们在创建一个用来洗牌的数组,并把所有的id放入。

java">        ArrayList<Integer> xipai=new ArrayList<Integer>();

3. 把牌放入牌堆

遍历我们的String数组,把花色和牌号组合一下并放入poke中,同时把poke中的key放入我们的洗牌集合中。最后不要忘了大小王。

java">        int index=0;for(String Number:number){for(String Color:color){String POKE=Color+Number;poke.put(index,POKE);xipai.add(index);index+=1;}}poke.put(52,"小王");poke.put(53,"大王");xipai.add(52);xipai.add(53);

4.洗牌 

一行代码即可,使用Collecitons自带的数组打乱方法。

java">    Collections.shuffle(xipai);

5.进行分牌 

如果只剩下最后三张了,就直接放入到我们的底牌集合当中,否则的话就进行模3取余操作进行判断应该分给谁。

java">        for(int i=0;i<xipai.size();i++){if(i>=xipai.size()-3){dipai.add(xipai.get(i));}else{if(i%3==0){zhangsan.add(xipai.get(i));}else if(i%3==1){lisi.add(xipai.get(i));}elsewangwu.add(xipai.get(i));}}

6.完整代码 

java">public class Poker {public static void main(String[] args) {HashMap<Integer,String>poke=new HashMap<Integer,String>();String[] color={"♦","♣","♥","♠"};String[] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};ArrayList<Integer> xipai=new ArrayList<Integer>();TreeSet<Integer> zhangsan=new TreeSet<Integer>();TreeSet<Integer> lisi=new TreeSet<Integer>();TreeSet<Integer> wangwu=new TreeSet<Integer>();TreeSet<Integer> dipai=new TreeSet<Integer>();int index=0;for(String Number:number){for(String Color:color){String POKE=Color+Number;poke.put(index,POKE);xipai.add(index);index+=1;}}poke.put(52,"小王");poke.put(53,"大王");xipai.add(52);xipai.add(53);Collections.shuffle(xipai);//进行发牌for(int i=0;i<xipai.size();i++){if(i>=xipai.size()-3){dipai.add(xipai.get(i));}else{if(i%3==0){zhangsan.add(xipai.get(i));}else if(i%3==1){lisi.add(xipai.get(i));}elsewangwu.add(xipai.get(i));}}//进行看牌,用方法实现LookPoker("张三",gyh,poke);LookPoker("李四",zch,poke);LookPoker("王五",wjq,poke);LookPoker("底牌",dipai,poke);//System.out.println(poke);}public static void LookPoker(String name,TreeSet<Integer>set,HashMap<Integer,String>map){System.out.print(name+"的牌是:");for(Integer i:set){String poke=map.get(i);System.out.print(poke+" ");}System.out.println();}
}


http://www.ppmy.cn/news/1443423.html

相关文章

ElementUI RUOYI 深色适配

1. 切换按钮&#xff1a;随便找个页面放上去 页面触发逻辑如下 a. html 按钮结构&#xff08;可自定义&#xff09; <el-switchstyle"margin-top: 4px; margin-left: 8px; margin-right: 8px"v-model"isDark"inline-promptactive-icon"Moon"…

美国服务器vs香港服务器,哪个网站部署打开更快一些?

网站打开速度受多种因素影响&#xff0c;包括服务器地理位置、网络质量、带宽等。用户距离服务器越近&#xff0c;访问速度越快。对于中国大陆用户而言&#xff0c;香港的服务器可能会提供更快的网站访问体验&#xff0c;因为香港距离大陆较近&#xff0c;且网络连接通常较好。…

【SpringCloud】LoadBalance负载均衡服务调用快速入门

【SpringCloud】LoadBalance负载均衡服务调用快速入门 文章目录 【SpringCloud】LoadBalance负载均衡服务调用快速入门1. 概述2. 引入依赖3. 配置、验证3.1 配置3.2 验证 1. 概述 官网地址&#xff1a;点击跳转 Spring Cloud LoadBalancer 是由 SpringCloud 官方提供的一个开…

ArcGIS批量寻找图层要素中的空洞

空洞指的是图层中被要素包围所形成的没有被要素覆盖的地方&#xff0c;当图层要素数量非常庞大时&#xff0c;寻找这些空洞就不能一个一个的通过目测去寻找了&#xff0c;需要通过使用工具来实现这一目标。 一、【要素转线】工具 利用【要素转线】工具可以将空洞同图层要素处于…

Spring Boot | Spring Boot “自定义“ Redis缓存 “序列化机制“

目录: Spring Boot "自定义" Redis缓存 "序列化机制" &#xff1a;一、基于 "注解" 的 "Redis缓存管理" 的 "默认序列化机制" 和 "自定义序列化机制"1.1 基于 "注解" 的 "Redis缓存管理" 的 …

前端调用WebSocket协议接口获取数据

目录 封装调用ws协议接口工具函数 页面调用 封装调用ws协议接口工具函数 params&#xff1a;请求参数cb&#xff1a;服务器请求成功返回数据的回调函数 function createWs(params, cb) {const ws new WebSocket("ws://124.222.224.186:8800");let timer null;// …

Linux初识

一、实验目的 1、掌握Vmware中运行Linux系统的基本方法&#xff1b; 2、了解Linux终端Shell的基本使用方法&#xff1b; 3、了解Vmware虚拟机中NAT虚拟网络接口的功能与设置&#xff1b; 4、了解ssh远程登陆协议的功能&#xff1b; 5、掌握通过SecurCRT或putty登陆Linux主…

CSS渐变色理论与分类、文字渐变色方案、炸裂渐变色方案以及主流专业渐变色工具网站推荐

渐变色彩可以增加视觉层次感和动态效果&#xff0c;使网页界面更加生动有趣&#xff0c;吸引用户注意力。另外&#xff0c;相较于静态背景图片&#xff0c;CSS渐变无需额外的HTTP请求&#xff0c;减轻服务器负载&#xff0c;加快页面加载速度&#xff1b;同时CSS渐变能够根据容…