前言

洗牌和发牌是棋牌类游戏中,非常重要的两个关键节点,而这两个关键节点涉及的算法,很多同学非常感兴趣,今天,我们就以NodeJS环境为例,通过JS代码给大家解说洗牌和发牌算法。

一、 洗牌算法

1. 采用随机交换策略

【方法一】核心思想:随机产生一个位置与当前位置的牌交换。

运行结果如下:

【方法二】核心思想:随机产生一个位置与第一张牌进行交换,交换的轮次越多,理论上次序越乱。

运行结果如下:

2. 采用随机排序策略

运行结果如下:

二、 发牌算法

发牌:实质上是将一副打乱顺序后的扑克牌,保留一定底牌后,分给几个不同的玩家

思路一:由于牌已经打乱了,所以我们可以用扑克牌的总张数-底牌数(arr.length-reservedNum),再拿此数值÷玩家数。得到每个玩家应该得到的牌的张数(暂时不考虑不能整除的情况)。之后调用数组的slice方法从特定序号取牌分发给玩家即可。

运算结果如下:

思路二:一张张的从数组中取牌,直到数组中牌的数量小于等于底牌数为止。

运行结果如下:

实质上洗牌我们就是利用了交换两个变量的位置,发牌利用了数组的相关方法。当然我们还有其他方法可以实现。

斗地主棋牌类游戏中的洗牌和发牌算法相关推荐

  1. 洗牌、发牌算法 (打乱扑克牌顺序)

      #include <stdio.h> #include <stdlib.h> #include <time.h> int  d[6]; int  i,n,a,b ...

  2. Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌

    本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况. 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要 ...

  3. Java实现斗地主游戏中洗牌,发牌,牌顺序逻辑

    需求: 在启动游戏房间时,应提前准备好54张牌完成洗牌,发牌,牌顺序逻辑. 分析: 1.当系统启动的同时需要准备好数据的时候,就可以用静态代码块了. 2.洗牌就是打乱牌的顺序. 3.定义三个玩家.依次 ...

  4. 棋牌类游戏算法–牌分类_快速分类–三向和双枢轴

    棋牌类游戏算法–牌分类 毫无疑问,Quicksort被认为是本世纪最重要的算法之一,并且它是许多语言的事实上的系统排序,包括Java中的Arrays.sort . 那么,quicksort有何新功能? ...

  5. Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子

    模拟斗地主洗牌,发牌  使用HashMap,TreeSet和List来实现 效果如下图所示: 详细实现代码如下: package star.july.tags;import java.util.Arr ...

  6. 通过程序实现斗地主过程中的洗牌,发牌和看牌(简约版)

    需求:通过程序实现斗地主过程中的洗牌,发牌和看牌 思路: 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 往牌盒里面装牌 洗牌,也就是说把牌打撒,用Collections的shuf ...

  7. 斗地主系列之洗牌和发牌

    1.一些说明: 大家都知道,斗地主的一副牌有54张,三位玩家,每位17张牌,3张底牌(17*3+3 = 54). 所以,我们定义一个List: List cards = new ArrayList&l ...

  8. 使用Delphi编写棋牌类游戏 – 设计篇(3)

    最近几天正在找工作,所以更新BLOG晚了一些.今天在老婆的催促下终于要更新了. 通过以上两篇关于对中心服务器和登录服务器设计的阐述,大家应该对设计它们有了一定的了解.但是中心服务器和登录服务器毕竟是游 ...

  9. 斗地主算法的设计与实现 五 --洗牌和发牌

    本篇简要介绍如何洗牌和发牌. 这2个算法都很简单,有兴趣的同学可以写得更好一点. 关键点说明 a.洗牌算法的思路就是,构造54张牌,打乱牌N次,这个算法可能不够随机. b.发牌算法的思路就是,从洗好的 ...

最新文章

  1. 操作系统课程设计--使用多线程模拟时间片轮转法调度
  2. Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
  3. < Android数据存储> 任务二 应用程序数据文件夹里的文件读写
  4. [js] Number()的存储空间是多大?假如接口返回一个超过最大字节的数字怎么办?
  5. mysql amd.dll 后门_DLL后门清除完全篇
  6. Tarjan-有向图
  7. 单片机C语言字符串转数字
  8. 7-1 十二进制字符串转换成十进制整数(PTA)
  9. unity资源释放(AssetBundle和Asset)
  10. Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录
  11. linux压缩到最小命令,Linux压缩打包命令
  12. 使用python制作字符视频(蔡徐坤唱跳rap字符视频)
  13. 标准盒模型和怪异盒模型小结
  14. ESP32 入门笔记06: WIFI时钟 + FreeRTOS+《两只老虎》 (ESP32 for Arduino IDE)
  15. 知道两点经纬度,计算双方距离与方向的原理
  16. AI工程师的自我修养
  17. [UE5蓝图基础一]13.类似”人类一败涂地”掉落一定距离会回到空中 最终着落点还是设定地形上
  18. 浅谈在制造业中建设MES系统的成效
  19. 姿态角速度和机体角速度,横摆角速度(Yaw Rate)估算
  20. 基于JavaWeb平台的常用物联网硬件接口对接代码总结文档_田超凡

热门文章

  1. 第十章 DirectX 绘制简单场景,地形,天空盒和跟随摄像机(下)
  2. 从新手村出来,我在 Apache APISIX 社区发出了第一个 PR
  3. JAVA语言实现计算器小项目(与Windows附件自带计算器的标准版功能、界面相仿)
  4. DSP的程序加载与运行方式
  5. how to extract lzh file in linux
  6. Windows10状态栏右下角的上升三角号没有了
  7. FME进阶视频教程:第8节 正则表达式的简介及应用示范
  8. Python(Python入门安装教程)
  9. OpenCV笔记_1.cvtColor()Bayer色彩空间
  10. 【SPSS】列联表分析详细操作教程(附案例实战)