页面部分
HTML文档的结构非常简单,我们的游戏将呈现在这个HTML中id为game的div中,一个li标签,表示一个方块。在style中为按钮及方格添加样式。创建一个HTML文件,将它保存在你理想的位置,名称为index.html。并为这个文件添加以下代码。
在浏览器中打开该文件,会显示出一个拥有2*2方格的方框。此时,点击按钮和方块都没有效果呈现。由于方块是动态的(即它的数量会发生变化),故,不应在html文件中添加li。所以将index.html文件中
改为:
我们将在javascript中动态添加li。以下代码全部位于标签中
添加方块和方块点击
我们需要在页面加载完成之后再调用功能,所以,代码应放在window.onload中。
想要在ul(id名为box)中呈现图像内容,为它动态添加li,必须在JavaScript中获取到这个元素;同时,我们要决定方块的个数,假设一行的个数为num,则方格的个数为num*num。定义一个数组Oli,将li放入数组中,方便我们去操作li的属性。在JavaScript中添加以下代码:
因为UL的大小已经固定为560px*560px,所以,li的大小也要跟着个数的改变。li除了自身宽高,还有5px的边框,所以计算方式如下:
动态添加li,createElement创建元素,classList.add添加class,控制li的样式。 Oli.push将li放入数组中。 Obox.appendChild将新创建的li放到ul中。设置li的大小和颜色。
为li添加两个自定义属性:data-uid 和 data-usta 。data-uid便于我们找到相对应的li,从0开始计数。data-usta = 0代表该方块是橙色,data-usta = 1代表该方块是蓝色。
为了让代码能重复使用,我们将它封装成一个函数。
并在 const Oli = []; 下面进行调用,以进行初始化。在const Oli = [];添加
此刻,我们的方块还不具备变色的功能。点击方块时,若方块是橙色,则变成蓝色;若为蓝色,则变成橙色;判断方块的颜色,通过li的自定义属性data-usta。将代码封装成函数,便于调用。
点击方块时,改变方块本身,方块相邻的上、下、左、右的颜色。若被点击方块序号为 i ,则上下左右的序号分别为:i-num;i+num;i-1;i+1;同时需要考虑这些方块的上下左右是否都存在方块,即上下左右的序号是否超出了num*num或者小于0;j=0,改变本身;j=1,改变左侧;j=2,改变右侧;j=3,改变上方;j=4,改变下方;符合条件时,调用oneLryb(obj)函数。
为方块加上点击的功能,点击一次,步数加一
在初始化时,为每个li绑定点击功能。将changeBox(num,Oli)函数的for循环改为
最后我们需要对所有方块进行检查,当所有方块都变成蓝色时,通关。
每次点击方块之后都应该进行一次检查,若通关,则进入下一关。所以在run(Oli,i,num)方法中调用exam(obj,num);使用setTimeout进行延时,否则方块改变颜色的效果还没有呈现就进行下一关。
为按钮添加功能,获取元素。
|
|
“重玩游戏”按钮点击效果:步数归零,关卡回到第一关,重新初始化方格。
“重玩本关”按钮点击效果:将所有方块变成橙色
“游戏说明”按钮点击效果
完整代码移步:github