使用Nodejs如何实现一个简单的石头剪刀布小游戏


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下使用Node.js做一个简单的石头剪刀布小游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

初步了解了 Node.js 的模块、异步、HTTP 服务等知识点之后,就来做一个简单的石头剪刀布的小游戏吧!!【推荐学习:《nodejs 教程》】

需求分析

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

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

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

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

1

console.log(process.argv)

1.png

初始版本

话不多说,直接上代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

// 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('你赢了')

  }

}

那么运行玩一下吧:

1

2

3

node spr.js rock

node spr.js scissor

node spr.js paper

2.png

模块封装

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

// 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 模块:

1

2

3

4

5

6

7

8

// 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)

运行起来看看:

3.png

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

1

2

3

4

5

6

// 获取进程的标准输入

process.stdin.on('data', (buffer) => {

  // 回调的是 buffer,需要处理成 string

  const action = buffer.toString().trim();

  console.log(action)

})

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

4.png

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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();

    }

  }

})

5.png

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

好的,到这里这样一个简单的石头剪刀布小游戏就实现了,下一篇我们来把石头剪刀布小游戏改造成网页版的吧!

代码地址:https://github.com/V-vincent/node-introduction

更多编程相关知识,请访问:编程视频!!

以上就是使用Nodejs如何实现一个简单的石头剪刀布小游戏的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

nodejs怎么运行js文件

node.js访问sql数据库的方法

了解nodejs中的模块载入

node.js怎么引用外部js

如何查看nodejs是否安装成功

怎么看nodejs是否安装成功

nodejs版的orm库--sequelize

浅谈nodejs获取参数的几种方法

3个值得收藏的实用nodejs软件包

nodejs|使用mongoosejs将mongodb与node连接

更多相关阅读请进入《nodejs》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...