//如果没有重合,那么这里默认返回空
}
//此函数产生用于绘制场景的字符串并且写入到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("游戏结束");
}
60行JavaScript代码俄罗斯方块游戏全解析(4)
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://www.heiqu.com/00d24c0ff618be9a598dac43d4563e18.html