java发牌最后三张_设计一个3人斗地主的发牌算法(54张牌发给三个人,最后剩下3张)...

这篇博客介绍了两种在Java中实现斗地主发牌的算法:一是先洗牌再按顺序发牌,二是发牌时直接随机拿取。通过生成扑克牌数组,使用随机数进行洗牌或直接随机取牌,确保公平地将54张牌发给三位玩家,最终留下三张底牌。
摘要由CSDN通过智能技术生成

方式一:洗牌然后按顺序发

// 洗牌算法,传入一个数组,随机乱序排列,不污染原数组

function shuffle(arr) {

if (!arr) {

throw '错误,请传入正确数组';

}

var newArr = arr.slice(0);

for (var i = newArr.length - 1; i >= 0; i--) {

// 随机范围[0,1)

var randomIndex = Math.floor(Math.random() * (i + 1));

var itemAtIndex = newArr[randomIndex];

newArr[randomIndex] = newArr[i];

newArr[i] = itemAtIndex;

}

return newArr;

}

// 生成一副扑克牌

function generatePoker() {

// 第一步:定义四个花色,这里就用中文了

var cardType = ['黑桃', '红桃', '梅花', '方块'];

// 第二步:定义13张普通牌

var cardValue = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];

// 第三步:定义2张特殊牌,大王与小王

var specialCard = ['大王', '小王'];

// 第四步:根据上述数组生成54张牌

var allCards = [];

for (var i = 0,len1 = cardType.length; i < len1; i++) {

for (var j = 0,len2 = cardValue.length; j < len2; j++) {

allCards.push(cardType[i] + cardValue[j]);

}

}

allCards = allCards.concat(specialCard);

return allCards;

}

// 随机发N张扑克牌

function dealPoker(num) {

if(!num || num>54 || typeof(num)!== 'number') {

throw '错误,传入的数字非法,只能是[1-54]';

}

// 生成扑克牌

var allCards = generatePoker();

// 洗牌-不污染原先的数组

var randomCards = shuffle(allCards);

return randomCards.slice(0, num);

}

// 测试用例

console.log(dealPoker(3));

console.log(dealPoker(4));

console.log(dealPoker(10));

// 生成一副洗好的全新乱序牌

var poker = dealPoker(54);

// 接下来如果想要发牌,依次将数组pop即可,因为它本身已经被打乱了,可以一直发完54张

方式二:发的时候直接随机拿取牌

function generatePoker() {

// 第一步:定义四个花色,这里就用中文了

var cardType = ['黑桃', '红桃', '梅花', '方块'];

// 第二步:定义13张普通牌

var cardValue = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];

// 第三步:定义2张特殊牌,大王与小王

var specialCard = ['大王', '小王'];

// 第四步:根据上述数组生成54张牌

var allCards = [];

for (var i = 0,len1 = cardType.length; i < len1; i++) {

for (var j = 0,len2 = cardValue.length; j < len2; j++) {

allCards.push(cardType[i] + cardValue[j]);

}

}

allCards = allCards.concat(specialCard);

return allCards;

}

var puke=generatePoker();

function players(){

var plays=[[],[],[]];

var fa_len=(puke.length-3)/3;

for(var j=0;j<3;j++){

for(var i=0;i

var l=Math.floor(Math.random()*puke.length);

var kk=puke.splice(l,1)

plays[j].push(kk);

}

}

return plays;

}

console.log(players());

console.log(puke);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值