• 扑克牌顺子


    前几天,朋友找我一起做个扑克牌顺子的游戏, 由于忙于工作一直没时间看, 今天空下来研究一下;

    顺带介绍下那位朋友, 萝卜爱吃青菜 有兴趣的朋友可以去他的博客逛逛, 里面有好多他的实用分享;

    下面进入正题:

    描述:从扑克牌中随机抽5 张牌,判断是不是一个顺子,即这5 张牌是不是连续的。2-10 为数字本身,A 为1,J 为11,Q 为12,K 为13,而大小王可以看成任意数字

     1 function pokerGame() {
     2   let pokerArr = []; // 存放54张牌
     3   let testArr = [];   // 存放随机抽取的5张牌
     4   for(let i = 1; i < 14; i++) {
     5     for(let j = 0; j < 4; j++) {
     6       pokerArr.push(i)  // 添加52张牌 进牌组
     7     }
     8   };
     9 
    10   // 添加大小鬼牌
    11   pokerArr.push('x');
    12   pokerArr.push('X');
    13   
    14   // 随机抽取5张牌 进行测试
    15   for(var i = 0; i < 5; i++) {
    16     let length = pokerArr.length;
    17     //  为了还原真实性, 每次抽取都会从原有牌组剩余部分 进行重新抽取
    18     let randomNum = Math.floor(Math.random()*length);
    19     let arr = pokerArr.splice(randomNum, 1)
    20     testArr = testArr.concat(arr)
    21   };
    22 
    23   // 进行测试
    24   isStraight(testArr)
    25 }
    26 
    27 function isStraight(testArr) {
    28   let arrFive = [...testArr]; // 对传入参数进行赋值,
    29   let arr = []; // 用于存放 除大小鬼之外的数字牌
    30   let ghost = 0;  // 记录 大小鬼牌的张数
    31   let bool = true;  // 判定是否为顺子
    32 
    33   // 记录鬼牌出现次数, 并在 arr 中剔除鬼牌
    34   arrFive.forEach( item => {
    35     isNaN(item) ? ghost++ : arr.push(item)
    36   } )
    37 
    38   // 对剩余牌 进行排序
    39   arr.sort( (a, b) => a - b )
    40 
    41   for(var i = arr.length-1; i > 0; i--) {
    42     
    43     // 当前牌和下一张牌的差值
    44     let val = arr[i] - arr[i-1];
    45     switch(val) {
    46       case 1:
    47         break;
    48       case 2:
    49       case 3:
    50         // 因为鬼牌可以变成任意一张牌, 所以当差值为 2 和 3 时, 可以使用鬼牌进行替换, 鬼牌使用 这里要重新记录鬼牌是剩余张数
    51         ghost -= (val-1)
    52         break;
    53       default:
    54         // 如果差值为 0 则说明存在重复的牌,或者 
    55         // 如果差值大于 3 即使当前测试牌组 两张鬼牌都存在,也不能满足顺子要求, 直接判定 测试牌组不为顺子
    56         return bool = false
    57     }
    58 
    59     if(ghost < 0) {
    60       // 在循环内, 如果 ghost 小于0 说明 鬼牌次数使用完毕,仍不满足要求, 判定  测试牌组不为顺子
    61       return bool = false
    62     }
    63   }
    64 
    65   if(bool) {
    66     console.log('「^^^^^^^^^^^^^^^^^^^^^^^^^^^^')
    67     console.log('测试牌组', arrFive)
    68     console.log(arr)
    69     console.log('____________________________」')
    70   }
    71 }
    72 
    73 // 进入循环测试
    74 for(var i = 0; i < 30; i++) {
    75   console.log('测试执行:', i+1)
    76   pokerGame();
    77 }
  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    学习进度条
    软件工程练习——买书
    软件工程练习——找水王2
    Java作业07
    Java课堂作业06
    读《大道至简》第六章有感
    Java课堂作业05
  • 原文地址:https://www.cnblogs.com/vant850/p/10942322.html
Copyright © 2020-2023  润新知