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 相关文章推荐
javaScript - 如何引入js代码
Mar 09 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
JS中静态页面实现微信分享功能
Feb 06 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
Mar 04 Javascript
关于react-router的几种配置方式详解
Jul 24 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 Javascript
js页面加载后执行的几种方式小结
Jan 30 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获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
jquery实现楼层滚动效果
2018/01/01 jQuery
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
JS数组实现分类统计实例代码
2018/09/30 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python银行系统实战源码
2019/10/25 Python
python实现简单井字棋游戏
2020/03/04 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
专科应届生求职信
2013/11/24 职场文书
探矿工程师自荐信
2014/01/24 职场文书
护士自我评价范文
2014/01/25 职场文书
中学教师培训制度
2014/01/31 职场文书
社区创先争优承诺书
2014/08/30 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
入党转正申请书范文
2019/05/20 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android