效果:
github上完整项目地址
流程:
1、 加载完成进入 index.js ,点击 “玩游戏” 按钮, 导航到 …/game/game2048。也就是游戏页面
2、进入 game2048 之后我们要做这几件事。
1.先制作出2048的格子棋盘
2048的格子是一个二维数组,我们先在data 里面加入一个items,这个items 就对应了每一个格子上面元素的值。当值为0时, 将0这个数字隐藏。
2.双重循环, 渲染出格子。
3、判断 用户手指的滑动方向
通过记录用户手指的开始点击位置, 和用户结束的手指点击位置。 得到两个位置坐标点的差值。 通过差值判断是往哪个方向的滑动。
touchStart(e) {
this.setData({
touch_start_x: e.touches[0].clientX,
touch_start_y: e.touches[0].clientY
})
},
touchEnd(e) {
var self = this;
self.setData({
touch_end_x: e.changedTouches[0].clientX,
touch_end_y: e.changedTouches[0].clientY
});
var x = self.data.touch_end_x - self.data.touch_start_x; // x 轴移动的距离
var y = self.data.touch_end_y - self.data.touch_start_y; // y 轴移动的距离
if (Math.abs(x) - Math.abs(y) > 10) { //判断为水平方向的滑动
if (x > 15) {
console.log('向右');
moveRight(self);
}
else if (x < -15) {
console.log('向左');
moveLeft(self);
}
}
else if (Math.abs(y) - Math.abs(x) > 10) { //判断为垂直方向的滑动
if (y > 15) {
console.log('向下');
moveDown(self);
}
else if (y < -15) {
console.log('向上');
moveUp(self);
}
}
},
4、计算moveUp,moveDown, moveRight,moveLeft 被触发之后, 对于 items 的影响。
这里的算法有点点儿多,我就不贴出来了, 直接发 github上面的完整代码 链接吧
5、每次 items 数值的改变也会 连动 class 的改变, 在 game2048.wxml 里面 class 也绑定了的。
所以 game2048.wxss 里面把所有 class 可能出现的数字 都先定义好。
6、当游戏结束时, 触发 isGameOver, 完成后续操作。 github上面的项目,源代码里面写了很多注释的。 码文不易, 求各位上 github 给我打个星星 好不 :)