发牌乱序纯js

/**
 *  发牌程序
 *  共:54张 52张 
 *  玩家1: 17张
 *  玩家2: 17张
 *  玩家3: 17张
 *  底牌: 3张
 *  1. 生成 54张
 *  2. 分发 17-17-17-3 打乱
 *  3. 排序 
 */
 const number = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2'];
 const flower = ["♠️", "♥️", "♣️", "♦️"]; // 黑桃 < 红心 < 梅花 < 方块
 
 
 function create() {
     // 生成牌
     let arr = []; // 装所有牌
     for (let f = 0; f < flower.length; f++) {
         for (let n = 0; n < number.length; n++) {
             let obj = {
                 str: flower[f] + number[n],
                 number: n,
                 flower: f
             };
             arr.push(obj);
         }
     }
     arr.push({
         str: '小王',
         number: 53
     }, {
         str: '小王',
         number: 54
     });
     // console.log(arr, arr.length);
 
     // 54 个随机下标
     let s = new Set();
     while (s.size < 54) {
         s.add(random(arr.length - 1));
     }
     let randomIndexArr = [...s]; // 54 数字
     // console.log(randomIndexArr);
     arr = randomIndexArr.map(item => arr[item]); //54个乱序牌 
 
     // console.log('乱序后:', arr);
 
     // 发牌
     let player1 = arr.slice(0, 17);
     let player2 = arr.slice(17, 34);
     let player3 = arr.slice(34, 51);
     let def = arr.slice(51, 54);
     // console.log(player1.length, player2.length, player3.length, def.length);
 
     return [player1, player2, player3, def];
 }
 let [player1, player2, player3, def] = create();
 
 function sort(arr) {
     arr.sort((a, b) => {
         if (a.number == b.number) {
             return a.flower - b.flower
         } else {
             return a.number - b.number
         }
     });
     console.log('排序后:', arr);
 }
 
 sort(player1);
 sort(player2);
 sort(player3);
 sort(def);
 // let arr = [3, 6, 12, 4];
 // player1.sort((a, b) => a - b);
 // 如果点数相同,按花色排
 
 // 随机数
 function random(min, max) {
     if (!max) {
         [max, min] = [min, 0];
     }
     let number = parseInt(Math.random() * (max - min + 1)) + min;
     return number;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值