js计算德州扑克牌面值的方法


Posted in Javascript onMarch 04, 2015

本文实例讲述了js计算德州扑克牌面值的方法。分享给大家供大家参考。具体如下:
1. 代码如下:

var Poker = function(n){

    this.num = (n % 13) + 2;

    this.ch = this.num > 9 ? ("abcdef"[this.num-10]) : this.num;

    this.show = "0,1,2,3,4,5,6,7,8,9,10,J,Q,K,A".split(",")[this.num];

    this.color = "♠♥♣♦"[n / 13 | 0];

    this.toString = function(){

        return this.color + this.show;

    };

};

var z = function(arg){ //同花顺

    var a = arg,

        t = a[0];

    for (var i = 1; i < a.length; i++) {

        if( a[i].color === t.color && a[i].num === t.num + 1 ){

            t = a[i];

        }else if( i === a.length-1 && t.num === 5 && a[i].num === 14 && a[i].color === t.color){

            t = a[0];

        }else{

            return; 

        }

    };

    return "z" + t.ch;

};

var y = function(arg){ //四条

    var a = arg.map(function(p){

            return p.ch;

        }).join(""), 

        mat = a.match(/(\w*)(\w)\2\2\2(\w*)/);

    if( mat ){

        return "y"+mat[2]+mat[1]+mat[3];

    }

};

var x = function(arg){ //葫芦

    var a = arg.map(function(p){

            return p.ch;

        }).join(""), 

        mat;

    if( mat = a.match(/(\w)\1(\w)\2\2/) ){

        return "x" + mat[2] + mat[1];

    }else if( mat = a.match(/(\w)\1\1(\w)\2/) ){

        return "x" + mat[1] + mat[2];

    }

};

var w = function(arg){ //同花

    var a = arg,

        t = a[0];

    for (var i = 1; i < a.length; i++) {

        if( a[i].color === t.color ){

            t = a[i];

        }else{

            return; 

        }

    };

    return "w" + arg.map(function(p){

        return p.ch;

    }).join("");

};

var v = function(arg){ //顺子

    var a = arg,

        t = a[0];

    for (var i = 1; i < a.length; i++) {

        if( a[i].num === t.num + 1 ){

            t = a[i];

        }else if( i === a.length-1 && t.num === 5 && a[i].num === 14){

            t = a[0];

        }else{

            return; 

        }

    };

    return "v" + t.ch;

};

var u = function(arg){ //三条

    var a = arg.map(function(p){

            return p.ch;

        }).join(""), 

        mat;

    if( mat = a.match(/(\w*)(\w)\2\2(\w*)/) ){

        return "u" + mat[2] + mat[1] + mat[3];

    }

};

var t = function(arg){ //两对

    var a = arg.map(function(p){

            return p.ch;

        }).join(""), 

        mat;

    if( mat = a.match(/(\w*)(\w)\2(\w)\3(\w*)/) ){

        return "t" + mat[3] + mat[2] + mat[1] + mat[4];

    }else if( mat = a.match(/(\w)\1(\w)(\w)\3/) ){

        return "t" + mat[3] + mat[1] + mat[2];

    }

};

var s = function(arg){ //一对

    var a = arg.map(function(p){

            return p.ch;

        }).join(""), 

        mat;

    if( mat = a.match(/(\w*)(\w)\2(\w*)/) ){

        return "s" + mat[2] + mat[1] + mat[3];

    }

};

var r = function(arg){ //高牌

    return arg.map(function(p){

        return p.ch;

    }).join("");

};

var score = function(){

    var a = [].map.call(arguments, function(p){

        return new Poker(p);

    }).sort(function(p1,p2){

        return p1.num - p2.num;

    });

    console.log( a.join(",") );

    return z(a) || y(a) || x(a) || w(a) || v(a) || u(a) || t(a) || s(a) || r(a);

};

console.log( score( 50, 49, 47, 46, 48 ) ); // 同花顺

console.log( score( 36, 49, 23, 10, 48 ) ); // 四条

console.log( score( 36, 49, 23, 22, 48 ) ); // 葫芦

console.log( score( 50, 40, 47, 43, 48 ) ); // 同花

console.log( score( 50, 36, 47, 46, 48 ) ); // 顺子

console.log( score( 36, 49, 25, 22, 48 ) ); // 两对

console.log( score( 36, 49, 20, 27, 47 ) ); // 一对

console.log( score( 36, 11, 20, 27, 47 ) ); // 高牌

2. 运行效果如下图所示:

js计算德州扑克牌面值的方法

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
jquery中通过过滤器获取表单元素的实现代码
Jul 05 Javascript
基于mootools插件实现遮罩层新手引导
May 24 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
js的touch事件的实际引用
Oct 13 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
Jquery实现跨域异步上传文件总结
Feb 03 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
Vue数据双向绑定的深入探究
Nov 27 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 Javascript
JS轻量级函数式编程实现XDM三
Jun 16 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 #Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 #Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 #Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 #Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 #Javascript
javascript下拉框选项单击事件的例子分享
Mar 04 #Javascript
js实现仿QQ秀换装效果的方法
Mar 04 #Javascript
You might like
php 文章采集正则代码
2009/12/28 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现端口复用实例代码
2014/07/03 Python
django中的setting最佳配置小结
2017/11/21 Python
谈谈python中GUI的选择
2018/03/01 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
PyQt5每天必学之布局管理
2018/04/19 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
PHP数据运算类型都有哪些
2013/11/05 面试题
实习护士自我鉴定
2013/10/13 职场文书
怎样写留学自荐信
2013/11/11 职场文书
打架检讨书500字
2014/01/29 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis