80行代码教你用Node+TypeScript写一个心灵预测魔术的终端应用

·  阅读 3865
80行代码教你用Node+TypeScript写一个心灵预测魔术的终端应用

前言:

中学有一段时间痴迷于各种魔术,课间给女同学变魔术炫技,放学就苦练魔术还有花式切牌,.后来,魔术在我的世界里沉沦了好一段时间,感叹当了程序员后放弃好多爱好,这一次我想把它们融合起来.圆规正转,这篇教你写出一个心灵预测魔术的终端应用

1.技术介绍

node依赖包简述
commander常用作手脚架命令的,根据用户输入的命令响应不同逻辑
inquirer获取用户输入信息
chalk终端打印高亮显示

2.体验魔术

安装

npm install magic_game_node -g

开始游戏

 magic_game_node  --start

这时候游戏就开始了:

image.png

还没有把玩的同学赶紧去体验下魔术的魅力吧~~~

3.原理解析

聪明的你可能已经猜到大概是什么情况了,没错,这其实是一个简单的数学问题

在0-100以内的两位数,减去个位加十位之和,得出来永远的是9的倍数
一个数学公式可以说明结论

(10x+y)(x+y)=9x(10x+y)-(x+y) = 9x

ps: (10x+y)是在0-100以内的两位数,(x+y)是去个位加十位之和

既然你每次算出来都是9的倍数,那我让9的倍数的图腾每次运行都保持一致图腾就可以了,剩下非9倍数都是随机图腾

4.源码分析

这个程序只有一个文件,游戏本主要逻辑并不难,知道原理以后大家基本都可以写出来逻辑,下面就是要考虑良好的交互体验了,我希望的是用npm就可以下载下来,然后输入命令就开始游戏,这时候我就用到了commder.js,它经常用在手脚架的注册命令

// index.ts 
#!/usr/bin/env node
const chalk = require('chalk')
const inquirer = require('inquirer')
const commander = require('commander');

// 实例化 commander
const program = new commander.Command();

// 封装chalk,输出颜色
function color_str(color: string, str: string): string {
    const colorStrings = chalk.keyword(color)
    return colorStrings(str)
}

// 随机数函数
function Random(min: number, max: number) {
    return Math.floor(Math.random() * (max - min)) + min
}

//注册命令
function registerCommend() {
    program
        .version('1.0.4', '-v, --version')
        // 开始游戏命令
        .option('-s, --start', 'Add peppers')
    program.on('option:start', function () {
        // 执行游戏逻辑
        game_main()
    })
    .parse(process.argv);
}

async function game_main() {
    console.log(color_str("red", "现在游戏开始~"))
    console.log(color_str("green", "大家好,我叫作曲家种太阳"))
    console.log(color_str("green", "是一个虚拟文明的魔术师,接下来开始我的表演~"))
    await inquirer.prompt({
        type: 'input',
        name: "type",
        message: color_str("orange", '请随机想一个10到100的数字,假设这个数字是x,请将x减去它个位与十位之和得出一个数字Q,请你心里默念三次数字Q,请按任意键继续~')
    })
    console.log(color_str("purple", "我们的文明,每一个数字背后都代表一个图腾,我已画好了对应关系,请你把默念的数字所对应的图腾画在记在心里,让我预测一下~"))
    // 放非9的倍数的图标
    const list1: string[] = ["☄", "☬", "♝", "♬", "◐", "♣", "▲", "♦", "☺", "√", "♞", "♍", "♒", "♓", "♑", "♐", "♎", "♌", "♉", "♈"];
    // 放9的倍数的图标
    const list2: string[] = ["§", "〼", "◎", "¤", "☼", "☽", "■", "★", "♠", "♥", "☑", "♛",]
    // list2的下标,放在for循环外,为了让九的倍数的图标一致
    const index2: number = Random(1, 12)
    for (let i = 1; i < 101; i++) {
        // 单个
        let item: string;
        const index1: number = Random(1, 20)
        // 九倍数的时候
        if (i % 9 === 0) {
            item = `${i}:${list2[index2]}`
        } else {
            item = `${i}:${list1[index1]}`
        }
        // 输出换行逻辑
        if (i % 5 == 0 && i > 4) {
            process.stdout.write(item + "\n")
            process.stdout.write("\n")
        } else {
            process.stdout.write(item + "   ")
        }
    }
    await inquirer.prompt({
        type: 'input',
        name: "waite",
        message: color_str("orange", '您选择好了么,来让我预言下~~')
    })
    console.log(color_str("yellow", "------------------------------"))
    console.log(color_str("yellow", "------------------------------"))
    console.log(color_str("yellow", "------------------------------"))
    console.log(`你选择的是:${list2[index2]}`)
    console.log(color_str("red", "如果预言的对的话,欢迎给我的文章点赞哦~~~"))
    console.log(color_str("yellow", "------------------------------"))
    console.log(color_str("yellow", "------------------------------"))
}
registerCommend()

5.把程序发布到npm上

blog.csdn.net/taoerchun/a…
这篇文章写得很详细,按照这个来发布npm即可

不过,你需要注意的点是:

  1. pageck.json中的name不能与npm发布过的包名字重合,version每次发布都需要更新
  2. 在index.ts文件上加入 #!/usr/bin/env node ,让终端知道用什么加载文件
  3. pageck.json中的bin字段指向打包后的js文件

最后

源码你可以下载下来自己运行下,把玩儿下 github地址
运行命令 : npm run dev

如果就你觉得文章对你有帮助或者给我一些建议,欢迎评论和start

你的鼓励就是我创作的动力
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改