复制代码代码如下:
<!doctype html> <html> <head> <style type = "text/css">
ボディ{背景:#000;フォント:25px/25px宋体;}
#box {float:left; width:252px; border:#999 20px ridge; color:#9f9; text-shadow:2px 3px 1px#0f0; }
#info {float:left; color:#cfc; padding:24px; }
#next {padding:8px; width:105px; color:#9f9; text-shadow:2px 3px 1px#0f0; }
</style> </head> <body>
<div id = "box"> </div> <div id = "info"> next:<div id = "next"> </div> <div id = "text"> </div> </div>
<script type = "text/javascript">
var map = eval( "["+array(23).jein( "0x801、")+"0xfff]");
var tatris = [[0x6600]、[0x2222,0xf00]、[0xc600,0x2640]、[0x6c00,0x4620]、[0x4460,0x2e0,0x6220,0x740]、[0x2260,0xe20x64700]、[0x446220,0x740]、 、0x2320,0x2700]];
var char = {x: "/u3000"、s: "/u25a0"、t: "/u25a1"};
var keycom = {"38": "Rotate(1)"、 "40": "down()"、 "37": "move(2,1)"、 "39": "move(0.5、-1) "、" 32 ":" 0; Pause =!Pause "};
var dia、pos、bak、run、next、pause = false、info = {speed:1、行:0、スコア:0};
function start(){
dia = next.d;
bak = pos = {fk:[]、y:0、x:4、s:next.s};
nextdia();
document.getElementById( "next")。innerhtml =(next.d [next.s%next.d.length] | 0x10000).toString(2).slice(-16).replace(/..../ g 、 "$&<br/>").replace(/1/g、char.t).replace(/0/g、char.x);
document.getElementById( "Text")。innerhtml = "score:"+info.score+"<br/> <br/> lines:"+info.lines+"<br/> <br/> speed:"+info。スピード;
回転(0);
run = setInterval( "Pause || down()"、~~(math.pow(1.3,12-info.speed)*30+20));
}
function over(){
document.onkeydown = null;
Alert( "Game over");
}
function nextdia(){
next = {d:tatris [~~(math.random()*7)]、s:~~(math.random()*4)};
}
関数アップデート(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、char.t)))))
a2 = a2.substr(0、n =(bak.y+i+1)*15-regexp。$ _。長さ-4)+regexp。$ 1+a2.slice(n+regexp。$ 1. length);
document.getElementById( "box")。innerhtml = a2.replace(/1/g、char.s).replace(/0/g、char.x);
}
関数は(){
for(var i = 0; i <4; i ++)
if((pos.fk [i]&map [pos.y+i])!= 0)pos = bak;
}
関数回転(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(as()){
for(var i = 0、r = 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);
++ info.lines%20 == 0 && info.speed ++、r ++;
}
ClearInterval(run);
if(map [1]!= 0x801)rutch over();
info.score+= ~~(math.pow(r、1.5)*10)+2;
始める();
}
アップデート();
}
関数移動(t、k){
pos.x+= k;
for(var i = 0; i <4; i ++)
pos.fk [i]*= t;
update(is());
}
document.onkeydown = function(e){
eval( "Pause ||"+kycom [(e?e:event).keycode]);
};
nextdia();
始める();
</script> </body> </html>