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 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
jQuery源码分析之Event事件分析
Jun 07 Javascript
javascript与CSS复习(二)
Jun 29 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
javascript动画算法实例分析
Jul 31 Javascript
几种响应式文字详解
May 19 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 jQuery
angular基于ng-alain定义自己的select组件示例
Feb 23 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
Oct 15 Javascript
微信小程序 如何获取网络状态
Jul 26 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+mysql一个名片库程序
2006/10/09 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
php递归实现无限分类的方法
2015/07/28 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
json简单介绍
2008/06/10 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
浅谈python对象数据的读写权限
2016/09/12 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
一夜的工作教学反思
2014/02/08 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
工程负责人任命书
2014/06/06 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
免职证明样本
2014/10/23 职场文书
人口与计划生育责任书
2015/05/09 职场文书
消防安全培训工作总结
2015/10/23 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers