/doudizhu

JavaScript 斗地主算法封装

Primary LanguageJavaScriptMIT LicenseMIT

doudizhu

瞎猫的JavaScript 斗地主算法封装

起步 Start

var doudizhu = require('doudizhu')

文档 Doc

洗牌

记录并返回1副乱序id的扑克牌数组

doudizhu.getShuffleCards()
/*
[ 15,  43,  49,  21,  51,  40,  23,  14,  25,  5,  4,  44,  3,  32,  53,  11,  41,  27,  7,  18,  38,  28,  8,  31,  17,  36,  42,  26,  47,  45,  22,  12,  34,  16,  2,  9,  1,  35,  52,  10,  20,  30,  29,  46,  13,  0,  6,  39,  48,  24,  19,  37,  33,  50 ]
*/

查看当前洗完的扑克牌

返回上次洗牌完成后的1副扑克牌数组(未洗过牌则为空数组)

doudizhu.getCards()
/*
[ 15,  43,  49,  21,  51,  40,  23,  14,  25,  5,  4,  44,  3,  32,  53,  11,  41,  27,  7,  18,  38,  28,  8,  31,  17,  36,  42,  26,  47,  45,  22,  12,  34,  16,  2,  9,  1,  35,  52,  10,  20,  30,  29,  46,  13,  0,  6,  39,  48,  24,  19,  37,  33,  50 ]
*/

发牌

返回1个对象记录4组牌:3组17张的随机牌、1组3张的地主牌

doudizhu.dealCards()
/*
{
    player1: [ 15, 21, 23, 5, 3, 11, 7, 28, 17, 26, 22, 16, 1, 10, 29, 0, 48 ],
    player2: [ 43, 51, 14, 4, 32, 41, 18, 8, 36, 47, 12, 2, 35, 20, 46, 6, 24 ],
    player3: [ 49, 40, 25, 44, 53, 27, 38, 31, 42, 45, 34, 9, 52, 30, 13, 39, 19 ],
    leaveCards: [ 37, 33, 50 ]
}
*/

获取扑克牌组的类型及权重信息

接收1个扑克牌id数组(可乱序),返回1个牌信息对象 如果出牌不合规则则返回 false

doudizhu.getCardType([8,12,16,20,24])
/*
{
    cardType: 'DAN_SHUN_ZI', // 牌型别名
    cardTypeWeight: 1, //牌类型权重
    groupCardsWeight: 1 // 当前扑克牌组权重
}
*/

压牌

接收2个扑克牌id数组(可乱序),返回两个牌的比较结果 若第二组牌可压第一组则返回 true 不可压或者牌不合法则返回 false

doudizhu.beat([8,12,16,20,24], [12,16,20,24,28])
/*
true
*/

默认排序

对给定的数组进行排序,按照从小到大,返回排序后的数组

传入数组元素必须为非负整数,否则返回 false

不限制数组元素大小,不限制数组元素不重复

注意:此排序为直接影响修改原数组

不可直接对当前的整副扑克牌数组对象进行排序,防止造成变量污染,故对此行为进行了异常抛出处理

doudizhu.sort([34, 6, 2, 8, 22])
/*
[ 2, 6, 8, 22, 22, 34 ]
*/

根权重排序

对给定的数组,根据牌权重、花色权重对牌进行排序

一般用于排列玩家手牌排序呈现

传入数组元素应该为小于54的非负整数,不可重复,否则返回false

注意:此排序为直接影响修改原数组

不可直接对当前的整副扑克牌数组对象进行排序,防止造成变量污染,故对此行为进行了异常抛出处理

doudizhu.weightSort([34, 6, 2, 8, 22, 53])
/*
[ 8, 22, 34, 2, 6, 53 ]
*/

牌型 Type

牌型 别名 权重 示例
单条 DAN_TIAO 1
单顺子 DAN_SHUN_ZI 1
王炸 WANG_ZHA 3
-- -- -- --
对子 DUI_ZI 1
双顺子 SHUANG_SHUN_ZI 1
-- -- -- --
三条 SAN_TIAO 1
三带一 SAN_DAI_YI 1
三带一对 SAN_DAI_YI_DUI 1
三顺子 SAN_SHUN_ZI 1
飞机带单 FEI_JI_DAI_DAN 1
飞机带对 FEI_JI_DAI_DUI 1
-- -- -- --
炸弹 ZHA_DAN 2
四带双单 SI_DAI_SHUANG_DAN 1
四带双对 SI_DAI_SHUANG_DUI 1