亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何寫Node.JS版本小游戲

 更新時(shí)間:2021年05月20日 14:28:58   作者:華為云開發(fā)者社區(qū)  
JavaScript的出現(xiàn)催動(dòng)了前端開發(fā)的萌芽,前后端分離促進(jìn)了Vue、React等開發(fā)框架的發(fā)展,Weex、React-Native等的演變賦予了并存多端開發(fā)的能力,而Node.JS的面世無疑是推動(dòng)了Web全棧開發(fā)的步伐。

概述

今天就利用Node.JS為大家?guī)砗?jiǎn)單有趣的的剪刀石頭布的小游戲。

打造流程

  • 引入模塊
  • 定義簡(jiǎn)單石頭布行為命令、當(dāng)前局?jǐn)?shù)(三局兩勝)、得分情況、電腦隨機(jī)出的行為(剪刀/石頭/布)
  • 定義關(guān)聯(lián)逐行讀取流
  • 清屏
  • 打印開局提示信息
  • 監(jiān)聽line事件,根據(jù)讀取流(用戶輸入)判斷用戶是要結(jié)束游戲,還是出招啦
  • 監(jiān)聽close 事件,如果玩夠了3局就打印最終結(jié)果,否則直接結(jié)束進(jìn)程
  • 定義scoreRule 方法,根據(jù)規(guī)則判斷得分情況

相關(guān)api

先來看一看相關(guān)的API,我們按照調(diào)用順序了解一下API,整個(gè)流程也就通啦

readline

逐行讀取可讀流中的數(shù)據(jù)

基礎(chǔ)使用

  • readline.createInterface() 方法創(chuàng)建一個(gè)新的 readline.Interface 實(shí)例,定義關(guān)聯(lián)的input 可讀流和output 可寫流,output 流可以讀取input 流內(nèi)容并輸出打印提示。
  • `process.stdin` 和 `process.stdout` 對(duì)應(yīng)進(jìn)程的可讀流和可寫流。
  • readline.close() 調(diào)用方法,表示實(shí)例完成,放棄對(duì)input流和output流的控制,Game Over ~
  • process.exit([code]) 方法:終止node進(jìn)程,code默認(rèn)值是0,標(biāo)識(shí)成功終止退出。不論是可讀流的讀取還是實(shí)例的完成事件,都需要我們來監(jiān)聽做點(diǎn)啥,要不然還有什么意義呢?
  • 監(jiān)聽line 事件:每當(dāng)input 流接收到行尾輸入(\n 、 \r 或者\(yùn)r\n )時(shí)就會(huì)觸發(fā),也就是我們?cè)趎ode控制臺(tái)按下Enter 或者 Return 鍵的時(shí)候,調(diào)用監(jiān)聽回調(diào)函數(shù)時(shí)攜帶可讀流接收的字符串。

chalk

粉筆,node終端的樣式庫(kù),修改終端輸出字符串的顏色、加粗、隱藏以及背景色等樣式

const chalk = require('chalk')
const logText = chalk.green(`
Hello,一起游戲吧!
`)
console.log(logText)

clear

清屏指令,node終端清屏,清除當(dāng)前終端視圖顯示

這個(gè)使用起來最簡(jiǎn)單,在你需要清屏的地方執(zhí)行一下clear() 方法就行了。

const clear = require('clear')
clear()

步驟補(bǔ)充說明

// 定義指令列表,
// 判斷玩家輸入的指令是否正確以及電腦的隨機(jī)輸出都從這里拿
const act = ['剪刀', '石頭', '布']
// 根據(jù)讀取流判斷玩家輸入信息
// 監(jiān)聽讀取流輸入
rl.on('line', function (input) {
 if (input === 'quit') {
   // 如果輸入【quit】 執(zhí)行close()方法
   rl.close()
 } else if (act.indexOf(input) !== -1) {
   // 如果輸入字符串在指令列表內(nèi)
   // 隨機(jī)生成電腦的對(duì)應(yīng)指令
   const idx = Math.floor((Math.random() * 3))
   gamer = act[idx]
   // 根據(jù)得分規(guī)則判斷玩家是否得分
   const curScore = scoreRule(input, gamer)
   // 得分進(jìn)行累計(jì)
   score += curScore

   // 打印本回合信息
   let win = curScore === 1 ? '本次玩家獲勝' : curScore === -1 ? '本次電腦獲勝' : '打平了,一定是巧合'
   result = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   第${num}回合:
   -------------------
   玩家出了: ${input}
   電腦出了: ${gamer}
   ${win}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   // 寫入流后,繼續(xù)下一回合
   num++;
   console.log(result)
   // 如果已經(jīng)玩了3個(gè)回合,則執(zhí)行close()方法
   if (num > 3) {
     rl.close()
   }
 } else {
   // 其他輸入 打印正確的輸入提示
   console.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   繼續(xù)游戲,請(qǐng)輸入:【剪刀】、【石頭】、【布】
   退出游戲,請(qǐng)輸入: 【quit】
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

完整代碼

// stone.js
const readline = require('readline')
const clear = require('clear')
const chalk = require('chalk')

const act = ['剪刀', '石頭', '布']
let num = 1
let score = 0
let gamer = ''
let result = ''

const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
})

clear()

const beginText = chalk.green(`
============================================

開始游戲,請(qǐng)輸入:【剪刀】、【石頭】、【布】
退出游戲,請(qǐng)輸入: 【quit】

============================================
`)
console.log(beginText)

rl.on('line', function (input) {
 if (input === 'quit') {
   rl.close()
 } else if (act.indexOf(input) !== -1) {
   const idx = Math.floor((Math.random() * 3))
   gamer = act[idx]
   const curScore = scoreRule(input, gamer)
   score += curScore

   let win = curScore === 1 ? '本次玩家獲勝' : curScore === -1 ? '本次電腦獲勝' : '打平了,一定是巧合'
   result = `
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   第${num}回合:
   -------------------
   玩家出了: ${input}
   電腦出了: ${gamer}
   ${win}
   ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
   `
   num++;
   console.log(result)
   if (num > 3) {
     rl.close()
   }
 } else {
   console.log(`
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   繼續(xù)游戲,請(qǐng)輸入:【剪刀】、【石頭】、【布】
   退出游戲,請(qǐng)輸入: 【quit】
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

// 監(jiān)聽關(guān)閉 退出進(jìn)程
rl.on('close', function () {
 if (num > 3) {
   winText = score > 0 ? '玩家獲得了最終的勝利' : score < 0 ? '玩家最后還是輸啦,加油哦' : '不可思議的平局'
   console.log(`
   ==========================
   本局結(jié)束,玩家總得分${score}
   ${winText}
   ==========================
   `)
 }
 process.exit(0)
})

function scoreRule(player, npc) {
 // 剪刀 布
 // 石頭 剪刀
 // 布 石頭
 if (player === npc) {
   return 0
 }
 if ((player === '剪刀' && npc === '布')
   || (player === '石頭' && npc === '剪刀')
   || (player === '布' && npc === '石頭')) {
   return 1
 } else {
   return -1
 }
}

拋磚引玉

node的學(xué)(mō)習(xí)(yú)的過程,我們會(huì)接觸到越來越多的依賴模塊和API,也從側(cè)面說明了npm庫(kù)的強(qiáng)大,我們想用的功能可能搜一搜就可以找到并且拿來用了。不要迷失在API的浪花中,我們了解到了,在用到的時(shí)候勿忘搜索技巧就好。

這里的【剪刀石頭布】好lou?。ê?jiǎn)直不能看),但是我們學(xué)習(xí)的過程可以始于lou,一lou一lou的深入下去,lou頂必將留下你精細(xì)的身影。歡迎吐槽我,歡迎深入node,加油~

以上就是如何寫Node.JS版本小游戲的詳細(xì)內(nèi)容,更多關(guān)于Node.JS版本小游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • CentOS上安裝Node.js和mongodb筆記

    CentOS上安裝Node.js和mongodb筆記

    這篇文章主要介紹了CentOS上安裝Node.js和mongodb筆記,本文講解了Python安裝、Node.js安裝、npm安裝、mongodb驅(qū)動(dòng)安裝、mongodb數(shù)據(jù)庫(kù)操作測(cè)試代碼等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • node.JS事件機(jī)制與events事件模塊的使用方法詳解

    node.JS事件機(jī)制與events事件模塊的使用方法詳解

    本文將詳細(xì)介紹nodeJS事件機(jī)制與events事件模塊的使用方
    2020-02-02
  • mac下徹底卸載node和npm方法步驟

    mac下徹底卸載node和npm方法步驟

    我們經(jīng)常在卸載軟件的時(shí)候會(huì)遇到有殘留,這樣就很難去重新下載,本篇文章就來介紹mac下徹底卸載node和npm及重新安裝的方法,有需要的朋友可以借鑒參考下
    2021-09-09
  • Node.js事件驅(qū)動(dòng)

    Node.js事件驅(qū)動(dòng)

    Node.Js是基于javascript語言,建構(gòu)在google V8 engine以及Linux上的一個(gè)非阻塞事件驅(qū)動(dòng)IO框架。這里主要不是介紹nodejs具體應(yīng)用代碼,而是想介紹一下事件驅(qū)動(dòng)編程。
    2015-06-06
  • node.js中的fs.mkdir方法使用說明

    node.js中的fs.mkdir方法使用說明

    這篇文章主要介紹了node.js中的fs.mkdir方法使用說明,本文介紹了fs.mkdir方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 原生nodejs使用websocket代碼分享

    原生nodejs使用websocket代碼分享

    本文給大家分享的是在原生的nodejs中如何使用websocket實(shí)現(xiàn)信息傳輸,非常實(shí)用,有需要的小伙伴可以參考下
    2018-04-04
  • 使用C++為node.js寫擴(kuò)展模塊

    使用C++為node.js寫擴(kuò)展模塊

    本文給大家介紹的是在window7下使用C++來給node.js編寫擴(kuò)展模塊的方法,附上一個(gè)簡(jiǎn)單的hello實(shí)例,有需要的小伙伴可以參考下。
    2015-04-04
  • 詳解nodejs微信公眾號(hào)開發(fā)——2.自動(dòng)回復(fù)

    詳解nodejs微信公眾號(hào)開發(fā)——2.自動(dòng)回復(fù)

    這篇文章主要介紹了詳解nodejs微信公眾號(hào)開發(fā)——2.自動(dòng)回復(fù),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • node讀寫Excel操作實(shí)例分析

    node讀寫Excel操作實(shí)例分析

    這篇文章主要介紹了node讀寫Excel操作,結(jié)合實(shí)例形式分析了node.js使用node-xlsx模塊模塊讀寫Excel的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Yarn的安裝與使用詳細(xì)介紹

    Yarn的安裝與使用詳細(xì)介紹

    不知道大家有沒有覺察到Facebook近年大招頻出。Yarn是Facebook最近發(fā)布的一款依賴包安裝工具。Yarn是一個(gè)新的快速安全可信賴的可以替代NPM的依賴管理工具,Yarn正式發(fā)布沒幾天已經(jīng)迅速達(dá)到了數(shù)萬贊,就可以知道大家苦NPM久已。這篇文章將詳細(xì)介紹Yarn的安裝與使用。
    2016-10-10

最新評(píng)論