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 相关文章推荐
accesskey 提交
Jun 26 Javascript
关于图片验证码设计的思考
Jan 29 Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
shiro授权的实现原理
Sep 21 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
JavaScript数组特性与实践应用深入详解
Dec 30 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
Feb 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python基类函数的重载与调用实例分析
2015/01/12 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python中时间模块的基本使用教程
2019/05/14 Python
Python3监控疫情的完整代码
2020/02/20 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
python代码能做成软件吗
2020/07/24 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
出纳岗位职责
2013/11/09 职场文书
给校长的一封建议书
2014/03/12 职场文书
启动仪式策划方案
2014/06/14 职场文书
小学见习报告
2014/10/31 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
中学图书馆工作总结
2015/08/11 职场文书