i=navigator.appName;
if(i=="Microsoft Internet Explorer") brws=1;
else if(i=="Netscape") brws=0;
else brws=1;
xn=4; // マスの数(横)
yn=4; // マスの数(縦)
xs=55; // マスの横サイズ
ys=55; // マスの縦サイズ
pad=0; // マスの間隔
shf=100; // シャッフル回数
buf=100; // バッファサイズ
wt=1; // スライドウェイト
dvx=5; // 横スライド移動分割量
dvy=5; // 縦スライド移動分割量
num=xn*yn; // ピースの数
nn=num-1; // 抜くピースの番号
xnn=xn-1;
ynn=yn-1;
xm=new Array(num+1); // ピースオフセット(横)
ym=new Array(num+1); // ピースオフセット(縦)
id=new Array(num+1); // ピース番号
i2p=new Array(num+1); // 各ピースの座標
p2i=new Array(num+1); // 各マスのピース番号
xm=60; // 左マージン
ym=100; // 上マージン
bdrwid=8; // 枠太さ
bdrcol="brown"; // 枠色
bbgcol="navy"; // 枠内背景色
bdrsty="ridge"; // 枠スタイル
rsx=new Array(buf);
rsy=new Array(buf);
rs=0;
rs0=0;
score=0;
flag=0;
with(document){
write("
");
write("");
forms["LINK"].style.position="absolute";
forms["LINK"].style.left=0;
forms["LINK"].style.top=-100;
write("");
forms["BACK"].style.position="absolute";
forms["BACK"].style.left=xm-bdrwid;
forms["BACK"].style.top=ym-bdrwid;
for(i=0;i");
if(i%xn==xn-1) write("
");
images[id[i]].style.position="absolute";
images[id[i]].style.left=xm+(i%xn)*(xs+pad);
images[id[i]].style.top=ym+Math.floor(i/xn)*(ys+pad);
}
id[nn]="N"+String(nn);
i2p[nn]=nn;
p2i[nn]=nn;
write("");
images[id[nn]].style.position="absolute";
images[id[nn]].style.left=xm+(nn%xn)*(xs+pad);
images[id[nn]].style.top=-ys*2;
id[num]="N"+String(num);
i2p[num]=num;
p2i[num]=num;
write("");
images[id[num]].style.position="absolute";
images[id[num]].style.left=xm+(nn%xn)*(xs+pad);
images[id[num]].style.top=ym+Math.floor(nn/xn)*(ys+pad);
scr_disp();
to="ready";
}
function game_start(){
if((to=="ready")||(to=="ok")){
for(i=0;i=ya;i--){
j=xa+i*xn;
k=p2i[j];
i2p[k]+=xn;
p2i[i2p[k]]=k;
}
i2p[nn]+=(ya-yb)*xn;
p2i[i2p[nn]]=nn;
mv=sty;
tid=setTimeout("move(0)",wt);
}
else{
for(i=yb+1;i<=ya;i++){
j=xa+i*xn;
k=p2i[j];
i2p[k]-=xn;
p2i[i2p[k]]=k;
}
i2p[nn]+=(ya-yb)*xn;
p2i[i2p[nn]]=nn;
mv=sty;
tid=setTimeout("move(1)",wt);
}
}
else if(ya==yb){
if(xa=xa;i--){
j=i+ya*xn;
k=p2i[j];
i2p[k]+=1;
p2i[i2p[k]]=k;
}
i2p[nn]+=(xa-xb);
p2i[i2p[nn]]=nn;
mv=stx;
tid=setTimeout("move(2)",wt);
}
else{
for(i=xb+1;i<=xa;i++){
j=i+ya*xn;
k=p2i[j];
i2p[k]-=1;
p2i[i2p[k]]=k;
}
i2p[nn]+=(xa-xb);
p2i[i2p[nn]]=nn;
mv=stx;
tid=setTimeout("move(3)",wt);
}
}
else{
tid=setTimeout("shuffle()",0);
}
}
function puzzle(n){
if(to=="mv"){
rsv=1;
rsn=n;
}
else if(to=="ok"){
a=i2p[n];
xa=a%xn;
ya=Math.floor(a/xn);
b=i2p[nn];
xb=b%xn;
yb=Math.floor(b/xn);
xd=0;
yd=0;
if(xa==xb){
if(flag!=1){
score--;
flag=1;
rs=(rs+1)%buf;
rsx[rs]=xb;
rsy[rs]=yb;
if(rs==rs0) rs0=(rs0+1)%buf;
}
else{
if((rsx[rs]==xa)&&(rsy[rs]==ya)){
score++;
if(flag!=0){
rs=(rs+buf-1)%buf;
if(rs!=rs0) flag=2;
else flag=0;
}
}
}
if(ya=ya;i--){
j=xa+i*xn;
k=p2i[j];
i2p[k]+=xn;
p2i[i2p[k]]=k;
}
i2p[nn]+=(ya-yb)*xn;
p2i[i2p[nn]]=nn;
mv=sty;
tid=setTimeout("move(0)",wt);
}
else{
for(i=yb+1;i<=ya;i++){
j=xa+i*xn;
k=p2i[j];
i2p[k]-=xn;
p2i[i2p[k]]=k;
}
i2p[nn]+=(ya-yb)*xn;
p2i[i2p[nn]]=nn;
mv=sty;
tid=setTimeout("move(1)",wt);
}
}
else if(ya==yb){
if(flag!=2){
score--;
flag=2;
rs=(rs+1)%buf;
rsx[rs]=xb;
rsy[rs]=yb;
if(rs==rs0) rs0=(rs0+1)%buf;
}
else{
if((rsx[rs]==xa)&&(rsy[rs]==ya)){
score++;
if(flag!=0){
rs=(rs+buf-1)%buf;
if(rs!=rs0) flag=1;
else flag=0;
}
}
}
if(xa=xa;i--){
j=i+ya*xn;
k=p2i[j];
i2p[k]+=1;
p2i[i2p[k]]=k;
}
i2p[nn]+=(xa-xb);
p2i[i2p[nn]]=nn;
mv=stx;
tid=setTimeout("move(2)",wt);
}
else{
for(i=xb+1;i<=xa;i++){
j=i+ya*xn;
k=p2i[j];
i2p[k]-=1;
p2i[i2p[k]]=k;
}
i2p[nn]+=(xa-xb);
p2i[i2p[nn]]=nn;
mv=stx;
tid=setTimeout("move(3)",wt);
}
}
// a="xa="+String(xa)+",ya="+String(ya)+",xb="+String(xb)+",yb="+String(yb)+",p2i="+String(p2i[nn])+",i2p="+String(i2p[nn]);
// alert(a);
}
}
function move(n){
clearTimeout(tid);
if(to=="shuf"){
to="shuf_";
}
else if(to=="ok"){
to="mv";
}
switch(n){
case 0:
mv+=spy;
for(i=ya+1;i<=yb;i++){
k=p2i[xa+i*xn];
y=ym+i*(ys+pad)+mv;
document.images[id[k]].style.top=y;
}
break;
case 1:
mv+=spy;
for(i=ya-1;i>=yb;i--){
k=p2i[xa+i*xn];
y=ym+i*(ys+pad)-mv;
document.images[id[k]].style.top=y;
}
break;
case 2:
mv+=spx;
for(i=xa+1;i<=xb;i++){
k=p2i[i+ya*xn];
x=xm+i*(xs+pad)+mv;
document.images[id[k]].style.left=x;
}
break;
case 3:
mv+=spx;
for(i=xa-1;i>=xb;i--){
k=p2i[i+ya*xn];
x=xm+i*(xs+pad)-mv;
document.images[id[k]].style.left=x;
}
break;
}
if(mv>=0){
scr_disp();
if(to=="shuf_"){
round--;
if(round>0){
tid=setTimeout("shuffle()",0);
to="shuf";
}
else{
spx=Math.floor(xs/dvx);
stx=-spx*dvx;
spy=Math.floor(ys/dvy);
sty=-spy*dvy;
rsv=0;
rsn=0;
to="ok";
}
}
else{
for(i=0;i