doudizhu
doudizhu copied to clipboard
JavaScript 斗地主算法封装
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 | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |