<!doctype html>
<html>
<head>
<meta charset="gb2312" />
<title></title>
<style>
</style> </head>
<body>
<script>
function gd(){
var arr=[1,2,3,4,5,6,7,8].sort(function(){return Math.random()>.5});
for(var i=0,k=0,n=arr.length;i<n;i++)
for(var j=i+1;j<n;j++)
arr[i]>arr[j] && (k=1-k);
k && (i=arr[n-2]) && (arr[n-2]=arr[n-1]) && (arr[n-1]=i);
return [arr.slice(0,3),arr.slice(3,6),arr.slice(6).concat('_')];
}
var r=2,c=2,sp='\r\n',d=gd();
document.writeln('<textarea id="t1" readonly style="overflow:hidden;width:70px;height:70px;">'+d.join(sp)+'</textarea>');
var t1=document.getElementById("t1");
document.onkeyup = function (e){
var k = (e||window.event).keyCode, t, rr2=r, cc2=c;
if(k==37||k==39){
c2 += 38-k;
if(c2<0||c2>2)return;
}else if(k==38||k==40){
r2 += 39-k;
if(r2<0||r2>2)return;
}else return;
t = d[r][c];
d[r][c] = d[r2][c2];
d[r=r2][c=c2] = t;
t1.value = d.join(sp);
if(t1.value.match(/^1,2,3[^\d]*4,5,6[^0]*_$/)){
alert('YOU WIN !');
}
}
</script>
</body>
</html>这样的啊,运行不了。
<html>
<head>
<meta charset="gb2312" />
<title></title>
<style>
</style> </head>
<body>
<script>
function gd(){
var arr=[1,2,3,4,5,6,7,8].sort(function(){return Math.random()>.5});
for(var i=0,k=0,n=arr.length;i<n;i++)
for(var j=i+1;j<n;j++)
arr[i]>arr[j] && (k=1-k);
k && (i=arr[n-2]) && (arr[n-2]=arr[n-1]) && (arr[n-1]=i);
return [arr.slice(0,3),arr.slice(3,6),arr.slice(6).concat('_')];
}
var r=2,c=2,sp='\r\n',d=gd();
document.writeln('<textarea id="t1" readonly style="overflow:hidden;width:70px;height:70px;">'+d.join(sp)+'</textarea>');
var t1=document.getElementById("t1");
document.onkeyup = function (e){
var k = (e||window.event).keyCode, t, rr2=r, cc2=c;
if(k==37||k==39){
c2 += 38-k;
if(c2<0||c2>2)return;
}else if(k==38||k==40){
r2 += 39-k;
if(r2<0||r2>2)return;
}else return;
t = d[r][c];
d[r][c] = d[r2][c2];
d[r=r2][c=c2] = t;
t1.value = d.join(sp);
if(t1.value.match(/^1,2,3[^\d]*4,5,6[^0]*_$/)){
alert('YOU WIN !');
}
}
</script>
</body>
</html>这样的啊,运行不了。
<html>
<head>
<meta charset="gb2312" />
<title></title>
<style>
</style> </head>
<body>
<script>
function gd(){
var arr=[1,2,3,4,5,6,7,8].sort(function(){return Math.random()>.5});
for(var i=0,k=0,n=arr.length;i<n;i++)
for(var j=i+1;j<n;j++)
arr[i]>arr[j] && (k=1-k);
k && (i=arr[n-2]) && (arr[n-2]=arr[n-1]) && (arr[n-1]=i);
return [arr.slice(0,3),arr.slice(3,6),arr.slice(6).concat('_')];
}
var r=2,c=2,sp='\r\n',d=gd();
document.writeln('<textarea id="t1" readonly style="overflow:hidden;width:70px;height:70px;">'+d.join(sp)+'</textarea>');
var t1=document.getElementById("t1");
document.onkeyup = function (e){
var k = (e||window.event).keyCode, t, rr2=r, cc2=c;
if(k==37||k==39){
c2 += 38-k;
if(c2<0||c2>2)return;
}else if(k==38||k==40){
r2 += 39-k;
if(r2<0||r2>2)return;
}else return;
t = d[r][c];
d[r][c] = d[r2][c2];
d[r=r2][c=c2] = t;
t1.value = d.join(sp);
if(t1.value.match(/^1,2,3[^\d]*4,5,6[^0]*_$/)){
alert('YOU WIN !');
}
}
</script>
</body>
</html>这样的啊,运行不了。
zswang已经指出了。
rr2=r, cc2=c;
改为
r2=r, c2=c;
var points = [],
temp, j = 1,
colCount = 15,
rowCount = 7,
current = [rowCount - 1, colCount - 1],
len = String(rowCount * colCount).length;for(var row = rowCount; row--;){
var lines = [];
points.push(lines);
for(var col = colCount; col--;){
lines.push((new Array(len).join(0) + j++).slice(-len));
}
}
points[current[0]][current[1]] = new Array(len + 1).join('_');var success = points.join('\n');
function move(direction){
if (!(/^[0-3]$/.test(direction))) return;
var offset = [[-1, 0], [0, -1], [+1, 0], [0, +1]][direction],
next = [current[0] + offset[0], current[1] + offset[1]];
if (!points[next[0]] || !points[next[0]][next[1]]) return;
points[current[0]][current[1]] = points[next[0]][next[1]];
points[next[0]][next[1]] = new Array(len + 1).join('_');
current = next;
return true;
}
for(var i = rowCount * colCount * 4; i--;){
move(0 | (Math.random() * 4));
}
var t1 = document.getElementById("t1");
t1.value = points.join('\n');
t1.onkeyup = function(e){
if (move(40 - (e || event).keyCode) && success == (t1.value = temp = points.join('\n'))){
t1.onkeyup = alert('YOU WIN !');
}
};
t1.focus();
<script>
function gd(){
var arr=[1,2,3,4,5,6,7,8].sort(function(){return Math.random()>.5});
for(var i=0,k=0,n=arr.length;i<n;i++)
for(var j=i+1;j<n;j++)
arr[i]>arr[j] && (k=1-k);
k && (i=arr[n-2]) && (arr[n-2]=arr[n-1]) && (arr[n-1]=i);
return arr.concat(0);
}
function v(){
return (d+'').replace(0,' ').replace(/(.{5}),/g,'$1\r\n');
}
document.writeln('<textarea id="t1" readonly autocomplete="off" style="overflow:hidden;width:70px;height:70px;"></textarea>');
var p=8, d=gd(), t1=document.getElementById("t1");
setTimeout('t1.value=v()',10);
document.onkeyup = function (e){
var k = (e||window.event).keyCode-36, t, q;
if(k==1 && (p%3<2) || k==3 && (p%3>0) || k==2 && p<6 || k==4 && p>2){
q=p+(k>2?1:-1)*(k%2*2-3);
d[p]=d[q], d[p=q]=0;
if((t1.value=v()).match(/^1,2,3[^\d]*4,5,6[^0]* $/))
alert('YOU WIN !');
}
}
</script>直接体验就轻轻点击这里。
BLOG上的代码也更新了。
这里的帖子没法改,就算了。
另外,你的len = String(rowCount * colCount).length;有bug,你试试2x5,10x10之类的布局就会多出一个0。
应该改为 len = String(rowCount * colCount -1).length;你是通过从结果来移动若干次,保证有解,但是空格不在末尾了,如果要把空格移回末尾,还要两个循环。下面贴上我的任意行列版本(代码变长了)<div id="t1" style="border:1px solid black; padding:5px; display:inline-block;"></div>
<script>
var t1=document.getElementById("t1");
function layout(M,N){
R=M; C=N; r=R-1; c=C-1; D=[]; n=R*C-1;
w = (n+'').length;
rgx = new RegExp('(.{'+(w*C+c-1)+'}),','g');
space = new Array(w+1).join('_');
zero = new Array(w).join(0);
replay();
}
function replay(){
i=n;
while(i--){
D[i]=(zero+(i+1)).slice(-w);
}
D[n] = space;
ok = D+'';
while(++i<n){
j=D[rnd = Math.random()*(n-1)|0];
D[rnd]=D[i];
D[i]=j;
}
for(i=0,k=0;i<n;i++)
for(j=i+1;j<n;j++)
D[i]>D[j] && (k=1-k);
k && (i=D[n-2]) && (D[n-2]=D[n-1]) && (D[n-1]=i);
t1.innerHTML = (D+'').replace(rgx,'$1<br>');
}
function move(dir){
if (dir>=0&&dir<4) {
k = [[0,1],[1,0],[0,-1],[-1,0]][dir], r2 = r+k[0], c2 = c+k[1];
if (r2+1 && r2<R && c2+1 && c2<C)
return D[r*C+c] = D[r2*C+c2],
D[(r=r2)*C+(c=c2)] = space,
t1.innerHTML = (D+'').replace(rgx,'$1<br>');
}
}
document.onkeyup = function (e){
if(move((e||window.event).keyCode-37) && (D+'')==ok && alert('YOU WIN !'));
}
layout(4,4);
</script>