Home > Web Front-end > JS Tutorial > body text

How to implement a simple rock-paper-scissors game using Nodejs

青灯夜游
Release: 2021-06-25 09:49:51
forward
3316 people have browsed it

This article will introduce to you how to use Node.js to make a simple rock-paper-scissors game. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

How to implement a simple rock-paper-scissors game using Nodejs

After having a preliminary understanding of Node.js modules, asynchronous, HTTP services and other knowledge points, let’s make a simple rock-paper-scissors game! ! [Recommended learning: "nodejs tutorial"]

Requirements Analysis

This rock-paper-scissors game is a form of human-computer interaction. We randomly Input rock (rock)/scissors (scissor)/paper (paper), and then the computer also randomly generates rock/scissors/paper, then compares the winning and losing, and outputs result.

There are two questions here. We know the output and can print it through console.log(), so how do we input it? Then how does Node.js get our input value?

The input is entered directly like this: node index.js rock, after node starts running index.js, add parameters directlyrock That’s it.

If obtained, Node.js has a global variable process, which is a process object that records some information about the operation of Node.js, and has an attribute argv, the input value can be obtained through this attribute:

console.log(process.argv)
Copy after login

How to implement a simple rock-paper-scissors game using Nodejs

Initial version

Without further ado, let’s go directly to the code :

// 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('你赢了')
  }
}
Copy after login

Then run and play:

node spr.js rock
node spr.js scissor
node spr.js paper
Copy after login

How to implement a simple rock-paper-scissors game using Nodejs

Module encapsulation

In " shallow Talking about the module specification in Nodejs》 We have learned about the CommonJS module specification of Node.js, so now let’s encapsulate this game and then implement a new requirement: computers also have emotions. When we win more than After 3 times, the computer's mood got high and it stopped playing.

A new game.js file is created here, and the game module is exported through 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;
  }
}
Copy after login

New index. js, load game.js module through require:

// 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)
Copy after login

Run it and see:

How to implement a simple rock-paper-scissors game using Nodejs

Now we need to calculate the number of times we win, we need a way to continue typing:

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

Run the command on the terminal: node index.js, you can see that we can continue typing of.

How to implement a simple rock-paper-scissors game using Nodejs

Calculate the number of wins. After more than three times, the computer no longer wants to play, and then kill the process through 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();
    }
  }
})
Copy after login

How to implement a simple rock-paper-scissors game using Nodejs

As you can see, after a while of back and forth with the computer and then beating the computer three times, the conditions were met and the process ended.

Okay, now a simple rock-paper-scissors game has been implemented. In the next article, let’s transform the rock-paper-scissors game into a web version!

Code address: https://github.com/V-vincent/node-introduction

For more programming-related knowledge, please visit: Programming Video ! !

The above is the detailed content of How to implement a simple rock-paper-scissors game using Nodejs. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:juejin.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!