var mmap=new Array();
mmap[0]=new Array(0,0,0,0,0,0);
mmap[1]=new Array(0,1,2,8,1,0);
mmap[2]=new Array(0,5,5,4,3,0);
mmap[3]=new Array(0,4,6,7,3,0);
mmap[4]=new Array(0,8,2,6,7,0);
mmap[5]=new Array(0,0,0,0,0,0);
p1=new Array(1,4);
p2=new Array(1,2);
//定义一个二维数组作为游戏的映像,相同的数字代表相同的图标,0是空处,p1,p2是选择的点 linelink=function(o1,o2){
var t=new Array(0,0);
if(o1[0]==o2[0] || o1[1]==o2[1]){
if(Math.abs(o1[0]-o2[0])+Math.abs(o1[1]-o2[1])<=1){
return true;
}else{
t[0]=isNaN((o2[0]-o1[0])/Math.abs(o2[0]-o1[0])) ? o1[0] : o1[0]+((o2[0]-o1[0])/Math.abs(o2[0]-o1[0]));
t[1]=isNaN((o2[1]-o1[1])/Math.abs(o2[1]-o1[1])) ? o1[1] : o1[1]+((o2[1]-o1[1])/Math.abs(o2[1]-o1[1]));
return mmap[t[0]][t[1]]==0 ? linelink(t,o2) : false
}
}else{
return false;
}
}
// 上面这个函数是判断任意两个点是否能直线连接(中间的点全为0) var parr=new Array();
pickpoint=function(q1,q2){
var j;
parr.splice(0);
for(j=0;j<mmap[q1[0]].length;j++){
parr=mmap[q1[0]][j]==0?parr.concat([[q1[0],j]]):parr; }
for(j=0;j<mmap[q2[0]].length;j++){
parr=mmap[q2[0]][j]==0?parr.concat([[q2[0],j]]):parr; }
for(j=0;j<mmap.length;j++){
parr=mmap[j][q1[1]]==0?parr.concat([[j,q1[1]]]):parr; }
for(j=0;j<mmap.length;j++){
parr=mmap[j][q2[1]]==0?parr.concat([[j,q2[1]]]):parr; }
}
//上面这个函数是取出两个点的x和y直线方向上的所有空点保存进parr这个数组里面待搜索 islink=function(p1,p2){
var i,j
if(p1==p2){
return false;
}
if(mmap[p1[0]][p1[1]]<>mmap[p2[0]][p2[1]]){
return false;
}
if(linelink(p1,p2)){
return true;
}else{
for(i=0;i<parr.length;i++){
for(j=0;j<parr.length;j++){
if(linelink(p1,parr[i]) && linelink(p2,parr[j]) && linelink(parr[i],parr[j])) {
trace(parr[i]+"->"+parr[j]);
return true;}
}
} }
return false;
}
//上面这个函数是校验两个目标点是否相连,
//先判断是否同类点,再判断是否直线相连,最后搜索parr里的每对折点是否使目标点相连 pickpoint(p1,p2); //取得parr数组
trace(islink(p1,p2)); //测试p1,p2是否相连 嘿,运行试试?
这个是上面这几个函数的测试源码