首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Node.js是什么?
Node.js可以用来做什么?
什么是技术预研?
Node.js开发环境安装
第一个Node.js程序:石头剪刀布游戏
模块:CommonJS规范
模块:使用模块规范改造石头剪刀布游戏
模块:npm
模块:Node.js内置模块
异步:非阻塞I/O
异步:异步编程之callback
异步:事件循环
异步:异步编程之Promise
异步:异步编程之async/await
HTTP:什么是HTTP服务器?
HTTP:简单实现一个HTTP服务器
HTTP:实现网页版石头剪刀布
HTTP:用express优化石头剪刀布游戏
HTTP:用koa优化石头剪刀布游戏
RPC 调用:什么是RPC调用?
RPC调用:Node.js Buffer编解码二进制数据包
RPC 调用:Node.js net建立多路复用的RPC通道
项目启动:整体需求分析
项目启动:码小课App下载页开发
课程详情页:码小课详情页需求解构
课程详情页:将ES6模版字符串改造成模板引擎
课程详情页:码小课详情页需求实现
课程播放页:码小课播放页需求解构
课程播放页:GraphQL API服务
课程播放页:码小课播放页需求实现
课程列表页:码小课列表页需求解构
课程列表页:用 Vue/React 进行服务端渲染
课程列表页:码小课列表页需求实现
性能工具:HTTP服务的性能测试
性能工具:Node.js性能分析工具
代码优化:JavaScript代码性能优化
代码优化:内存管理优化
代码优化:Node.js C++插件
多进程优化:Node.js子进程与线程
多进程优化:Node.js cluster模块实战与源码解读
多进程优化:进程守护与管理
架构优化:动静分离
架构优化:反向代理与缓存服务
概念:框架设计和工程化
概念:设计模式
概念:Serverless
服务端框架搭建:koaless
服务端框架搭建:屏蔽请求细节
服务端框架搭建:完成服务端框架
云函数式工程实现:服务端代码
云函数式工程实现:工具端代码
当前位置:
首页>>
技术小册>>
Node.js 开发实战
小册名称:Node.js 开发实战
### 第一个Node.js程序:石头剪刀布游戏 在本章中,我们将通过构建一个简单而有趣的“石头剪刀布”游戏来踏入Node.js编程的世界。这个游戏将不仅帮助我们理解Node.js的基本语法和流程控制,还能让我们熟悉如何在Node.js环境下处理用户输入和输出。 #### 一、引言 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许JavaScript在服务器端运行。Node.js的异步I/O模型使得它非常适合处理高并发请求,是构建现代Web应用的强大工具。通过编写“石头剪刀布”游戏,我们将逐步揭开Node.js的神秘面纱。 #### 二、环境准备 在开始之前,请确保你的计算机上已经安装了Node.js。你可以通过访问[Node.js官网](https://nodejs.org/)下载并安装适合你操作系统的版本。安装完成后,在命令行或终端中运行`node -v`命令来检查Node.js是否安装成功,并查看其版本号。 #### 三、项目初始化 1. **创建项目文件夹**:首先,在你的工作目录下创建一个名为`rock-paper-scissors`的新文件夹。 2. **初始化Node.js项目**:进入该文件夹,打开命令行或终端,运行`npm init -y`命令快速生成`package.json`文件。这个文件用于管理项目的依赖和元数据。 #### 四、编写游戏逻辑 接下来,我们将开始编写游戏的主体逻辑。在`rock-paper-scissors`文件夹内,创建一个名为`game.js`的新文件,并编写以下代码: ```javascript const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); const choices = ['石头', '剪刀', '布']; const results = [ { winner: '平局', loser: '平局' }, { winner: '剪刀', loser: '石头' }, { winner: '石头', loser: '剪刀' }, { winner: '布', loser: '剪刀' }, { winner: '剪刀', loser: '布' }, { winner: '布', loser: '石头' }, { winner: '石头', loser: '布' } ]; function getRandomChoice() { return choices[Math.floor(Math.random() * choices.length)]; } function determineWinner(playerChoice, computerChoice) { const index = choices.indexOf(playerChoice) * 2 + choices.indexOf(computerChoice); return results[index]; } readline.question('请输入你的选择(石头/剪刀/布):', playerChoice => { const computerChoice = getRandomChoice(); console.log(`电脑的选择是:${computerChoice}`); const { winner, loser } = determineWinner(playerChoice, computerChoice); if (winner === '平局') { console.log('平局!'); } else { console.log(`${winner}赢了!`); } readline.close(); }); ``` #### 五、代码解析 1. **引入readline模块**:Node.js的`readline`模块用于从可读流(如`process.stdin`)逐行读取输入。这里我们用它来获取用户的输入。 2. **定义游戏选项和结果**:我们定义了`choices`数组来存储“石头”、“剪刀”和“布”这三个选项,以及`results`数组来映射每种玩家和电脑选择组合的结果。 3. **随机选择电脑动作**:`getRandomChoice`函数用于生成电脑的随机选择。 4. **判断胜负**:`determineWinner`函数根据玩家和电脑的选择返回胜负结果。这里我们使用了简单的数学映射来根据两个选择的索引确定结果。 5. **获取用户输入并输出结果**:使用`readline.question`方法获取用户的输入,然后根据用户输入和电脑的选择调用`determineWinner`函数判断胜负,并输出结果。 #### 六、运行游戏 在命令行或终端中,切换到`rock-paper-scissors`文件夹,然后运行`node game.js`命令。按照提示输入你的选择(石头/剪刀/布),然后观察游戏结果。 #### 七、扩展功能 虽然我们的“石头剪刀布”游戏已经能够运行并给出基本的胜负判断,但仍有许多可以扩展的地方: - **增加游戏轮次**:允许用户选择进行多轮游戏,并统计最终胜负。 - **图形用户界面(GUI)**:使用Node.js的GUI框架(如Electron)将游戏界面从命令行迁移到图形界面。 - **网络对战**:通过Node.js的网络模块(如`net`或`http`)实现两个玩家之间的在线对战。 - **持久化数据**:使用数据库(如MongoDB)存储玩家的对战记录,实现战绩查询等功能。 #### 八、总结 通过编写这个简单的“石头剪刀布”游戏,我们不仅学习了Node.js的基本语法,还掌握了如何使用`readline`模块处理用户输入,以及如何通过逻辑判断实现游戏的核心功能。这只是一个起点,Node.js的世界远比这更加广阔和深邃。希望这个示例能够激发你对Node.js编程的兴趣,并鼓励你继续深入探索这个强大的平台。
上一篇:
Node.js开发环境安装
下一篇:
模块:CommonJS规范
该分类下的相关小册推荐:
npm script实战构建前端工作流
web前端开发性能优化实战
Javascript-ES6与异步编程
Flutter核心技术与实战
编程入门课:Javascript从入门到实战
WebSocket入门与案例实战
零基础学JavaScript
Javascript编程指南
经典设计模式Javascript版
JavaScript面试指南
ES6入门指南
剑指javascript-ES6