React 手把手教你实现 mine-clearance (扫雷)(一)

简介: React 手把手教你实现 mine-clearance (扫雷)(一)

前言


mine-clearance(扫雷)作为一个经典的 windows 小游戏,也是 leetcode 第 529 题,难度中等,今天我将手把手教你完成这个实践方案。

我用的技术栈:react、webpack5、pnpm、less,对 pnpm 不了解的可以参考我这两篇文章昨晚,我体会了没有 pnpm 的痛2022 前端包管理方案-pnpm 和 corepack

效果图:


1687778493978.png


在线访问源码地址


搭建项目


如果你希望尽快开始的话,像这种 js 小游戏之类的项目是很适合用在线编辑器来写的,最初我是用的 codesandbox 这个在线编辑器来写的,它比 codepen 之类侧重代码片段的工具来说更好用,甚至可以完成完整项目的在线开发,不过这次我将使用本地环境来搭建。

首先使用 creat-react-app 创建新项目, 你注意到了么,我用了 pnpx 而不是大家熟知的 npx,其实这个是 pnpm 平台从源获取包的命令行工具, 和 npx 提供了相同的接口。(最新文档显示 pnpx 已弃用!官方建议改用 pnpm exec 和 pnpm dlx 命令。)


pnpx creat-react-app mine-clearance
pnpm dlx creat-react-app mine-clearance


执行完毕后,可以通过 npm run start 启动服务, 哎等等,不是说用 pnpm 的么,恩~这时候 pnpm 确实还不能工作,往下看就知道了。

现在我想使用 less,因为 creat-react-app 默认支持的是 sass/scss, 我需要先使用 eject  命令暴露 webpack 配置(不可逆), 当然也可以用 react-app-rewired 搭配 customize-cra 来覆盖默认的 webpack 配置;这里我选择直接 eject。


npm run eject


1687778503620.png


eject 后的项目目录发生了巨大变化,最核心的就是暴露了 config 文件夹,webpck 相关的配置都在里面。

这个时候,pnpm 就可以使用了,先在package.json 中添加 less 包文件信息,


"devDependencies": {
    "less": "3.9.0",
    "less-loader": "4.1.0"
 }


然后使用 pnpm install 指令重新安装包,它将先删除原 npm 类型的 node_modules 文件,然后按照 pnpm 的方式重新安装依赖。

下面讲讲 less 的配置,打开 config 下的 webpack.config.js 按照 sass 的格式进行配置, 修改style files regexes(样式文件正则),找到注释 style files regexes,在这最后添加如下两行代码:


1687778511048.png


找到 getStyleLoaders 函数,添加 lessOptions 参数,在css-loader 下面添加 less-loader 配置


{
    loader: require.resolve('less-loader'),
    options: lessOptions,
}


1687778521747.png


然后仿照 sass 添加如下配置


1687778529595.png


执行完成后,我们的环境配置就全部结束了,接下来就开始介绍 扫雷游戏的核心代码实现。


核心代码实现


Cell 方块(细胞)类型 Map


这个Map 用来保存所有的方块状态数据,以及映射关系,0 代表此方块为空,就是没有地雷,1-8 代表此方块周围相邻元素中有多少个地雷,10 代表此方块为地雷,这里找了张图片来显示。


const STATUSMAP = new Map([    [0, '空'],
    [1, '1'],
    [2, '2'],
    [3, '3'],
    [4, '4'],
    [5, '5'],
    [6, '6'],
    [7, '7'],
    [8, '8'],
    [10, require('./assets/mine.jpeg')],
  ])


目录
相关文章
|
前端开发
React 手把手教你实现 mine-clearance (扫雷)(二)
React 手把手教你实现 mine-clearance (扫雷)(二)
96 0
|
7月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
373 0
|
7月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
79 0
|
7月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
82 0
|
7月前
|
存储 前端开发 JavaScript
【第29期】一文学会用React类组件编写组件
【第29期】一文学会用React类组件编写组件
78 0
|
7月前
|
前端开发 开发者
【第26期】一文读懂React组件编写方式
【第26期】一文读懂React组件编写方式
65 0
|
7月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
127 0
|
7月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
52 1
|
7月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
122 1
|
7月前
|
存储 前端开发 JavaScript
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)