60行JavaScript代码俄罗斯方块游戏全解析(4)

//如果没有重合,那么这里默认返回空
            }     
           
            //此函数产生用于绘制场景的字符串并且写入到div之中完成游戏场景的更新
            function update(t){ 
           
                //把pos备份到bak之中,slice(0)意为从0号开始到结束的数组,也就是全数组,这里不能直接赋值,否则只是建立引用关系,起不到数据备份的效果
                bak = {fk : pos.fk.slice(0), y : pos.y, x : pos.x, s : pos.s}; 
               
                //如果俄罗斯方块和场景实体重合了的话,就直接return返回,不需要重绘场景
                if (t) {
               
                    return;
                }
               
                //这里是根据map进行转换,转化得到的是01加上换行的原始串
                for(var i = 0, a2 = ""; i < 22; i++) {
               
                    //br就是换行,在这个循环里,把地图之中所有数据以二进制数字的形式写入a2字符串
                    //这里2是参数,指定基底,2的话就是返回二进制串的形式
                    //slice(1, -1)这里的参数1,-1作用是取除了墙(收尾位)之外中间场景数据(10位)
                    a2 += map[i].toString(2).slice(1, -1) + "<br/>";
                }
               
                //这里实现的是对于字符串的替换处理,就是把原始的01字符串转换成为方块汉字串
                for(var i = 0, n; i < 4; i++) {
               
                    //这个循环处理的是正在下落的俄罗斯方块的绘制
                    ////\u25a1是空格方块,这里也是隐式使用正则表达式
                    if(/([^0]+)/.test(bak.fk[i].toString(2).replace(/1/g, "\u25a1"))) {
                   
                        a2 = a2.substr(0, n = (bak.y + i + 1) * 15 - RegExp.$_.length - 4) + RegExp.$1 + a2.slice(n + RegExp.$1.length);
                    }
                }
               
                //对于a2字符串进行替换,并且显示在div之中,这里是应用
                ////\u25a0是黑色方块 \u3000是空,这里实现的是替换div之中的文本,由数字替换成为两种方块或者空白
                document.getElementById("box").innerHTML = a2.replace(/1/g, "\u25a0").replace(/0/g, "\u3000");
            } 
       
            //游戏结束
            function over(){ 
           
                //撤销onkeydown的事件关联
                document.onkeydown = null;
               
                //清理之前设置的俄罗斯方块下落定时器
                clearInterval(run);
               
                //弹出游戏结束对话框
                alert("游戏结束"); 
            } 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/00d24c0ff618be9a598dac43d4563e18.html