斗地主棋牌类游戏中的洗牌和发牌算法
前言
洗牌和发牌是棋牌类游戏中,非常重要的两个关键节点,而这两个关键节点涉及的算法,很多同学非常感兴趣,今天,我们就以NodeJS环境为例,通过JS代码给大家解说洗牌和发牌算法。
一、 洗牌算法
1. 采用随机交换策略
【方法一】核心思想:随机产生一个位置与当前位置的牌交换。
运行结果如下:
【方法二】核心思想:随机产生一个位置与第一张牌进行交换,交换的轮次越多,理论上次序越乱。
运行结果如下:
2. 采用随机排序策略
运行结果如下:
二、 发牌算法
发牌:实质上是将一副打乱顺序后的扑克牌,保留一定底牌后,分给几个不同的玩家。
思路一:由于牌已经打乱了,所以我们可以用扑克牌的总张数-底牌数(arr.length-reservedNum),再拿此数值÷玩家数。得到每个玩家应该得到的牌的张数(暂时不考虑不能整除的情况)。之后调用数组的slice方法从特定序号取牌分发给玩家即可。
运算结果如下:
思路二:一张张的从数组中取牌,直到数组中牌的数量小于等于底牌数为止。
运行结果如下:
实质上洗牌我们就是利用了交换两个变量的位置,发牌利用了数组的相关方法。当然我们还有其他方法可以实现。
斗地主棋牌类游戏中的洗牌和发牌算法相关推荐
- 洗牌、发牌算法 (打乱扑克牌顺序)
#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b ...
- Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌
本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况. 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要 ...
- Java实现斗地主游戏中洗牌,发牌,牌顺序逻辑
需求: 在启动游戏房间时,应提前准备好54张牌完成洗牌,发牌,牌顺序逻辑. 分析: 1.当系统启动的同时需要准备好数据的时候,就可以用静态代码块了. 2.洗牌就是打乱牌的顺序. 3.定义三个玩家.依次 ...
- 棋牌类游戏算法–牌分类_快速分类–三向和双枢轴
棋牌类游戏算法–牌分类 毫无疑问,Quicksort被认为是本世纪最重要的算法之一,并且它是许多语言的事实上的系统排序,包括Java中的Arrays.sort . 那么,quicksort有何新功能? ...
- Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子
模拟斗地主洗牌,发牌 使用HashMap,TreeSet和List来实现 效果如下图所示: 详细实现代码如下: package star.july.tags;import java.util.Arr ...
- 通过程序实现斗地主过程中的洗牌,发牌和看牌(简约版)
需求:通过程序实现斗地主过程中的洗牌,发牌和看牌 思路: 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 往牌盒里面装牌 洗牌,也就是说把牌打撒,用Collections的shuf ...
- 斗地主系列之洗牌和发牌
1.一些说明: 大家都知道,斗地主的一副牌有54张,三位玩家,每位17张牌,3张底牌(17*3+3 = 54). 所以,我们定义一个List: List cards = new ArrayList&l ...
- 使用Delphi编写棋牌类游戏 – 设计篇(3)
最近几天正在找工作,所以更新BLOG晚了一些.今天在老婆的催促下终于要更新了. 通过以上两篇关于对中心服务器和登录服务器设计的阐述,大家应该对设计它们有了一定的了解.但是中心服务器和登录服务器毕竟是游 ...
- 斗地主算法的设计与实现 五 --洗牌和发牌
本篇简要介绍如何洗牌和发牌. 这2个算法都很简单,有兴趣的同学可以写得更好一点. 关键点说明 a.洗牌算法的思路就是,构造54张牌,打乱牌N次,这个算法可能不够随机. b.发牌算法的思路就是,从洗好的 ...
最新文章
- 操作系统课程设计--使用多线程模拟时间片轮转法调度
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
- < Android数据存储> 任务二 应用程序数据文件夹里的文件读写
- [js] Number()的存储空间是多大?假如接口返回一个超过最大字节的数字怎么办?
- mysql amd.dll 后门_DLL后门清除完全篇
- Tarjan-有向图
- 单片机C语言字符串转数字
- 7-1 十二进制字符串转换成十进制整数(PTA)
- unity资源释放(AssetBundle和Asset)
- Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录
- linux压缩到最小命令,Linux压缩打包命令
- 使用python制作字符视频(蔡徐坤唱跳rap字符视频)
- 标准盒模型和怪异盒模型小结
- ESP32 入门笔记06: WIFI时钟 + FreeRTOS+《两只老虎》 (ESP32 for Arduino IDE)
- 知道两点经纬度,计算双方距离与方向的原理
- AI工程师的自我修养
- [UE5蓝图基础一]13.类似”人类一败涂地”掉落一定距离会回到空中 最终着落点还是设定地形上
- 浅谈在制造业中建设MES系统的成效
- 姿态角速度和机体角速度,横摆角速度(Yaw Rate)估算
- 基于JavaWeb平台的常用物联网硬件接口对接代码总结文档_田超凡
热门文章
- 第十章 DirectX 绘制简单场景,地形,天空盒和跟随摄像机(下)
- 从新手村出来,我在 Apache APISIX 社区发出了第一个 PR
- JAVA语言实现计算器小项目(与Windows附件自带计算器的标准版功能、界面相仿)
- DSP的程序加载与运行方式
- how to extract lzh file in linux
- Windows10状态栏右下角的上升三角号没有了
- FME进阶视频教程:第8节 正则表达式的简介及应用示范
- Python(Python入门安装教程)
- OpenCV笔记_1.cvtColor()Bayer色彩空间
- 【SPSS】列联表分析详细操作教程(附案例实战)