首页 > web前端 > javascript/jquery > 强悍牛人用JS写的俄罗斯方块游戏
网站建设、切图、企业建站、微信开发 联系QQ:404658186 tel:18716186715
2015
06-24

强悍牛人用JS写的俄罗斯方块游戏

强悍牛人用JS写的俄罗斯方块,只需一段js代码就实现了俄罗斯方块功能,值得研究。

核心代码:

var domain="www.devdo.net";
var author="devdo";
var map=eval("["+Array(23).join("0x801,")+"0xfff]");
var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220,0x740],[0x2260,0xe20,0x6440,0x4700],[0x2620,0x720,0x2320,0x2700]];
var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)"};
var dia, pos, bak, run;
function start(){
 dia=tatris[~~(Math.random()*7)];
 bak=pos={fk:[],y:0,x:4,s:~~(Math.random()*4)};
 rotate(0);
}
function over(){
 document.onkeydown=null;
 clearInterval(run);
 alert("GAME OVER");
}
function update(t){
 bak={fk:pos.fk.slice(0),y:pos.y,x:pos.x,s:pos.s};
 if(t) return;
 for(var i=0,a2=""; i<22; i++)
 a2+=map[i].toString(2).slice(1,-1)+"<br/>";
 for(var i=0,n; i<4; i++)
 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);
 document.getElementById("box").innerHTML=a2.replace(/1/g,"\u25a0").replace(/0/g,"\u3000");
}
function is(){
 for(var i=0; i<4; i++)
 if((pos.fk[i]&map[pos.y+i])!=0) return pos=bak;
}
function rotate(r){
 var f=dia[pos.s=(pos.s+r)%dia.length];
 for(var i=0; i<4; i++)
 pos.fk[i]=(f>>(12-i*4)&15)<<pos.x;
 update(is());
}
function down(){
 ++pos.y;
 if(is()){
 for(var i=0; i<4 && pos.y+i<22; i++)
 if((map[pos.y+i]|=pos.fk[i])==0xfff)
 map.splice(pos.y+i,1), map.unshift(0x801);
 if(map[1]!=0x801) return over();
 start();
 }
 update();
}
function move(t,k){
 pos.x+=k;
 for(var i=0; i<4; i++)
 pos.fk[i]*=t;
 update(is());
}
document.onkeydown=function(e){
 eval(keycom[(e?e:event).keyCode]);
};
start();
run=setInterval("down()",400);

演示地址:http://www.devdo.net/demo/demo-elsfk.html

最后编辑:
作者:码农一号
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。

*