java模拟斗地主发牌功能
作者:Zyt119977 发布时间:2023-06-26 08:01:34
标签:java,斗地主,发牌
本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下
1.案例介绍
规则:
组装54张扑克牌
54张牌顺序打乱
三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌
查看三人各自手中的牌(按照牌的大小排序)、底牌
2. 分析
1)、准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
2)、洗牌:
通过数字完成洗牌发牌
发牌: 将每个人以及底牌设计为ArrayList,将后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
3)、看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
3.代码
public class Test7 {
public static void main(String[] args) {
//定义一个Map集合和List集合来存取牌号和索引
Map<Integer, String> map = new HashMap();
List<Integer> pokerindex = new ArrayList<>();
//定义牌
String[] num = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
String[] color = {"♥", "♠", "♣", "♦"};
//存牌号和与之对应的索引
int index = 0;
for (String s : num) {
for (String c : color) {
map.put(index, c + s);
pokerindex.add(index);
index++;
}
}
//存大小王
map.put(index, "大王");
pokerindex.add(index);
index++;
map.put(index, "小王");
pokerindex.add(index);
//打乱牌组;
Collections.shuffle(pokerindex);
//创建四个集合
List<Integer> dipai = new ArrayList<>();
List<Integer> player1 = new ArrayList<>();
List<Integer> player2 = new ArrayList<>();
List<Integer> player3 = new ArrayList<>();
//将打乱的索引数组分配给三个人
for (int i = 0; i < pokerindex.size(); i++) {
if (i > 50) {
dipai.add(pokerindex.get(i));
} else if (i % 3 == 0) {
player1.add(pokerindex.get(i));
} else if (i % 3 == 2) {
player2.add(pokerindex.get(i));
} else if (i % 3 == 1) {
player3.add(pokerindex.get(i));
}
}
//给每个人的牌组排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(dipai);
//显示每个人的牌组
show("张三", map, player1);
show("李四", map, player2);
show("王五", map, player3);
show("底牌", map, dipai);
}
//定义一个方法用来显示牌组
public static void show(String name, Map<Integer, String> map, List<Integer> player) {
System.out.print(name);
for (int i = 0; i < player.size(); i++) {
Integer ii = player.get(i);
System.out.print(map.get(ii) + " ");
}
System.out.println();
}
}
来源:https://blog.csdn.net/Zyt119977/article/details/109286781
0
投稿
猜你喜欢
- MyBatis的注解实现复杂映射开发实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解
- 一、注解@PostConstruct使用注解@PostConstruct是最常见的一种方式,存在的问题是如果执行的方法耗时过长,会导致项目在
- session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态,在会话存储的信息,在浏览器发出后续请求时可以获
- springboot2启动时执行,初始化(或定时任务)servletContext需求:springboot 启动后自动执行,初始化数据,并
- 前言现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependenc
- 在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如w
- 一、什么是备忘录模式定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
- 一、任务和执行策略之间的隐性耦合Executor可以将任务的提交和任务的执行策略解耦只有任务是同类型的且执行时间差别不大,才能发挥最大性能,
- MyBatis的注解实现复杂映射开发实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解
- 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的具体执行过程,我画了一幅图。Java 源代码文件经过编译器编译后生成字节码文
- Java 用反射设置对象的属性值实例详解/** * 用反射设置对象的属性值 * @param obj 需要設置值的對象 * @param f
- 1、需要引入依赖<dependency> &l
- java 工厂模式的实例详解工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。而客户是要和产品打交道,所以工厂方法模式的意义在于把客户
- 前言Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBa
- 首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接
- 前言博主上个礼拜,已经实现了quarkus的native image应用的上线,经过两天的监控下来,一切运行指标良好,就是内存升到了100M
- 概念Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。优点1.可以动态保存任意多个对象,使用比较方便。2.
- SpringBoot实践,开发社区登录模块今日份开启 发送邮件三个步骤:1、邮箱设置首先需要注册一个新浪邮箱 18215626061@sin
- 前言最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录。供大家学习参考。Synchronized修饰非静态方法Syn
- 最近在配置OpenCV的时候,由于使用的是VS2019,结果找不到Microsoft.Cpp.X64.user这个文件。导致每次新建项目都得