• 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;
    }
    }
  • 相关阅读:
    vue 拖拽移动(类似于iPhone虚拟home )
    鼠标事件-MouseEvent【转】
    JS快速排序 希尔排序 归并排序 选择排序
    JS 继承
    Centos6 iptables 防火墙设置【转】
    centos6 mongodb 安装
    操作系统中涉及的各种调度算法
    循环队列
    队列
    栈(C++)
  • 原文地址:https://www.cnblogs.com/dazhongma/p/11400537.html
Copyright © 2020-2023  润新知