温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Nodejs实现石头剪刀布小游戏

发布时间:2021-06-11 11:18:18 来源:亿速云 阅读:215 作者:小新 栏目:web开发

这篇文章将为大家详细讲解有关怎么使用Nodejs实现石头剪刀布小游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

需求分析

这个石头剪刀布小游戏是人机交互的形式,我们随机输入石头(rock)/剪刀(scissor)/布(paper),然后电脑也随机生成石头/剪刀/布,然后比较输赢,输出结果。

这里有两个问题,输出我们知道,可以通过 console.log() 打印输出,那么我们怎么输入呢?然后 Node.js 又通过什么拿到我们的输入值呢?

输入是这样直接输入的:node index.js rock,在 node 启动运行 index.js 后面直接添加参数 rock 即可。

而获取的话,Node.js 有一个全局变量 process,它是一个进程对象,记载 Node.js 运行的一些信息,里面有一个属性 argv,通过这个属性可以获取到输入的值:

console.log(process.argv)

怎么使用Nodejs实现石头剪刀布小游戏

初始版本

话不多说,直接上代码:

// spr.js
// 石头剪刀布小游戏
// 命令行命令:node spr.js rock
// argv 可以获取到命令行 node 后面输入的行为
// let playerAction = process.argv[process.argv.length - 1]; // 最后面的输入
let playerAction = process.argv[2]; // 也可以通过下标直接获取
console.log('你出了', playerAction)
if (playerAction != 'rock' && playerAction != 'paper' && playerAction != 'scissor') {
  console.log('请输入rock或paper或scissor')
} else {
  // 电脑通过随机数生成石头剪刀布
  let computerAction;
  let random = Math.random() * 3;
  if (random < 1) {
    console.log('电脑出了石头')
    computerAction = 'rock'
  } else if (random > 2) {
    console.log('电脑出了剪刀')
    computerAction = 'scissor'
  } else {
    console.log('电脑出了布')
    computerAction = 'paper'
  }

  // 比较分出输赢
  if (computerAction === playerAction) {
    console.log('平局')
  } else if (
    (computerAction == 'rock' && playerAction == 'scissor') ||
    (computerAction == 'scissor' && playerAction == 'paper') ||
    (computerAction == 'paper' && playerAction == 'rock')
  ) {
    console.log('你输了')
  } else {
    console.log('你赢了')
  }
}

那么运行玩一下吧:

node spr.js rock
node spr.js scissor
node spr.js paper

怎么使用Nodejs实现石头剪刀布小游戏

模块封装

在 《浅谈Nodejs中的模块规范》 中有学习到 Node.js 的 CommonJS 模块规范,那么现在来把这个游戏封装起来,然后再实现一个新需求:电脑也是有情绪的,当我们赢的次数超过3次时,电脑的情绪就上来了,就不玩了。

这里新建了一个 game.js 文件,通过 module.exports 将游戏模块给出去:

// game.js
module.exports = function (playerAction) {
  if (['rock', 'scissor', 'paper'].indexOf(playerAction) == -1) {
    throw new Error('请输入rock或paper或scissor');
  }
  // 电脑通过随机数生成石头剪刀布
  var computerAction;
  var random = Math.random() * 3
  if (random < 1) {
    computerAction = 'rock'
    console.log('电脑出了石头')
  } else if (random > 2) {
    computerAction = 'scissor'
    console.log('电脑出了剪刀')
  } else {
    computerAction = 'paper'
    console.log('电脑出了布')
  }

  // 比较分出输赢
  if (computerAction === playerAction) {
    console.log('平局')
    return 0;
  } else if (
    (computerAction == 'rock' && playerAction == 'scissor') ||
    (computerAction == 'scissor' && playerAction == 'paper') ||
    (computerAction == 'paper' && playerAction == 'rock')
  ) {
    console.log('你输了')
    return -1;
  } else {
    console.log('你赢了')
    return 1;
  }
}

新建 index.js,通过 require 加载 game.js 模块:

// argv 可以获取到命令行 node 后面输入的行为
var playerAction = process.argv[process.argv.length - 1];
console.log(playerAction);

// 通过 require 引入石头剪刀布游戏模块
const game = require('./game.js')
const result = game(playerAction);
console.log(result)

运行起来看看:

怎么使用Nodejs实现石头剪刀布小游戏

现在要来计算我们赢的次数,那需要一个方法让我们可以持续输入:

// 获取进程的标准输入
process.stdin.on('data', (buffer) => {
  // 回调的是 buffer,需要处理成 string
  const action = buffer.toString().trim();
  console.log(action)
})

终端运行命令:node index.js,可以看到是可以持续输入的。

怎么使用Nodejs实现石头剪刀布小游戏

计算赢的次数,超过三次后电脑不想玩了,然后通过 process.exit() 把进程给杀了:

const game = require('./game.js')
var winCount = 0;
// 获取进程的标准输入
process.stdin.on('data', (buffer) => {
  // 回调的是 buffer,需要处理成 string
  const action = buffer.toString().trim();
  const result = game(action);
  if (result == 1) {
    winCount++
    if (winCount == 3) {
      console.log('我不玩儿了!哼!');
      process.exit();
    }
  }
})

怎么使用Nodejs实现石头剪刀布小游戏

可以看到,在一阵和电脑的你来我往然后赢了电脑三次之后就达成条件结束进程了。

关于“怎么使用Nodejs实现石头剪刀布小游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI