其他分享
首页 > 其他分享> > js 猜数游戏、斗地主发牌、伪数字

js 猜数游戏、斗地主发牌、伪数字

作者:互联网

//猜数字游戏 //游戏规则:4个0-9之间的随机数由系统生成,每一位各不相同 //数字猜对并且位数也对,A++ //只猜对数字,B++ let readline = require("readline-sync"); //判断数组是否有重复值,有重复返回1,没有重复返回0 let isRepeat = function (arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { return 1; } } } return 0; } //电脑生成4位不重复的数字 let randomNum = function () { let num;//用于生成0-9之间的随机数 let comNum = [];//用于装4个随机数 while (1) { comNum = [];//重要!必须重新初始化数组,否则会造成死循环 for (let i = 0; i < 4; i++) { num = Math.floor(Math.random() * 10); comNum.push(num); } //在不重复的情况下才返回该数组 if (!isRepeat(comNum)) { return comNum; } } } let main = function () { let guessNum;//用于接收用户输入的数字 let a = 0, b = 0, chance = 10;//a和b代表A和B的次数,chance是游戏次数,默认为10次 let comNum = randomNum();//电脑生成4位随机数字 let saySth = ["加油", "还差一点了", "加油少年", "就快猜中了", "下一次你绝对能猜中", "不要灰心", "继续努力", "你能行的", "整理下思路", "仔细思考一下"]; //只要chance不为0,就一直循环 while (chance) { console.log("请输入您猜测的数字:"); guessNum = readline.question("");//guessNum存储用户输入的数字 //判断输入数字的位数 if (guessNum.length != 4) { console.log("您输入的数字的位数不正确"); } else if (isNaN(Number(guessNum)))//判断是否为数字 { console.log("您输入的数字不正确"); } else { guessNum = guessNum.split("");//将字符串转为数组 let repeat = isRepeat(guessNum);//判断数字是否重复 //如果数字不重复,开始进入判断 if (repeat == 0) { //进行玩家数字和电脑随机数的比较判断 for (let i = 0; i < guessNum.length; i++) { for (let j = 0; j < comNum.length; j++) { if (guessNum[i] == comNum[j]) { //i和j相同代表位数也相同 if (i == j) { a++; } else { b++; } } } } //如果a=4代表全对 if (a == 4) { console.log("恭喜你,猜测正确!"); break; } else { //console.log(comNum);//测试时可以打开,直接看到电脑生成的随机数 console.log(a + "A" + b + "B"); chance--;//游戏次数自减 //chance不为0的时候显示还剩下多少次机会 if (chance != 0) { let index = Math.floor(Math.random() * 10); console.log("你还剩下" + chance + "次机会," + saySth[index]); } //必须重置a和b的值,否则会累加 a = 0; b = 0; } } else { console.log("您输入的数字重复了,请重新输入"); } } } if (chance == 0) { console.log("很遗憾,你已经没有机会了"); console.log("电脑出的数字为:", comNum); } else { console.log("游戏结束,Thank you for playing!"); } } main(); //斗地主发牌程序 //洗牌函数 shuffle() 接收一个数组 let shuffle = function(pokers){ for(let i=0;i<pokers.length;i++) { let random = parseInt(Math.floor(Math.random()*54));//随机生成54张牌的一个随机数 //两张牌进行交换 let temp = pokers[i]; pokers[i] = pokers[random]; pokers[random] = temp; } } //对玩家的牌进行排序 sort()函数 接收一个数组 let sort = function(pokers){ pokers.sort(function(a,b){ if(a.pointValue == b.pointValue) { return a.typeValue - b.typeValue; } else{ return a.pointValue - b.pointValue; } }); } //打印扑克牌的方法 printCard() 接收一个数组 let printCard = function(pokers){ let str = "";//该字符串用于拼接扑克牌信息 for(let i=0;i<pokers.length;i++) { //判断是否为最后一张牌,决定了是否加逗号(,) if(i == pokers.length-1) { if(pokers[i].type) { str += pokers[i].type + pokers[i].point; } else{ str += pokers[i].point } } else{ if(pokers[i].type) { str += pokers[i].type + pokers[i].point + ','; } else{ str += pokers[i].point + ','; } } } return str; } //发牌函数 send() 接收一个数组 let send = function(pokers){ let player1 = pokers.slice(0,17);//玩家1的牌 let player2 = pokers.slice(17,34);//玩家2的牌 let player3 = pokers.slice(34,51);//玩家3的牌 let other = pokers.slice(51);//底牌 //接下来对每个玩家的扑克牌进行排序 sort(player1); sort(player2); sort(player3); sort(other); //将每个玩家的扑克牌打印出来 console.log("玩家1的牌为:",printCard(player1)); console.log("玩家2的牌为:",printCard(player2)); console.log("玩家3的牌为:",printCard(player3)); console.log("底牌为:",printCard(other)); } //主函数 let main = function(){ //组合扑克牌对象 let points = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"];//扑克牌的点数 let types = ["黑桃","红桃","梅花","方块"];//扑克牌的花色 let pokers = [];//声明一个空数组用于存放生成的扑克牌 for(let i=0;i<points.length;i++) { for(let j=0;j<types.length;j++) { //对象的属性依次为: 点数值 花色值 显示的点数 显示的花色 pokers.push({pointValue:i,typeValue:j,point:points[i],type:types[j]}); } } //从3-K 点数值依次为 0-10点 A 11 2 12 小王 13 大王 14 pokers.push({pointValue:13,point:"小王"}); pokers.push({pointValue:14,point:"大王"}); shuffle(pokers);//洗牌函数,将pokers数组传入进行洗牌 send(pokers);//发牌函数,将pokers数组传入发牌函数 } main(); //用户输入数组或者伪数组对象 然后通过一个转换函数 将其转为另一种形式 //如果是数组 就转为伪数组对象 如果是伪数组对象,就转为数组 let readline = require("readline-sync"); console.log("请输入长度:"); let length = parseInt(readline.question("")); console.log("请选择数据存储的类型 1. 数组 2. 伪数组对象") let dataType = parseInt(readline.question("")); let arr = [], obj = {};//用于存储用户所输入的数据 //生成对应的数组 或者 对象 for (let i = 0; i < length; i++) { console.log(`请输入第${i + 1}个数据`); let item = readline.question(""); switch (dataType) { case 1: { arr.push(item); break; } case 2: { obj[i] = item; break; } } } //类型转换函数 let typeChance = function (a) { if (Array.isArray(a))//说明传递过来的是一个数组 { let obj = {}; for (let key in a) { obj[key] = a[key]; } return obj; }else { //说明传递过来的是一个对象 let arr = []; for (let key in a) { arr[key] = a[key]; } return arr; } } switch (dataType) { case 1: { console.log("你输入的是数组,", arr); console.log("已经为你转为了伪数组对象", typeChance(arr)); break; } case 2: { console.log("你输入的是伪数组对象,", obj); console.log("已经为你转为了数组", typeChance(obj)); break; } }

标签:pokers,console,log,猜数,斗地主,++,let,数组,发牌
来源: https://www.cnblogs.com/dazhongma/p/11400537.html