//调用随机数,在我上一篇博文讲过这一个函数。
function roundNum(min = 0, max = 0) {
if (!isNaN(min) && !isNaN(max) && min >= 0 && max >= 0) {
min > max ? [min, max] = [max, min] : [min, max] = [min, max];
return parseInt((max - min + 1) * Math.random() + min);
} else {
return `您输入的有误,请重新输入!!!`;
}
}
//洗牌
function shuffle() {
// 牌组
let pukeCards = ['♠3', '♥3', '♣3', '♦3',
'♠4', '♥4', '♣4', '♦4', '♠5', '♥5', '♣5', '♦5',
'♠6', '♥6', '♣6', '♦6', '♠7', '♥7', '♣7', '♦7',
'♠8', '♥8', '♣8', '♦8', '♠9', '♥9', '♣9', '♦9',
'♠10', '♥10', '♣10', '♦10', '♠J', '♥J', '♣J',
'♦J', '♠Q', '♥Q', '♣Q', '♦Q', '♠K', '♥K', '♣K', '♦K',
'♠A', '♥A', '♣A', '♦A', '♠2', '♥2', '♣2', '♦2',
'small joker', 'big joker'];
let i = 53;
while (i) {
let roundCord = roundNum(0, i );
pukeCards.push(pukeCards[roundCord]);
pukeCards.splice(roundCord, 1);
i--;
}
return pukeCards;
}
//发牌
function deal(puke) {
let player1 = puke.splice(0, 17);
let player2 = puke.splice(0, 17);
let player3 = puke.splice(0, 17);
let bottomCardS = puke.splice(0, 3);
console.log(`玩家1:${player1}`);
console.log(`玩家2:${player2}`);
console.log(`玩家3:${player3}`);
console.log(`底牌:${bottomCardS}`);
}
// 拿到洗过的牌
let account = shuffle();
// 运行发牌实现斗地主自动发牌
deal(account);
想法就是先把整副牌的顺序打乱然后再依次发牌,留下三张为底牌。
用的方法是push()和splice(),首先利用随机数0-53(因为是下标从0开始的)随机到一个下标,使用方法push()将随机的牌添加到数组的最后一项然后使用方法splice()删除该牌,完成过后随机的下标范围减1。因此,在进行循环的时候并不会影响到后面已经随机排序的牌。
当牌洗好过后就可以进行发牌了,使用的还是方法splice();虽然splice是删除,但是它能用变量接收,接收的东西就是删除的东西,因此就实现了发牌的功能。三个玩家一人17张牌,最后三张牌是底牌。
讲道理来说斗地主发牌的话会给你进行排序,但我目前还不知道怎么排序,等我实现了排序过后我会再更新的。

用JS实现一个斗地主发牌器的更多相关文章

  1. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  2. AudioPlayer.js,一个响应式且支持触摸操作的jquery音频插件

    AudioPlayer.js是一个响应式.支持触摸操作的HTML5 的音乐播放器.本文是对其官网的说用说明文档得翻译,博主第一次翻译外文.不到之处还请谅解.之处. JS文件地址:http://osva ...

  3. Unity NGUI 网络斗地主 -发牌 脚本交互

    Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...

  4. 用 EPWA 写一个 图片播放器 PicturePlayer

    用 EPWA 写一个 图片播放器  PicturePlayer  . 有关 EPWA,见 <我发起并创立了一个 EPWA 的 开源项目>   https://www.cnblogs.com ...

  5. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  6. Java练习——扑克牌发牌器

    Java练习——扑克牌发牌器声明:学习自其他博主,感谢分享,这里自己也写了一下.实现思路 - 构建一张扑克牌 - 构建一套扑克牌 - 测试  构建一张扑克牌 /** * @author 冬冬 * 定义 ...

  7. 前端与编译原理——用JS写一个JS解释器

    说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念.作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于"抽象语法树(AST)".但这仅仅是个开头而已.编 ...

  8. Java 用集合实现简单的斗地主发牌

    创建数组.集合,存放数据 public class FightAgainstLandlords { /** * poker集合,存储54张牌 */ private ArrayList<Strin ...

  9. 手把手从零开始---封装一个vue视频播放器组件

    现在,在网页上播放视频已经越来越流行,但是网上的资料鱼龙混杂,很难找到自己想要的,今天小编就自己的亲身开发体验,手把手从零开始---封装一个vue视频播放器组件. 作为一个老道的前端搬砖师,怎么可能会 ...

随机推荐

  1. 集合类 collection接口 LinkedList

    LinkedList 是另外一种重要的数据结构形式, 底层是使用了双向链表数据结构, 特点: 查询速度慢,增删快. 继承关系如下: 可以发现,LinkedList同时实现了Quene和Deque接口. ...

  2. 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

    目录 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:[CISCN2019 华北赛区 Day2 Web1] ...

  3. 20189220 余超《Linux内核原理与分析》第一周作业

    实验一 Linux系统简介 通过实验一主要是学习到了Linux 的历史简介,linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等.linux具有稳 ...

  4. 第06组 Alpha冲刺(4/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了用户联系模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...

  5. Android相关属性的介绍:android:exported = true

    在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动:false不允许被启动. android:exported 是Androi ...

  6. 用SC命令 添加或删除windows服务提示OpenSCManager 失败5

    在安装命令行中安装  windowsOpenSCManager 失败5  的错误,原因是当前用户的权限不足,需要做的是在注册表 HKEY_LOCAL_MACHINE\Software\Microsof ...

  7. 深入分析GCC

    深入分析GCC 目录 前言章 GCC概述 11.1 GCC的产生与发展 11.2 GCC的特点 21.3 GCC代码分析 3第2章 GCC源代码分析工具 42.1 vim ctags代码阅读工具 42 ...

  8. plsql 的三种循环

    set serveroutput on declare pnum ; begin loop dbms_output.put_line(pnum); pnum :; end loop; end; / s ...

  9. EasyNVR摄像机网页直播之问题解决:Failed:SYSTEM\CurrentCont......\Application\EasyNVR_Service registry key already

    背景分析 经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播产品,EasyNVR主要功能在于通过RTSP/ONvif协议,接入前端音视频采集设备,通过EasyNVR软硬件产品将拉取过来的 ...

  10. SQL Server跨服务器操作数据库

    今天给大家来分享一下跨服务器操作数据库,还是以SQL Server的管理工具(SSMS)为平台进行操作. 什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库 ...