最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何寫Node.JS版本小游戲

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

概述

今天就利用Node.JS為大家?guī)砗唵斡腥さ牡募舻妒^布的小游戲。

打造流程

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

相關api

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

readline

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

基礎使用

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

chalk

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

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

clear

清屏指令,node終端清屏,清除當前終端視圖顯示

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

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

步驟補充說明

// 定義指令列表,
// 判斷玩家輸入的指令是否正確以及電腦的隨機輸出都從這里拿
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)
   // 隨機生成電腦的對應指令
   const idx = Math.floor((Math.random() * 3))
   gamer = act[idx]
   // 根據(jù)得分規(guī)則判斷玩家是否得分
   const curScore = scoreRule(input, gamer)
   // 得分進行累計
   score += curScore

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

開始游戲,請輸入:【剪刀】、【石頭】、【布】
退出游戲,請輸入: 【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ù)游戲,請輸入:【剪刀】、【石頭】、【布】
   退出游戲,請輸入: 【quit】
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   `)
 }
})

// 監(jiān)聽關閉 退出進程
rl.on('close', function () {
 if (num > 3) {
   winText = score > 0 ? '玩家獲得了最終的勝利' : score < 0 ? '玩家最后還是輸啦,加油哦' : '不可思議的平局'
   console.log(`
   ==========================
   本局結束,玩家總得分${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的學(mō)習(yú)的過程,我們會接觸到越來越多的依賴模塊和API,也從側面說明了npm庫的強大,我們想用的功能可能搜一搜就可以找到并且拿來用了。不要迷失在API的浪花中,我們了解到了,在用到的時候勿忘搜索技巧就好。

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

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

相關文章

  • express中static中間件的具體使用方法

    express中static中間件的具體使用方法

    這篇文章主要介紹了express中static中間件的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Nodejs實現(xiàn)短信驗證碼功能

    Nodejs實現(xiàn)短信驗證碼功能

    使用Nodejs的開發(fā)者愈來越多,基于Nodejs的后臺開發(fā)也多了起來,像短信驗證碼、短信群發(fā)、國際短信這些需求,完全可以采用第三方接口來實現(xiàn),云片就提供了這樣的接口
    2017-02-02
  • 利用Node.js制作爬取大眾點評的爬蟲

    利用Node.js制作爬取大眾點評的爬蟲

    相信每位用過大眾點評的人都知道,大眾點評上有很多美食餐館的信息,所以這篇文章給大家分享利用Node.js實現(xiàn)爬取大眾點評的爬蟲,正好可以拿來練練手Node.js。感興趣的可以參考借鑒。
    2016-09-09
  • Node.js編寫CLI的實例詳解

    Node.js編寫CLI的實例詳解

    Node.js的應用場景有前后端分離、海量web頁面渲染服務、命令行工具和桌面端應用等等。本篇文章選取CLI(Command Line Tools)子領域,來談談Node.js編寫CLI的實踐,讓CLI切實解決實際工程問題。
    2017-05-05
  • 詳解nodeJS之二進制buffer對象

    詳解nodeJS之二進制buffer對象

    本篇文章主要介紹了nodeJS之二進制buffer對象,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Node.js 在本地生成日志文件的方法

    Node.js 在本地生成日志文件的方法

    這篇文章主要介紹了Node.js 在本地生成日志文件的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 如何用Node寫頁面爬蟲的工具集

    如何用Node寫頁面爬蟲的工具集

    這篇文章主要介紹了如何用Node寫頁面爬蟲的工具集,主要介紹了三種方法,分別是Puppeteer、cheerio和Auto.js,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Node.js使用MySQL連接池的方法實例

    Node.js使用MySQL連接池的方法實例

    這篇文章主要介紹了Node.js使用MySQL連接池的方法,結合具體實例形式分析了nodejs操作mysql連接池的相關模塊安裝、連接、查詢等使用技巧,需要的朋友可以參考下
    2018-02-02
  • Node.js查找當前目錄下文件夾實例代碼

    Node.js查找當前目錄下文件夾實例代碼

    本篇文章主要介紹了Node.js查找當前目錄下文件夾實例代碼,具有一定的參考價值,有興趣的可以了解一下。
    2017-03-03
  • node.js mongoose index索引操作

    node.js mongoose index索引操作

    在 Mongoose 中,索引(Index)是一種用于提高查詢性能的數(shù)據(jù)結構,它可以加速對數(shù)據(jù)庫中文檔的檢索操作,本文給大家介紹
    node.js mongoose index索引操作
    ,感興趣的朋友一起看看吧
    2023-12-12

最新評論

凌源市| 鄂州市| 湖南省| 牡丹江市| 讷河市| 成武县| 岳池县| 黎平县| 商洛市| 宣武区| 日土县| 西宁市| 三台县| 长岛县| 舟山市| 庐江县| 南通市| 马鞍山市| 兴和县| 神木县| 堆龙德庆县| 从化市| 高邮市| 河津市| 盐源县| 周宁县| 锡林郭勒盟| 阜南县| 白银市| 天峨县| 收藏| 汉寿县| 出国| 沾化县| 司法| 沭阳县| 若羌县| 克山县| 县级市| 怀柔区| 常熟市|