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

基于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<>();//静态代码块//特点&#xff1a;随着类的加载而在加载的&#xff0c;而且只执行一次。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在智能双旋机器人中的应用&#xff0c;无疑为这一领域的创新和发展注入了新的活力。作为一款高性能的磁性位置传感器&#xff0c;MT6825以其独特的优势&#xff0c;在智能双旋机器人的运动控制、定位精度以及系统稳定性等方面发挥了关键作用。 www.abitions.com …...

Datawhale 2024 年 AI 夏令营第二期——基于术语词典干预的机器翻译挑战赛

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

Qt 多窗体、复用窗口的使用

1.继承自QWidge的窗口的呈现&#xff0c;作为tabPage呈现&#xff0c;作为独立窗口呈现 2.继承自QMainWindow的窗口的呈现&#xff0c;作为abPage呈现&#xff0c;作为独立窗口呈现 1. 继承自QWidge的窗口的呈现 1.1 作为tabPage呈现 void MutiWindowExample::on_actWidgetI…...

python 基础语法整理

注释声明命名规范数据类型简单数据类型复合数据类型 打印输出类型转换随机数获取布尔类型流程控制语句循环语句字符串操作拼接替换分割与连接大小写转换空白字符删除 切片列表操作访问/赋值判断是否存在元素添加/删除复制排序 元组集合字典空集合与空字典 函数声明多返回值函数…...

【Linux】常见指令(下)

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

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具&#xff0c;用于列出正在运行的Java进程 jps命令的使用&#xff1a;cmd打开直接jps 1.1不带参数&#xff1a; jps 默认情况下&#xff0c;列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l&#xff1a;显示完整的主类名或 JAR 文件…...

实验三:图像的平滑滤波

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

VUE前端HTML静默打印(不弹出打印对话框)PDF简单方案

前言 在做打印功能的时候&#xff0c;以前大部分客户端都是用C#做的&#xff0c;静默打印&#xff08;也就是不弹出打印对话框&#xff09;比较简单。 但是使用浏览器作为客户端&#xff0c;静默打印&#xff08;也就是不弹出打印对话框&#xff09;做起来就比较困难。困难的…...

大数据hive表和iceberg表格式

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

flutter 手写 TabBar

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

一个引发openssl崩溃问题案例

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

如何申请抖音本地生活服务商?3种方式优劣势分析!

随着多家互联网大厂在本地生活板块的布局力度不断加大&#xff0c;以抖音为代表的头部互联网平台的本地生活服务商成为了创业赛道中的大热门&#xff0c;与抖音本地生活服务商怎么申请等相关的帖子&#xff0c;更是多次登顶创业者社群的话题榜单。 就目前的市场情况来看&#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年了&#xff0c;以前都是用sql&#xff0c;或者spark&#xff0c;java&#xff0c;scala&#xff0c;python去做。现在这些平台搭建、维护、大多数都是搭建一次就完了&#xff0c;而且维护大多是大厂直接用云平台去做。ETL也是就做一次就够了&#xff0c;我们公…...

LDAPWordlistHarvester:基于LDAP数据的字典生成工具

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

dhtmlx-gantt甘特图数据展示

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

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸

当攻击者获得一个容器环境的shell权限时&#xff0c;攻击者往往会尝试进行容器逃逸&#xff0c;利用容器环境中的错误配置或是漏洞问题&#xff0c;从容器成功逃逸到宿主机&#xff0c;从而获取到更高的访问权限。 在本节课程中&#xff0c;我们将详细介绍一些常见的容器逃逸方…...

初学者指南:如何搭建和配置 Nginx 服务器

初学者指南&#xff1a;如何搭建和配置 Nginx 服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。本文将详细介绍如何在 Linux 上安装、配置和管理 Nginx 服务器。 一、安装 Nginx Nginx 可以安装在多种操作系统上&#x…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...