基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌
package Game;import java.util.ArrayList;
import java.util.Collections;public class PokerGame01 {//牌盒//♥3 ♣3static ArrayList<String> list = new ArrayList<>();//静态代码块//特点:随着类的加载而在加载的,而且只执行一次。static {//准备牌// "♦", "♣", "♥", "♠"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"♦", "♣", "♥", "♠"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一个牌的花色for (String n : number) {//n表示每一种牌号list.add(c + n);}}list.add("大王");list.add("小王");}public PokerGame01() {// 洗牌Collections.shuffle(list);// 发牌//定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根据索引找到牌号,本质是要把前三张牌给地主String poke = list.get(i);//得到了第i张牌if (i <= 2) {dizhu.add(poke);//前三张给地主//依次轮流给3个选手发牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//看牌lookpoke("张三",player1);lookpoke("李四",player2);lookpoke("王五",player3);}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循环遍历得到每一张牌System.out.print(poke + " ");}System.out.println();}
}
排序的
package Game;import java.util.*;public class PokerGame02 {//牌盒//♥3 ♣3//键是序号,牌是值//此时只要把牌跟序号产生对应关系即可,不需要按照序号进行排序,所以只需HashMap即可static HashMap<Integer, String> hm = new HashMap<>();//用来存储序号的单列集合static ArrayList<Integer> list = new ArrayList<>();//静态代码块//特点:随着类的加载而在加载的,而且只执行一次。static {//准备牌// "♦", "♣", "♥", "♠"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"♦", "♣", "♥", "♠"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
/*{1=♦3, 2=♦4, 3=♦5, 4=♦6, 5=♦7, 6=♦8, 7=♦9, 8=♦10, 9=♦J, 10=♦Q, 11=♦K, 12=♦A, 13=♦2, 14=♣3,15=♣4, 16=♣5, 17=♣6, 18=♣7, 19=♣8, 20=♣9, 21=♣10, 22=♣J, 23=♣Q, 24=♣K, 25=♣A, 26=♣2, 27=♥3,28=♥4, 29=♥5, 30=♥6, 31=♥7, 32=♥8, 33=♥9, 34=♥10, 35=♥J, 36=♥Q, 37=♥K, 38=♥A, 39=♥2, 40=♠3,41=♠4, 42=♠5, 43=♠6, 44=♠7, 45=♠8, 46=♠9, 47=♠10, 48=♠J, 49=♠Q, 50=♠K, 51=♠A, 52=♠2}很明显可以看出没有按照顺序起好牌 应该先把数字一样的放在一起,而不是把花色一样的放在一起解决: 交换color和number即可
*///定义一个序号int num = 1;for (String n : number) {//n表示每一种牌号for (String c : color) {//c表示每一个牌的花色hm.put(num, c + n);list.add(num);num++;}}hm.put(num, "小王");list.add(num);num++;hm.put(num, "大王");list.add(num);}public PokerGame02() {// 洗牌Collections.shuffle(list);// 发牌/*
[39, 35, 7]
[28, 31, 15, 54, 14, 24, 3, 46, 43, 22, 37, 41, 29, 45, 16, 30, 48]
[33, 49, 11, 13, 38, 27, 25, 50, 20, 9, 1, 32, 19, 10, 44, 21, 40]
[53, 8, 34, 36, 17, 42, 5, 18, 2, 23, 12, 26, 4, 47, 6, 51, 52]
用ArrayList集合存储的索引是乱序的,我们本质是要根据序号也就是索引去到map集合里面找到牌,所以序号要有序*//*[5, 10, 34][2, 4, 7, 8, 13, 17, 18, 19, 20, 22, 27, 35, 37, 38, 39, 40, 42][1, 9, 14, 16, 23, 24, 28, 29, 30, 31, 32, 36, 41, 43, 46, 51, 52][3, 6, 11, 12, 15, 21, 25, 26, 33, 44, 45, 47, 48, 49, 50, 53, 54]*///定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌TreeSet<Integer> dizhu = new TreeSet<>();TreeSet<Integer> player1 = new TreeSet<>();TreeSet<Integer> player2 = new TreeSet<>();TreeSet<Integer> player3 = new TreeSet<>();//获取所有的键,把这些键放入单列集合当中// Set<Integer> integers1 = hm.keySet();for (int i = 0; i < list.size(); i++) {//根据索引找到牌的序号,本质是要把前三张牌的序号给地主int number = list.get(i); //得到了第i张牌的序号if (i <= 2) {dizhu.add(number); //前三张牌的序号给地主// integers1.add(poke);//依次轮流给3个选手发牌} else if (i % 3 == 0) {player1.add(number);} else if (i % 3 == 1) {player2.add(number);} else {player3.add(number);}}//看牌lookpoke("底牌",dizhu);lookpoke("张三",player1);lookpoke("李四",player2);lookpoke("王五",player3);// look("赵六",integers1);}/** 参数一:玩家的名字* 参数二:牌的序号* */public void lookpoke(String name, TreeSet<Integer> ts) {System.out.print(name + ": ");for (int num : ts) {//num就是代表的是序号,遍历方法1 通过键找值的方式遍历map集合//遍历TreeSet集合得到每一个序号,再拿着序号到Map集合中去找真正的牌String poke = hm.get(num);//通过键(序号)拿到了每一张牌(值)System.out.print(poke + " ");}System.out.println();}//遍历单列集合,得到每一个键;/* public void look(String name, Set<Integer> key) {System.out.print(name+": ");//遍历单列集合,得到每一个键for (int num : key) {//num代表就是序号//通过序号(键)去找到map集合里面的值String value = hm.get(num);System.out.print(value+" ");}System.out.println();}*/
}
package Game;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;public class PokerGame03 {//牌盒//♥3 ♣3static ArrayList<String> list = new ArrayList<>();//创建一个集合,用来添加牌的价值,牌号是键,价值是值static HashMap<String, Integer> hm = new HashMap<>();//静态代码块//特点:随着类的加载而在加载的,而且只执行一次。static {//准备牌// "♦", "♣", "♥", "♠"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"♦", "♣", "♥", "♠"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一个牌的花色for (String n : number) {//n表示每一种牌号list.add(c + n);}}list.add(" 大王");list.add(" 小王");//指定牌的价值//牌上的数字到Map集合中判断是否存在//存在,获取价值//不存在,本身的数字就是价值hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);}public PokerGame03() {// 洗牌Collections.shuffle(list);// 发牌//定义4个集合,其中3个选手的牌,还要一个是用来存储地主多出来的3张牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根据索引找到牌号,本质是要把前三张牌给地主String poke = list.get(i);//得到了第i张牌if (i <= 2) {dizhu.add(poke);//前三张给地主//依次轮流给3个选手发牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//排序order(dizhu);order(player1);order(player2);order(player3);//看牌lookpoke("张三",player1);lookpoke("李四",player2);lookpoke("王五",player3);lookpoke("底牌",dizhu);}//利用牌的价值进行排序//参数:集合//♥5 ♥3 ♥6 ♥7 ♥9private void order(ArrayList<String> list) {Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//o1:表示当前要插入到有序序列中的牌//o2:表示已经在有序序列中存在的牌//负数:o1小 插入到前面//正数:o1大 插入到后面//0:o1的数字跟o2的数字是一样的,需要按照花色再次排序//1.计算o1的花色和价值 String color1 = o1.substring(0, 1);;//♥3中的♥//价值int value1 = getValue(o1);//2.计算o2的花色和价值String color2= o1.substring(0, 1);//♥3中的♥//价值int value2 = getValue(o2);//3.比较o1和o2的价值 ♥3 ♠3int i = value1 - value2;return i == 0 ? color1.compareTo(color2) : i;}});}//计算牌的价值//参数:牌//返回值:价值public int getValue(String poker) { //♥3//获取牌上的数字String number = poker.substring(1);//比如♥3中的3//把这里截取出来的结果,让这个结果再Map集合中存在/*hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);*///如果不存在类型转换 如"3"的价值就值3//如果存在在map集合里面拿出对应的价值即可//拿着数字到map集合中判断是否存在if (hm.containsKey(number)) {//存在,获取价值return hm.get(number);} else {//不存在,类型转换return Integer.parseInt(number);}}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循环遍历得到每一张牌System.out.print(poke + " ");}System.out.println();}
}
相关文章:

基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌
package Game;import java.util.ArrayList; import java.util.Collections;public class PokerGame01 {//牌盒//♥3 ♣3static ArrayList<String> list new ArrayList<>();//静态代码块//特点:随着类的加载而在加载的,而且只执行一次。stat…...

Ubuntu 22.04.4 LTS (linux) 安装certbot 免费ssl证书申请 letsencrypt
1 安装certbot sudo apt update sudo apt-get install certbot 2 申请letsencrypt证书 sudo certbot certonly --webroot -w 网站目录 -d daloradius.域名.com 3 修改nginx 配置ssl 证书 # 配置服务器证书 ssl_certificate /etc/letsencrypt/live/daloradius.域名.com/f…...

MT6825磁编码IC在智能双旋机器人中的应用
MT6825磁编码IC在智能双旋机器人中的应用,无疑为这一领域的创新和发展注入了新的活力。作为一款高性能的磁性位置传感器,MT6825以其独特的优势,在智能双旋机器人的运动控制、定位精度以及系统稳定性等方面发挥了关键作用。 www.abitions.com …...

Datawhale 2024 年 AI 夏令营第二期——基于术语词典干预的机器翻译挑战赛
#AI夏令营 #Datawhale #夏令营 1.赛事简介 目前神经机器翻译技术已经取得了很大的突破,但在特定领域或行业中,由于机器翻译难以保证术语的一致性,导致翻译效果还不够理想。对于术语名词、人名地名等机器翻译不准确的结果,可以通…...

Qt 多窗体、复用窗口的使用
1.继承自QWidge的窗口的呈现,作为tabPage呈现,作为独立窗口呈现 2.继承自QMainWindow的窗口的呈现,作为abPage呈现,作为独立窗口呈现 1. 继承自QWidge的窗口的呈现 1.1 作为tabPage呈现 void MutiWindowExample::on_actWidgetI…...
python 基础语法整理
注释声明命名规范数据类型简单数据类型复合数据类型 打印输出类型转换随机数获取布尔类型流程控制语句循环语句字符串操作拼接替换分割与连接大小写转换空白字符删除 切片列表操作访问/赋值判断是否存在元素添加/删除复制排序 元组集合字典空集合与空字典 函数声明多返回值函数…...

【Linux】常见指令(下)
【Linux】常见指令(下) 通配符 *man指令cp指令echo指令cat指令(简单介绍)cp指令 mv指令alias指令which ctrl ccat指令linux下一切皆文件 more指令less指令head指令tail指令管道 通配符 ‘*’ 通配符’ *‘,是可以匹配…...

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用
1.jps是Java虚拟机的进程状态工具,用于列出正在运行的Java进程 jps命令的使用:cmd打开直接jps 1.1不带参数: jps 默认情况下,列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l:显示完整的主类名或 JAR 文件…...

实验三:图像的平滑滤波
目录 一、实验目的 二、实验原理 1. 空域平滑滤波 2. 椒盐噪声的处理 三、实验内容 四、源程序和结果 (1) 主程序(matlab) (2) 函数GrayscaleFilter (3) 函数MeanKernel (4) 函数MedFilter 五、结果分析 1. 空域平滑滤波 2. 椒盐噪声的处理…...

VUE前端HTML静默打印(不弹出打印对话框)PDF简单方案
前言 在做打印功能的时候,以前大部分客户端都是用C#做的,静默打印(也就是不弹出打印对话框)比较简单。 但是使用浏览器作为客户端,静默打印(也就是不弹出打印对话框)做起来就比较困难。困难的…...

大数据hive表和iceberg表格式
iceberg: https://iceberg.apache.org/ iceberg表,是一种面向大型分析数据集的开放表格式,旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作,并提供 ACID 事务、多版本控制和模式演化等特性,…...

flutter 手写 TabBar
前言: 这几天在使用 flutter TabBar 的时候 我们的设计给我提了一个需求: 如下 Tabbar 第一个元素 左对齐,试了下TabBar 的配置,无法实现这个需求,他的 配置是针对所有元素的。而且 这个 TabBar 下面的 滑块在移动的时…...

一个引发openssl崩溃问题案例
1 背景 最近用libevent写了一个https代理功能,在调研的时候,遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…...

如何申请抖音本地生活服务商?3种方式优劣势分析!
随着多家互联网大厂在本地生活板块的布局力度不断加大,以抖音为代表的头部互联网平台的本地生活服务商成为了创业赛道中的大热门,与抖音本地生活服务商怎么申请等相关的帖子,更是多次登顶创业者社群的话题榜单。 就目前的市场情况来看&#x…...
【项目-轻量级Web Server lock类】
信号同步机制封装 Lock类信号量——sem类初始化信号量sem_init()销毁信号量sem_destory()对信号量进行P操作sem_wait()对信号进行V操作sem_post() 互斥锁——locker类初始化互斥量pthread_mutex_init()销毁互斥量pthread_mutex_destroy()给互斥锁加锁pthread_mutex_lock()解锁互…...
数据分析_计划
我做大数据的有6年了,以前都是用sql,或者spark,java,scala,python去做。现在这些平台搭建、维护、大多数都是搭建一次就完了,而且维护大多是大厂直接用云平台去做。ETL也是就做一次就够了,我们公…...

LDAPWordlistHarvester:基于LDAP数据的字典生成工具
关于LDAPWordlistHarvester LDAPWordlistHarvester是一款功能强大的字典列表生成工具,该工具可以根据LDAP中的详细信息生成字典列表文件,广大研究人员随后可以利用生成的字典文件测试目标域账号的非随机密码安全性。 工具特征 1、支持根据LDAP中的详细信…...

dhtmlx-gantt甘特图数据展示
官网文档:甘特图文档 实现效果: 首先需要下载 dhtmlx-gantt组件 npm i dhtmlx-gantt //我项目中使用的是"dhtmlx-gantt": "^8.0.6" 这个版本,不同的版本api或是文档中存在的方法稍有差异 界面引用 <template>&l…...

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸
当攻击者获得一个容器环境的shell权限时,攻击者往往会尝试进行容器逃逸,利用容器环境中的错误配置或是漏洞问题,从容器成功逃逸到宿主机,从而获取到更高的访问权限。 在本节课程中,我们将详细介绍一些常见的容器逃逸方…...
初学者指南:如何搭建和配置 Nginx 服务器
初学者指南:如何搭建和配置 Nginx 服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文将详细介绍如何在 Linux 上安装、配置和管理 Nginx 服务器。 一、安装 Nginx Nginx 可以安装在多种操作系统上&#x…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...

Linux入门课的思维导图
耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...

Redis专题-实战篇一-基于Session和Redis实现登录业务
GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...