首頁 > web前端 > js教程 > 主體

使用Nodejs如何實作一個簡單的石頭剪刀布小遊戲

青灯夜游
發布: 2021-06-25 09:49:51
轉載
3315 人瀏覽過

這篇文章跟大家介紹一下使用Node.js做一個簡單的石頭剪刀布小遊戲的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

使用Nodejs如何實作一個簡單的石頭剪刀布小遊戲

初步了解了 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,透過這個屬性可以取得到輸入的值:

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如何實作一個簡單的石頭剪刀布小遊戲

可以看到,在一陣和電腦的你來我往然後贏了電腦三次之後就達成條件結束進程了。

好的,到這裡這樣一個簡單的石頭剪刀布小遊戲就實現了,下一篇我們來把石頭剪刀布小遊戲改造成網頁版的吧!

程式碼位址:https://github.com/V-vincent/node-introduction

更多程式相關知識,請造訪:程式設計視頻! !

以上是使用Nodejs如何實作一個簡單的石頭剪刀布小遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!