使用 React 构建井字棋游戏

欢迎来到我自己版本的经典井字游戏!我使用ReactSCSS创建了一个井字游戏,大约用了6个小时完成。游戏包括与电脑对战的单人模式,获胜者公告弹窗,以及双方的胜利计数器。虽然网格可定制为n x n,但当前的获胜逻辑仅支持3 x 3。未来的改进包括更智能的电脑移动和实时多人游戏功能。

概览

  • 所需总开发时间:约6小时
  • 使用的技术:JavaScript(React)+ SCSS

游戏规则

1. 目标

游戏的目标是在3 x 3的网格上,以水平、垂直或对角线排列三个您的符号(X或O)。

2. 轮次顺序

  • 玩家A始终先手,并扮演X
  • 电脑对手扮演O,并在玩家A之后立即行动。

3. 游戏过程

  • 玩家轮流在网格上标记空单元格。
  • 首个排列三个符号的玩家获胜游戏。

4. 获胜条件

如果玩家实现以下条件,则获胜:

  • 横向排列三个符号
  • 垂直列中的三个符号,或者
  • 对角线上的三个符号

5. 画图

如果所有格子都填满且没有玩家满足获胜条件,游戏以平局结束。

6. 记分

胜利计分器会追踪玩家A和电脑的胜利总数。

已实现的功能(MVP)

这个版本的游戏包括以下内容:

  1. 与电脑对战:一个有趣的单人模式,你可以与电脑对战
  2. 胜利者公告弹窗:每局结束时,弹窗会显示获胜者。
  3. 胜利计分器:追踪玩家和电脑的总胜利次数。
  4. 可定制的网格:创建一个n x n的网格(尽管当前的获胜逻辑仅支持3 x 3)。

可能的增强功能

展望未来,以下是一些改进的方向:

  1. [用户体验] 分数的本地存储:在本地保存游戏分数,以便在刷新浏览器后仍然存在。
  2. [用户体验/技术] 更智能的电脑移动:用算法替代随机移动,实现更具竞争力的游戏。
  3. [用户体验] 实时多人游戏:启用两个玩家使用 Socket.io 进行实时竞争。
  4. [技术] 高级 SCSS 组织:使用混合、变量和更好的结构化技术重构 SCSS。
  5. [用户体验/技术] 优雅降级:确保与非现代浏览器的兼容性,以获得更广泛的支持。

设置和开发

先决条件

在开始之前,请确保已安装 Node.js(推荐版本:6.4.1)。

开始使用

  1. GitHub 克隆仓库。

2. 安装依赖:

npm install

3. 启动开发服务器:

npm start

  • 在浏览器中打开 http://localhost:3000 以查看应用程序。

4. (可选)为生产构建项目:

npm run build

这会创建一个优化的 build 文件夹,准备进行部署。

测试

以交互式观察模式运行测试:

npm test

技术细节

文件结构

该项目遵循标准 Create React App 结构,采用模块化组件化方法。

 

src
├── index.js
├── App.css
├── App.js
├── Components
│   └── Board
│       ├── Board.scss
│       ├── Cross.jsx
│       ├── ScoreBoard.jsx
│       ├── index.jsx
│       ├── Round.jsx
│   └── Footer
│       ├── Footer.scss
│       ├── index.jsx
│   └── Header
│       ├── Header.scss
│       ├── index.jsx
├── utils
│   └── lib.js
public
├── index.html

描述与方法

  • 该应用程序使用 Create React App 启动,以快速搭建 MVP。
  • 游戏初始化一个 n x n 网格进行游戏。
  • 每个单元格都有点击事件监听器,允许玩家 A (X) 进行第一次移动。
  • 计算机的回合通过随机单元格选择逻辑进行模拟,这需要针对自定义网格大小进行增强。
  • 使用 SCSS 进行样式设计,在开发过程中更注重速度而非复杂性。

测试方法

手动测试

  • 确保计算机在玩家 A 完成后进行移动。
  • 验证游戏以赢家公告横幅结束。
  • 测试计算机的自动移动。

潜在单元测试

  • 检查计算机是否在玩家 A 之后移动。
  • 验证游戏是否显示正确的赢家。
  • 测试网格初始化和用户交互的边缘情况。

结论

感谢您探索我的项目!

您可以在 GitHub 上找到完整的源代码并为该项目贡献力量。让我们一起构建酷炫的东西!

Source:
https://dzone.com/articles/building-a-tic-tac-toe-game-using-react