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


猜你喜欢
- 前言在写项目的时候经常需要特定的时间做一些特定的操作,尤其是游戏服务器,维护线程之类的,这时候就需要用到定时器。如果此时你刚好用的是spri
- 本文实例为大家分享了JavaMail实现带附件的邮件发送的具体代码,供大家参考,具体内容如下发送纯文本的邮件package com.haiw
- 1. Resource Basics(1) Manifest Resources(资源清单)资源在编译期间添加到程序集。如果要将资源嵌入到程
- 一、背景在我们编写程序的过程中,程序中可能随时发生各种异常,那么我们如何优雅的处理各种异常呢?二、需求1、拦截系统中部分异常,返回自定义的响
- 委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针。回调函数c++中的回调函数,就是用函数指针来实现的。类
- 本文实例讲述了C#实现生成mac地址与IP地址注册码的两种方法,分享给大家供大家参考之用。具体方法如下:方法一:using System;u
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- 项目地址: GITHUB (本地下载)java mybatis 多表查询简介实现简单的实体类操作多表, 首先你的项目是
- 在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#
- 小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/fra
- 注解说明使用注解: @PostConstruct效果:在Bean初始化之后(构造方法和@Autowired之后)执行指定操作。经常用在将构造
- 嵌套滚动介绍我们知道 NestedScrolling(Parent/Child) 这对接口是用来实现嵌套滚动的,一般实现这对接口的 Pare
- 默认静态资源供SpringBoot有几个默认的静态资源目录,当然也可配置,默认配置的/**映射到/static(或/public ,/res
- 一,简介Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket
- 1、配置 IDEA 的 Maven 环境单击菜单栏中的 File → Settings → Build, Ex
- C#实现:#region 计算字符串相似度 /// &l
- Android插件开启对新Api的支持这一天小王导入了一个库,上线之后直接崩了一大片? 找到其中的问题:什么鬼哦?安卓8.0一下无法使用?
- 目录1、基本语法2、标识符(合法的变量名)3、关键字(保留字)4、注释5、Java 包5.1 package 语句5.2 import 语句
- 普通的公有继承class test1{public: test1(int i) :num1(i) {}privat
- 面向对象编程(Object Oriented Programming)有三大特性:封装、继承、多态。在这里,和大家一起加深对三者的理解。封装