摘要:今天我将使用Node.JS为大家带来一款简单有趣的剪刀石头布游戏。JavaScript的出现刺激了前端开发的萌芽,前后端分离推动了Vue、React等开发框架的发展,Weex、React-Native的进化赋予了并发多线程的能力-终端开发。Web全栈开发的步伐。今天,我将使用Node.JS为大家带来一款简单有趣的剪刀石头布游戏。创建流程导入模块定义简单石头布行为命令,当前局数(三局两胜),比分情况,电脑随机行为(剪刀/石头/布)定义关联逐行读取流清屏打印开场提示信息监听线事件,根据读流(用户输入)判断用户是要结束游戏还是要走棋监听关闭事件,如果打够3轮,打印最终结果,否则直接结束流程定义scoreRule方法,根据规则判断分数相关api我们先来看看相关的API。让我们按照调用顺序来理解API,整个过程会很顺利。readline逐行读取可读流中的数据。使用readline.createInterface()方法创建一个新的readline。接口实例,定义了关联的输入可读流和输出可写流,输出流可以读取输入流的内容并输出打印提示。process.stdin和process.stdout对应进程的可读可写流。readline.close()调用方法,表示实例完成,放弃对输入流和输出流的控制,GameOver~process.exit([code])方法:终止节点进程,code默认值为0,表示成功终止并退出。不管是一个可读流的读取,还是一个实例的完成事件,我们都需要去监听和做一些事情,否则意义何在?监听行事件:每当输入流接收到行尾输入(n、r或rn)时触发,即当我们在节点控制台按下回车或回车键时,监听器回调函数被调用,带有一个可读的stream接收到的字符串。chalkchalk,节点终端的样式库,修改终端输出字符串的颜色、粗体、隐藏和背景色constchalk=require('chalk')constlogText=chalk.green(`大家好,一起玩吧!)console.log(logText)clear清屏命令,节点终端清屏,清空当前终端视图显示这个最容易使用,只需要在需要清屏的地方执行clear()方法即可。constclear=require('clear')clear()stepsupplementaryinstructions//定义指令列表,//判断玩家输入的指令是否正确,计算机的随机输出取自这里constact=['scissors','rock','cloth']//根据读流判断玩家输入信息//监听读流inputrl.on('line',function(input){if(input==='quit'){//如果输入【quit】执行close()方法rl.close()}elseif(act.indexOf(input)!==-1){//如果输入字符串在指令列表中//随机生成计算机对应的指令constidx=Math.floor((Math.random()*3))gamer=act[idx]//根据计分规则判断玩家是否计分constcurScore=scoreRule(input,gamer)//累计分数score+=curScore//打印本轮信息letwin=curScore===1?'这次玩家赢':curScore===-1?'这次电脑赢':'平局,一定是巧合'结果=`※※※※※※※※※※round${num}:--------------------玩家:${input}电脑:${gamer}${win}※※※※※※※※`//写入流后,继续下一轮num++;console.log(result)//如果已经玩了3轮,执行close()方法if(num>3){rl.close()}}else{//其他输入打印正确的输入提示console.log(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!要继续游戏,请输入:[scissors],[rock]、[布]退出游戏请输入:[quit]!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`)}})完整代码//stone.jsconstreadline=require('readline')constclear=require('clear')constchalk=require('chalk')constact=['scissors','rock','cloth']letnum=1letscore=0letgamer=''letresult=''constrl=readline.createInterface({input:process.stdin,output:process.stdout})clear()constbeginText=chalk.绿色(`=================================================开始游戏请输入:[剪刀]、[石头]、[布]退出游戏请输入:[退出]=================================================`)console.log(beginText)rl.on('line',函数(输入){if(input==='quit'){rl.close()}elseif(act.indexOf(input)!==-1){constidx=Math.floor((Math.random()*3))gamer=act[idx]constcurScore=scoreRule(input,gamer)score+=curScoreletwin=curScore===1?'这次玩家赢了':curScore===-1?'这次电脑赢了time':'打成平局,一定是巧合'result=`※※※※※※※※※※Round${num}:--------------------玩家输出:${input}电脑输出:${gamer}${win}※※※※※※※※`数++;console.log(result)if(num>3){rl.close()}}else{console.log(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!继续游戏请输入:[剪刀]、[石头]、[布]退出游戏请输入:[退出]!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`)}})//监听关闭退出进程rl.on('close',function(){if(num>3){winText=score>0?'玩家获得了最后的胜利':score<0?'玩家最后还是输了,加油':'不可思议的平局'console.log(`============================================================================================================================`)}process.exit(0)})functionscoreRule(player,npc){//纸剪刀//石头剪刀//石头布if(player===npc){return0}if((player==='scissors'&&npc==='cloth')||(player==='rock'&&npc==='剪刀')||(player==='布'&&npc==='石头')){return1}else{return-1}}学习过程中(mō)学习(yú))的node,我们会接触到越来越多的依赖模块和API,也从侧面展示了npm库的强大。我们要使用的功能可以通过搜索找到并使用。不要迷失在API的浪潮中。我们明白,在使用的时候,别忘了搜索技能就可以了。这里的【剪刀石头布】声音太大了(几乎读不懂),但是我们的学习过程可以从lou开始,一点一点深入,你一定会在lou上面留下你纤弱的身影。欢迎吐槽我,欢迎深入node,加油~点击关注,第一时间了解华为云新技术~
