摘要:使用纯html5开发2048小游戏,其主要是通过改变不同div元素的innerHTML和样式实现。
画出基本布局
这一步没什么好说的,主要是用css把基本的网格格局画出来。这里记一个小技巧,使用“element.class*n”可以快速生成n个以class为属性名的element元素。
游戏初始化
初始化需要在网格中随机两个数字。我们只需要将所有网格div元素记为数组cells,在生成两个不同的随机数(2或4),通过改变他们的innerHtml和class属性名来更改样式就可以了。
网格生成
生成有一定的条件限制,如果本次操作并未造成任何单元格移动或者合并,则不能新生成数字。 如下图情况:
在完成移动或单元合并后,需要遍历所有值为空的网格,从中随机挑选一个赋值数值2,若没有值为空的网格,那么游戏结束,玩家失败。
移动(关键)
以向左移动为例,其他方向以此类推: 我们通过双重嵌套来遍历每一个网格,以每行为一个周期,在遍历时如果网格为0,那么我们做一个标记countZero++,如果网格不为零,那么我们就将这个网格向左移动countZero个网格的距离。
合并
这一步一定在移动之后执行,由于所有含值网格的网格在此时都彼此相邻,所以我们在此遍历整个网格,如果发现右相邻且相同的两个网格,那么就对这两个网格执行合并。 需要注意的是,在执行合并后,一些网格会恢复无值的情况,所以我们再次调用一次移动步骤,如图向下合并后,中间的 8 会空出来:
而基于游戏规则,此次移动后不再进行合并。