## 项目背景
有一天女盆友在微信的小游戏中玩起了俄罗斯方块,我打开一看,UI及功能都不堪入目,还有满屏幕的广告,很影响用户体验。心想自己扒出一款童年时在掌机上经常玩的俄罗斯方块,一定会让她眼前一亮,嘿嘿。于是乎来到社区搜索一波,可不已经有了 [Vue版](https://github.com/Binaryify/vue-tetris) 和 [React版](https://github.com/chvin/react-tetris),发给她玩了下说蛮好玩了,她说要是有小程序的就好了,于是乎我找了找并没有微信小程序版本,我想了会儿,要满足她这个小心愿,于是乎临时起意做这个小程序版本,还原童年俄罗斯方块的乐趣,保留原汁原味的经典味道,给你我她都能带来一些欢乐。
## 项目介绍
项目之初在 类Vue 的 [mpvue](https://github.com/Meituan-Dianping/mpvue) 和 类React 的 [Taro](https://github.com/NervJS/taro) 之间抉择;对比了两者,mpvue 最近基本没维护,而 Taro 紧跟 着 React 的更新,有着和 `React16` 基本一致的特性,再加上团队的技术栈收敛,新项目都采用 React,同时个人也是偏好 React,嘿嘿,所以最终就选用了 Taro 来做。
## 针对 React 版的优化
其实游戏的介绍在 [React版](https://github.com/chvin/react-tetris) 已经有了详尽的介绍,这里就不再赘述啦~,想提到的几点就是
1. 小程序宿主环境和 Web 不大一样,所以就没有 `window` 或者 `document` 这类元素啦,代码中我将相关的代码做了改写,同时原逻辑中兼容 PC 端的内容我也做了删减;
2. 原项目中使用了 `shouldComponentUpdate` 做组件优化,每个组件都写了一遍 `shouldComponentUpdate` 的判别逻辑,我觉着还是可以统一化的,于是乎封装统一的父类组件并重写其中的 `shouldComponentUpdate` 逻辑,在 `compoment/common/BaseClassComponent` 中,读者完全可以将该段逻辑用在自己的项目,实现组件的防重复渲染;
3. React16 分别在 `2018/10` 和 `2019/02` 发布了 `React.memo` 以及 `Hooks` 特性,这对于函数组件来说无疑是重大的特性,使其支持组件 state 以及生命周期钩子,并且能优化函数组件,因此我将该特性引入并对项目的UI层做了重写,看起来代码会更加简约,如果想学习最新的 React 这些特性在项目中的应用,不妨拷贝下来本地运行下;其次,针对 memo 这一点,我也将其做了统一封装放在了 `compoment/common/BaseFunctionComponent` 中,同样适用于你的 React 项目;
4. 数据持久化这一点,依然和原项目保持一致,使用 `Immutable`,这应该是 React + Redux 时的最佳方案了吧。
## 项目启动
项目采用 Taro 中的 React + Redux 版
### 安装依赖包
``` bash
npm install or yarn install
```
### 项目运行
在 `project.config.json` 中配置自己的 `appid`,并在微信开发者工具导入项目
``` js
// 开发环境
npm run dev:weapp
// 生产环境
npm run build:weapp
```
## 项目效果
### 开局动画
![开局图](https://p0.meituan.net/travelcube/c22f4828bc60cd464e8edb8907c1b94b133069.png)
### 游戏中
![游戏中图](https://p0.meituan.net/travelcube/3e4095022f3d0acce8812ff09ccc0ac1134942.png)
### 消除行
![游戏中图](https://p0.meituan.net/travelcube/281acae087ad5f72d470df354e4565ee136690.png)
### 游戏试玩
![试玩图](https://p1.meituan.net/travelcube/524e4bee6e69d9870c13db55d84ee7a31800364.gif)
## 后续待办计划
1. 由于 在小程序中对于音频的处理并不像 Web 那样精细,小程序中如果想播放音频中的某一段,需要自己实现播放区间的控制,而 Web 可以轻松通过 start 来实现,这一块还需要研究下,如果有童鞋感兴趣,可以提PR秀出你的代码,我会非常期待;
2. 如今 JS 发展越来越壮大,它的升级版 `Typescript` 赋予了它静态类型检查等等特性,使得它的维护性更好,所以后期我会加入 Typescript 使得项目可读性更高,也更易维护;
3. 完整的项目离不开`单元测试`,为了使得项目更具工程化,后期会引入单元测试对功能模块、UI层做一些测试,这样项目也更具可读性了。
没有合适的资源?快使用搜索试试~ 我知道了~
微信小程序经典俄罗斯方块
共84个文件
js:58个
less:12个
json:4个
5星 · 超过95%的资源 需积分: 0 11 下载量 132 浏览量
2023-06-11
09:55:52
上传
评论 1
收藏 1.22MB ZIP 举报
温馨提示
项目之初在 类Vue 的 mpvue 和 类React 的 Taro 之间抉择;对比了两者,mpvue 最近基本没维护,而 Taro 紧跟 着 React 的更新,有着和 React16 基本一致的特性,再加上团队的技术栈收敛,新项目都采用 React,同时个人也是偏好 React,嘿嘿,所以最终就选用了 Taro 来做。 针对 React 版的优化 其实游戏的介绍在 React版 已经有了详尽的介绍,这里就不再赘述啦~,想提到的几点就是 小程序宿主环境和 Web 不大一样,所以就没有 window 或者 document 这类元素啦,代码中我将相关的代码做了改写,同时原逻辑中兼容 PC 端的内容我也做了删减; 原项目中使用了 shouldComponentUpdate 做组件优化,每个组件都写了一遍 shouldComponentUpdate 的判别逻辑,我觉着还是可以统一化的,于是乎封装统一的父类组件并重写其中的 shouldComponentUpdate 逻辑,在 compoment/common/BaseClassComponent 中,读者完全可以将该段逻辑用在自己的项目
资源推荐
资源详情
资源评论
收起资源包目录
wx-tetris-master.zip (84个子文件)
wx-tetris-master
.eslintrc 225B
.editorconfig 197B
project.config.json 546B
src
pages
index
index.jsx 3KB
index.less 1KB
store
index.js 859B
asset
music
music.mp3 53KB
music.wav 1.66MB
img.png 2KB
unit
music.js 3KB
event.js 774B
block.js 3KB
const.js 1KB
index.js 1KB
app.less 220B
components
next
index.less 501B
index.js 1KB
music
index.less 176B
index.js 517B
point
index.less 64B
index.js 2KB
matrix
index.less 678B
index.js 4KB
common
BaseFunctionComponent.js 902B
BaseClassComponent.js 799B
logo
index.less 831B
index.js 3KB
number
index.less 902B
index.js 2KB
decorate
index.less 2KB
index.js 4KB
pause
index.less 345B
index.js 1KB
keyboard
index.less 89B
index.js 3KB
button
index.less 2KB
index.js 1KB
app.jsx 678B
index.html 1011B
actions
keyboard.js 812B
index.js 2KB
constants
index.js 780B
reducers
speedStart
index.js 274B
next
index.js 318B
startLines
index.js 274B
music
index.js 261B
max
index.js 403B
reset
index.js 263B
drop
index.js 261B
matrix
index.js 315B
clearLines
index.js 274B
cur
index.js 264B
index.js 741B
points
index.js 412B
pause
index.js 263B
keyboard
music.js 272B
right.js 272B
rotate.js 273B
pause.js 272B
left.js 271B
drop.js 271B
reset.js 272B
index.js 429B
down.js 271B
lock
index.js 261B
speedRun
index.js 268B
control
states.js 6KB
todo
right.js 2KB
rotate.js 2KB
s.js 568B
r.js 753B
left.js 2KB
space.js 2KB
p.js 713B
index.js 286B
down.js 2KB
i18n.json 1KB
package.json 2KB
package-lock.json 445KB
.gitignore 64B
README.md 4KB
config
prod.js 471B
dev.js 160B
index.js 2KB
共 84 条
- 1
资源评论
- m0_739749922024-03-21楼主好,那个文档里没有app.json文件,一直不行,求救
Coder_Kevin_Vans
- 粉丝: 623
- 资源: 73
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功