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的trim方法
Oct 09 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
深入理解javascript的执行顺序
Apr 04 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
React Native 截屏组件的示例代码
Dec 06 Javascript
Node.js Express安装与使用教程
May 11 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 Javascript
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 Javascript
记录一次websocket封装的过程
Nov 23 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
论坛头像随机变换代码
2006/10/09 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python实现杨辉三角思路
2017/07/14 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
pyqt5自定义信号实例解析
2018/01/31 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python中的集合介绍
2019/01/28 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
化学相关工作求职信
2013/10/02 职场文书
军训教官感言
2014/03/02 职场文书
护士毕业实习感言
2014/03/05 职场文书
绿色小区申报材料
2014/08/22 职场文书
高一军训的心得体会
2014/09/01 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
华山导游词
2015/02/03 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫