javascript实例--教你实现扑克牌洗牌功能

我们一般都会按照顺序把随机摸过来的牌从小到大的顺序在手上理整齐(记得小时候打牌两副牌手都抓不过来),这篇随笔就是想通过实现这个功能来熟悉下js中排序数组等相关知识。

用到知识点:

1.工厂方式创建对象

2.js数组sort()方法

var testArr = [1, 3, 4, 2];

testArr.sort(function (a,b) {

return a - b;

})

alert(testArr.toString());//1,2,3,4

testArr.sort(function (a, b) {

return b- a;

})

alert(testArr.toString());//4,3,2,1

3.js-Math.radom()随机数

Math.random();//0-1 取得的随机数大于等于0且小于1

4.js数组splice用法

//第一个参数是插入的起始位置

//第二个参数是从起始位置开始删除元素的个数

//第三个参数是在起始位置开始插入的元素

//例子

var testArr = [1, 3, 4, 2];

testArr.splice(1, 0, 8);

alert(testArr.toString());//1,8,3,4,2

var testArr1 = [1, 3, 4, 2];

testArr1.splice(1, 1, 8);

alert(testArr1.toString());//1,8,3,4,2

5.js数组shift用法

//取出数组中的首个元素返回,数组删除第一个元素

//例子

var testArr = [1, 3, 4, 2];

var k=  testArr.shift();

alert(testArr.toString());//3,4,2

alert(k);//1

有了这些基础知识,咱们可以开始打牌了,假设就一个人摸牌,底牌是随机的,我们每次摸来一张牌的时候就要把他插到手上的牌中,保证顺序是从小到大!

第一步:首先我们要写一个生产扑克牌对象的方法:

/*工厂模式创建各种牌

*number:牌上的数字

*type:牌的花色

*/

var Cards = (function () {

var Card = function (number, type) {

this.number = number;

this.type = type;

}

return function (number, type) {

return new Card(number, type);

}

})()

第二步:创建扑克牌,洗牌,存储

var RadomCards = [];//随机牌存储数组

var MyCards = [];//存储摸过来的牌

//花色0-黑桃 1-梅花 2-方块  3-红桃 4-大鬼  5-小鬼

//数值0-13代表 鬼,1,2,3,4,5,6,7,8,9,10,J,Q,K;

function CreatCompeleteCard() {

var index = 2;

var arr = [];

for (var i = 0; i <= 13; i++) {

if (i == 0) {

arr[0] = new Cards(i, 4);

arr[1] = new Cards(i, 5);

} else {

for (var j = 0; j <= 3; j++) {

arr[index] = new Cards(i, j);

index++;

}

}

}

RadomCards = SortCards(arr);

Show();//在页面上显示当前的牌

}

//洗牌

function SortCards(arr) {

arr.sort(function (a, b) {

return 0.5 - Math.random();

})

return arr;

}

第三步:开始摸牌,摸牌的时候我们首先要判断插入的位置,然后把新牌插入到指定位置,形成新的整齐的顺序

//摸牌方法

function GetCards(CardObj) {

var k = InCardsIndex(MyCards, CardObj);//考虑下插入的位置

MyCards.splice(k, 0, CardObj); // 插入形成新的顺序

}

/*【获取牌应该插入的位置】

*arr:当前手里的牌

*obj:新摸到的牌

*/

function InCardsIndex(arr, obj) {

var len = arr && arr.length || 0;

if (len == 0) {

return 0;

}else if (len == 1) {

if (obj.number >= arr[0].number) {

return 1;

} else {

return 0;

}

} else {

var backi = -1;

for (var i = 0; i < len; i++) {

if (obj.number <= arr[i].number) {

backi = i;

break;

}

}

if (backi == -1) {

backi = len;

}

return backi;

}

}

好啦!通过html上的button按钮出发Start来摸牌,点一次摸一张牌!并展示出来

function Start() {//摸牌方法,一次摸一张

if (RadomCards.length > 0) {

GetCards(RadomCards.shift());

Show();

} else {

alert("没有了");

}

}

//该show方法是用来在页面展示当前牌的动向

function Show() {

var lenOld = RadomCards.length;

var lenNew = MyCards.length;

var html = "";

for (var i = 0; i < lenOld; i++) {

html += "

" + RadomCards[i].type + "-

" + RadomCards[i].number + "

";

}

document.getElementById("old").innerHTML=html;

html = "";

for (var i = 0; i < lenNew; i++) {

html += "

" + MyCards[i].type + "-

" + MyCards[i].number + "

";

}

document.getElementById("new").innerHTML=html;

}

上html和css的代码

.boom{

width: 50px;

height: 50px;

border: solid 1px red;

position: absolute;

top: 5px;

left: 5px;

}

.pai

{

width: 50px;

height: 100px;

border: solid 1px red;

margin-left: 3px;

float: left;

}

.new

{

border: solid 1px blue;

}

.nu

{

text-align:center;

font-size:24px;

margin-top:25px;

}

底牌:


我摸到的牌:

相关阅读:

android自定义倒计时控件示例

Win7下QQ远程桌面鼠标常常点击不准确的解决方法

在Linux系统中使用dupeGuru查找并移除重复文件的教程

easyui Droppable组件实现放置特效

Android生存指南之:解Bug策略与思路问题的详解

一个js导致的jquery失效问题的解决方法

基于jQuery的JavaScript模版引擎JsRender使用指南

jQuery的load()方法及其回调函数用法实例

XP系统安装软件提示程序并行配置不正确件的故障原因及解决方法

Win10把文件转为PDF格式详解

MFC绘制不规则窗体的方法

CSS inline-block属性概述及其使用示例

ubuntu安装postgresql和使用方法

在Linux系统中安装和使用apt-file命令

php随机发牌游戏,JavaScript_javascript实例--教你实现扑克牌洗牌功能,我们一般都会按照顺序把随机 - phpStudy...相关推荐

  1. 【实现一个扑克牌洗牌游戏,然后给三个玩家洗牌发牌】

            实现一个扑克牌洗牌游戏,    第1个集合:存储所有数字(2345678910JQKA)    第2个集合:存储所有花色()    将第1个集合和第2个集合混合,再加上两张鬼牌组成54 ...

  2. Java项目:模拟扑克牌洗牌发牌排序

    用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...

  3. 用JAVA实现简单的扑克牌洗牌发牌并排序

    用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...

  4. 用java制作扑克牌_Java实现扑克牌洗牌和发牌

    本文实例为大家分享了Java实现扑克牌洗牌发牌的具体代码,供大家参考,具体内容如下 实现原理:使用4种花色和13个数字组合成52张牌,放进一个集合中:通过把集合数据排序打乱实现洗牌操作,然后在通过循环 ...

  5. 随机发牌_用Python制作4人扑克牌发牌游戏

    扑克牌算是老少皆宜的经典款游戏之一,玩法多样,但万变不离其宗,想要编写扑克牌类游戏,首先得整理清楚发牌的逻辑. 1. 游戏介绍 4名牌手打牌,电脑随机將52张牌(不合大.小王)发给4名牌手,并在屏幕上 ...

  6. 扑克牌洗牌发牌java代码_java实战(一)之Java模仿斗地主洗牌发牌小游戏

    斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异.本节我们先来实现一下斗地主中的简单洗牌.发牌和看牌功能. 按照斗地主的规则,完成洗牌发牌的动作.具体规则为使用 54 张牌打乱顺序,3 ...

  7. python给四个人发牌_python小程序之4名牌手洗牌发牌问题解析

    本文为大家解析了python实现4名牌手洗牌发牌的问题,供大家参考,具体内容如下 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌.创建函数gen_p ...

  8. C语言 扑克牌洗牌发牌统计同花顺个数程序

    目录 一.2个算法关键点 关键点1:洗牌算法 关键点2:查找同花顺算法 二.运行结果 三.完整代码 题目: 一张扑克牌可用结构类型描述,一副扑克牌的52张牌则是一个结构数组. 1.试编写洗牌函数和供4 ...

  9. 扑克牌洗牌发牌,并排序输出(c++)

    52张扑克牌,随机洗牌,然后发牌,并把每个玩家的牌按从大到小的顺序显示 大小规则:AKQJ1098765432 输出效果: 完整代码: #include <iostream> #inclu ...

  10. python扑克牌洗牌_python:面向对象基本知识(二)用类方法实现斗地主洗牌发牌...

    ''' 斗地主 1.牌堆,54张牌,四种花色,2,3,4,5,6,7,8,9,10,J,Q,K,A,大小王 2.洗牌 3.发牌 ''' import random class Poke(): flow ...

最新文章

  1. QuickBI助你成为分析师——数据源FAQ小结
  2. 开源!北大研究生把《统计学习方法》书中全部算法都实现了!
  3. Pgcli—自动完成和语法高亮的Postgres命令行工具
  4. 处理android11以上无法删除相册图片的问题
  5. Tomcat可运行源码资源分享
  6. VMwareworkstation 12安装
  7. HDU 1028 Ignatius and the Princess III
  8. php5 数据库框架,数据库 · FastAdmin - 基于ThinkPHP5的极速后台开发框架文档 · 看云...
  9. 【Python3网络爬虫开发实战】1.4.2-MongoDB安装
  10. python为什么那么多人用_为什么那么多人在学Python?
  11. mysql数据库的创建外键_Mysql表创建外键报错解决方案
  12. java图表标题_Java 创建Excel图表
  13. git/SmartGit切换用户
  14. Flash:LoadVars数据提交与表单处理
  15. C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
  16. 基于 HttpClient 4.5 的 HttpClientUtils
  17. requests结果显示“请开启JavaScript并刷新该页”,selenium不用cookie解决
  18. 爱了爱了!ALIENWAER外星人AW410K机械键盘Cherry茶轴RGB灯光全键无冲!免费包邮送到家!...
  19. manjaro搭建java_Manjaro配置JDK
  20. 联想电脑为什么没有计算机,联想笔记本电脑没有声音怎么办

热门文章

  1. STM32通过IIC驱动MLX90614红外温度传感器
  2. 宋红康jvm学习p1-100
  3. java 门票订购系统_基于jsp的景区门票订购系统-JavaEE实现景区门票订购系统 - java项目源码...
  4. 启动auditd时,报错如下,怎么解决?
  5. Q7:难道不想手工搞个环境?
  6. 如何修改搜索关键词内容
  7. /etc/login.defs配置文件详解
  8. 【地理中国】百年地理大发现(全8集)内容笔记记录
  9. Android解析XML文件(assets目录)
  10. OpenCV入门系列 —— medianBlur中值滤波