用JS实现一个斗地主发牌器

Posted 何伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JS实现一个斗地主发牌器相关的知识,希望对你有一定的参考价值。

//调用随机数,在我上一篇博文讲过这一个函数。
function roundNum(min = 0, max = 0) {
if (!isNaN(min) && !isNaN(max) && min >= 0 && max >= 0) {
min > max ? [min, max] = [max, min] : [min, max] = [min, max];
return parseInt((max - min + 1) * Math.random() + min);
} else {
return `您输入的有误,请重新输入!!!`;
}
}
//洗牌
function shuffle() {
// 牌组
let pukeCards = [‘♠3‘, ‘♥3‘, ‘♣3‘, ‘♦3‘,
‘♠4‘, ‘♥4‘, ‘♣4‘, ‘♦4‘, ‘♠5‘, ‘♥5‘, ‘♣5‘, ‘♦5‘,
‘♠6‘, ‘♥6‘, ‘♣6‘, ‘♦6‘, ‘♠7‘, ‘♥7‘, ‘♣7‘, ‘♦7‘,
‘♠8‘, ‘♥8‘, ‘♣8‘, ‘♦8‘, ‘♠9‘, ‘♥9‘, ‘♣9‘, ‘♦9‘,
‘♠10‘, ‘♥10‘, ‘♣10‘, ‘♦10‘, ‘♠J‘, ‘♥J‘, ‘♣J‘,
‘♦J‘, ‘♠Q‘, ‘♥Q‘, ‘♣Q‘, ‘♦Q‘, ‘♠K‘, ‘♥K‘, ‘♣K‘, ‘♦K‘,
‘♠A‘, ‘♥A‘, ‘♣A‘, ‘♦A‘, ‘♠2‘, ‘♥2‘, ‘♣2‘, ‘♦2‘,
‘small joker‘, ‘big joker‘];
let i = 53;
while (i) {
let roundCord = roundNum(0, i );
pukeCards.push(pukeCards[roundCord]);
pukeCards.splice(roundCord, 1);
i--;
}
return pukeCards;
}
//发牌
function deal(puke) {
let player1 = puke.splice(0, 17);
let player2 = puke.splice(0, 17);
let player3 = puke.splice(0, 17);
let bottomCardS = puke.splice(0, 3);
console.log(`玩家1:${player1}`);
console.log(`玩家2:${player2}`);
console.log(`玩家3:${player3}`);
console.log(`底牌:${bottomCardS}`);
}
// 拿到洗过的牌
let account = shuffle();
// 运行发牌实现斗地主自动发牌
deal(account);
想法就是先把整副牌的顺序打乱然后再依次发牌,留下三张为底牌。
用的方法是push()和splice(),首先利用随机数0-53(因为是下标从0开始的)随机到一个下标,使用方法push()将随机的牌添加到数组的最后一项然后使用方法splice()删除该牌,完成过后随机的下标范围减1。因此,在进行循环的时候并不会影响到后面已经随机排序的牌。
当牌洗好过后就可以进行发牌了,使用的还是方法splice();虽然splice是删除,但是它能用变量接收,接收的东西就是删除的东西,因此就实现了发牌的功能。三个玩家一人17张牌,最后三张牌是底牌。
讲道理来说斗地主发牌的话会给你进行排序,但我目前还不知道怎么排序,等我实现了排序过后我会再更新的。

以上是关于用JS实现一个斗地主发牌器的主要内容,如果未能解决你的问题,请参考以下文章

斗地主发牌器

揭秘欢乐豆诈骗!Java 如何用集合实现欢乐斗地主发牌+源码解析

代码实现:模拟斗地主洗牌和发牌,牌没有排序

简陋的斗地主,js实现

用集合模拟斗地主发牌

用集合模拟斗地主发牌