效果: 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 给我打个星星 好不 :)