青岛网站建设
网站首页 联系我们

资讯中心

联系方式
  • 地址:青岛市李沧区金水路772号
  • 电话:0532-87606070
  • 手机:13969865210
  • 邮箱:web@toorain.net

网站开发知识
史上最短小精悍的javascript编写的俄罗斯方块游戏,仅仅60行代码 .
时间:2014-5-6 11:44:17  来源:青岛网站建设  点击:1778

史上最短小精悍的javascript编写的俄罗斯方块游戏,仅仅60行代码 .

[xml]

01.<!doctype html><html><head></head><body> 
02.<div id="box" style="width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div> 
03.<script> 
04.var domain="www.toorain.net"; 
05.var author="zuidaima"; 
06.var map=eval("["+Array(23).join("0x801,")+"0xfff]"); 
07.var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220,0x740],[0x2260,0xe20,0x6440,0x4700],[0x2620,0x720,0x2320,0x2700]]; 
08.var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)"}; 
09.var dia, pos, bak, run; 
10.function start(){ 
11.    dia=tatris[~~(Math.random()*7)]; 
12.    bak=pos={fk:[],y:0,x:4,s:~~(Math.random()*4)}; 
13.    rotate(0); 
14.} 
15.function over(){ 
16.    document.onkeydown=null; 
17.    clearInterval(run); 
18.    alert("GAME OVER"); 
19.} 
20.function update(t){ 
21.    bak={fk:pos.fk.slice(0),y:pos.y,x:pos.x,s:pos.s}; 
22.    if(t) return; 
23.    for(var i=0,a2=""; i<22; i++) 
24.        a2+=map[i].toString(2).slice(1,-1)+"<br/>"; 
25.    for(var i=0,n; i<4; i++) 
26.        if(/([^0]+)/.test(bak.fk[i].toString(2).replace(/1/g,"\u25a1"))) 
27.            a2=a2.substr(0,n=(bak.y+i+1)*15-RegExp.$_.length-4)+RegExp.$1+a2.slice(n+RegExp.$1.length); 
28.    document.getElementById("box").innerHTML=a2.replace(/1/g,"\u25a0").replace(/0/g,"\u3000"); 
29.} 
30.function is(){ 
31.    for(var i=0; i<4; i++) 
32.        if((pos.fk[i]&map[pos.y+i])!=0) return pos=bak; 
33.} 
34.function rotate(r){ 
35.    var f=dia[pos.s=(pos.s+r)%dia.length]; 
36.    for(var i=0; i<4; i++) 
37.        pos.fk[i]=(f>>(12-i*4)&15)<<pos.x; 
38.    update(is()); 
39.} 
40.function down(){ 
41.    ++pos.y; 
42.    if(is()){ 
43.        for(var i=0; i<4 && pos.y+i<22; i++) 
44.            if((map[pos.y+i]|=pos.fk[i])==0xfff) 
45.                map.splice(pos.y+i,1), map.unshift(0x801); 
46.        if(map[1]!=0x801) return over(); 
47.        start(); 
48.    } 
49.    update(); 
50.} 
51.function move(t,k){ 
52.    pos.x+=k; 
53.    for(var i=0; i<4; i++) 
54.        pos.fk[i]*=t; 
55.    update(is()); 
56.} 
57.document.onkeydown=function(e){ 
58.    eval(keycom[(e?e:event).keyCode]); 
59.}; 
60.start(); 
61.run=setInterval("down()",400); 
62.</script></body></html>