MSIE は SB
<スクリプト>
//逻辑制御に使用される完全なメソッド
関数 x4(n){
var t=[];
while(n-->0)t.push([]);
return t;
}
関数 xx(f){
for(var i=0;i
for(var j=0;j
f(i,j);
}
}
}
関数 make(n){
戻り値 {
番号:n、
移動ステップ:0,
新しい番号:n、
必要キル:0
};
}
関数 tran(_arr,md){
var undo=x4(UI.nw);
var out=x4(UI.nw);
var ud=UI.undo;
if(ud.push(undo)>32)ud.shift();
for(var i=0;i
var t=[],o=md%2^1;
for(var k=0;k
undo[i][k]=_arr[i][k].number;
if(md
}
o && t.reverse();
t=trans(t);
if(o)t[0].reverse(),t[1].reverse();
for(var j=0;j
var x=i,y=j;
if(md>2)x=j,y=i;
_arr[x][y]=t[0][j];
out[x][y]=t[1][j];
}
}
return [_arr,out];
}
関数 trans(arr){
for(var i=0,m=0;i
if(arr[i].number===0)m ;else arr[i].moveStep =m;
var _i=arr[i];
for(var j=i-1;j>=0;j--){
if(!arr[j].number)Continue;
if(arr[j].needKill)break;
if(arr[j].number==_i.number){
arr[j].needKill=1;
arr[i].newNumber*=2;
arr[i].moveStep ;
も;
}
}
}
var out=[];
for(var i=UI.nw;i--;){
!arr[i].needKill && arr[i].number && out.unshift(arr[i].newNumber);
}
while(out.length
return [arr,out];
}
// 界面操作が開始され、界面操作のパラメータが完全なローカル メソッドを通じて取得されます
function $(a){return document.getElementById(a);}
UI={};
UI.update=function(d){
if(UI.locked)return;
var map=this.map;
var n=this.times;
UI.locked=1;//未完成アニメーション画の前に用户アニメーション作品を停止します
var out=tran(map,d)[1];
var _n=0,_begin=x4(UI.nw);
(function(){
if(_n>n){
var _q=0;
xx(function(i,j){
_q=_q||this.map[i][j].moveStep;
var o=$('i'+i+'j'+j);
o.innerHTML=out[i][j]||'';
o.className='x r'+o.innerText;
this.map[i][j]=make(out[i][j]);
o=o.style;
o.display='block';
o.left=UI.size*j+"px";
o.top=UI.size*i+"px";
});
return _q ? UI.addNew():(UI.locked=0);
}
xx(function(i,j){
var o=$('i'+i+'j'+j),t,o1=o.style,s=d<3?'left':'top';
if(t=map[i][j][_n==n?'newNumber':'number'])o.innerHTML=t;else o1.display='none';
if(_begin[i][j]===undefined)_begin[i][j]=parseInt(o1[s]);
o1[s]=(_begin[i][j]+(map[i][j].moveStep*100/n*_n)*Math.pow(-1,d))+'px';
});
_n++;
setTimeout(arguments.callee,10);
})();
}
UI.undo=[];
UI.addNew=function(_q){
UI.locked=1;
var r=[];
xx(function(i,j){
this.map[i][j].number || r.push([i,j]);
});
if(!r.length)return UI.locked=0;
var q=new Date%r.length;q=r[q];
var b=$('i'+q[0]+'j'+q[1]);
var m=this.map[q[0]][q[1]];
b.innerHTML=m.number=m.newNumber=2<
b.className='x r'+b.innerText;
var o=0,q=5;
(function(){
if(o<100)setTimeout(arguments.callee,10);
b.style.opacity=Math.min(o+=q++,100)/100;
})();
UI.locked=0;//解除锁定
};
//创建
UI.init=function(nw,maxUndo,size,times){
UI.times=times||8;//动画过度次数
UI.nw=nw||5;//方阵边长
UI.map=map=x4(UI.nw);//创建数字块对象
UI.size=size||100;//单元格宽度
UI.maxUndo=maxUndo||5;//最大撤销步数
$('box').innerHTML='';
xx(function(i,j){
map[i][j]=make(0);
document.write("
style='left:"+(UI.size*j)+"px;top:"+(UI.size*i)+"px;'>