原生js,实现一个终端小游戏!

游戏规则是,开局,系统会先问你玩不玩,如果选择了1,就表示要玩,这时候,系统会随机,生成一个1到21之间的数字,你每次都会随机抽取一个1到21之间的数字,重复抽取,则,抽到的数字会累加,这时候系统会问你抽不抽号码,你如果一直选择抽取,数字,也会累加,如果,你一直抽取,数字累加到大于21过后,就直接判定你自爆了,你输了,系统赢了,你也可以选择,在抽取到一定时候,手动停止,这时候,系统就会,把你抽到的数字总和,和系统生成的数字,比较,谁的数值大,谁就获得胜利。数字相同,就获得平局(终端运行)


function randomNum(min, max = 0) {                       //随机函数   ,
    min > max ? [min, max] = [max, min] : "";
    return parseInt((max - min + 1) * Math.random() + min);
}
const rs = require("readline-sync");

//构建一个玩家类
class Player {
    constructor(num) {
        this.num = num;          //每次抽到的点数
        this.sum = 0;            //点数的总和
    }
}

//系统类
class Compter {
    constructor(point) {
        this.point = point;      //电脑的点数
    }
    main() {
        let star = null;               //决定玩不玩,默认为空
        console.log(`要不要玩? 1.玩  2.不玩`);               //开局问玩家玩不玩,输入1,玩就进入下一步,输入2,不玩的话,就直接结束代码
        let choice = rs.question();              //获取用户输入
        // if (choice == 1) {
        //     star = true;
        // } else {
        //     console.log(`不玩算了,拜拜6`);
        // }

        choice == 1 ? star = true : console.log(`不玩算了,拜拜6`);  //三目运算法               //判断,用户的输入,输入的如果是,上面声明的变量为true。,如果不是1,结束代码,并提示

        if (star) {                                         //判断上面的变量是不是为true。是true,就代表用户按得就是1
            console.log(`游戏马上开始`);            //提示用户开始后
            this.point = randomNum(10, 21);    //随机生成一个电脑的点数,并把随机的数字,赋值给类里面的点数

            let play = new Player();         //     这时,实例化一个玩家的类

            while (true) {                                //创建一个死循环
                console.log(`抽不抽牌?   1. 抽    2.不抽了`);             //提示用户,要不要抽取点数
                let cards = rs.question() - 0;                  //获取用户的输入

                switch (cards) {                       //判断用户的输入
                    case 1:                                 //如果输入的是1,就随机生成一个玩家的点数,并把随机的数字,赋值给类里面的点数
                        play.num = randomNum(1, 10);
                        play.sum += play.num;                 //并且类里面点数的总和,每次累加抽到的点数

                        if (play.sum > 21) {                  //如果用户一直抽取,就判断,玩家抽取的总和,如果大于21过后。
                            play.sum = 0;                   //玩家点数归零
                            console.log(`你自爆输了!系统获得胜利!`);    //并且直接判定,玩家自爆输了
                            return;                                               //然后结束函数。
                        }
                        // console.log(`玩家点数:${play.sum},系统点数${this.point}`);
                        break;
                    case 2:             //玩家如果,抽取不大于21,输入2,手动停止后,调用,系统类的另一个,方法,并且,把系统点数和玩家点数,当做实参,传到调用的方法的形参里面,去匹对判断,谁的大小,并执行后面代码,输出判断结果。
                        this.box(this.point, play.sum);
                        return;                   //结束函数。
                }
            }
        }
    }

    box(a, b) {                   //接收系统和玩家点数,进行判断。
        if (a > b) {
            console.log(`系统获得胜利`);
        } else if (a < b) {
            console.log(`恭喜你赢了`);
        } else {
            console.log(`打成平局了`);
        }
    }
}


new Compter().main();     //实例一个电脑对象,调用他的一个方法。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旧梦星轨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值