private vector findroad(int posx,int posy,int dir){
vector roadupvec=null,roadrightvec=null,roaddownvec=null,roadleftvec=null;
boolean tempup=false,tempright=false,templeft=false,tempdown=false;
int upnum=0,downnum=0,rightnum=0,leftnum=0,maxnum=0;
if(posy>0 && m_nowmap[posx][posy-1]!=0 && dir!=dir_up){
roadupvec=new vector();
roadupvec.addelement(new integer(posx));
roadupvec.addelement(new integer(posy-1));
vector tempvec=findroad(posx,posy-1,dir_down);
if(tempvec!=null){
for(int i=0;i<tempvec.size();i++)
roadupvec.addelement(tempvec.elementat(i));
}
}
else
tempup=false;
if(posx<column-1 && m_nowmap[posx+1][posy]!=0 && dir!=dir_right){
roadrightvec=new vector();
roadrightvec.addelement(new integer(posx+1));
roadrightvec.addelement(new integer(posy));
vector tempvec=findroad(posx+1,posy,dir_left);
if(tempvec!=null){
for(int i=0;i<tempvec.size();i++)
roadrightvec.addelement(tempvec.elementat(i));
}
}
else
tempright=false;
if(posy<row && m_nowmap[posx][posy+1]!=0 && dir!=dir_down){
roaddownvec=new vector();
roaddownvec.addelement(new integer(posx));
roaddownvec.addelement(new integer(posy+1));
vector tempvec=findroad(posx,posy+1,dir_up);
if(tempvec!=null){
for(int i=0;i<tempvec.size();i++)
roaddownvec.addelement(tempvec.elementat(i));
}
}
else
tempdown=false;
if(posx<0 && m_nowmap[posx-1][posy]!=0 && dir!=dir_left){
roadleftvec=new vector();
roadleftvec.addelement(new integer(posx-1));
roadleftvec.addelement(new integer(posy));
vector tempvec=findroad(posx-1,posy,dir_right);
if(tempvec!=null){
for(int i=0;i<tempvec.size();i++)
roadleftvec.addelement(tempvec.elementat(i));
}
}
else
templeft=false;
if(!tempup && !tempright && !tempdown && !templeft)
return null;
else{
if(roadupvec!=null)
upnum=roadupvec.size();
if(roadrightvec!=null)
rightnum=roadupvec.size();
if(roaddownvec!=null)
downnum=roadupvec.size();
if(roadleftvec!=null)
leftnum=roadupvec.size();
maxnum=rightnum;
if(upnum>maxnum)
maxnum=upnum;
if(leftnum>maxnum)
maxnum=leftnum;
if(downnum>maxnum)
maxnum=downnum;
if(maxnum==upnum)
return roadupvec;
else
if(maxnum==downnum)
return roaddownvec;
else
if(maxnum==rightnum)
return roadrightvec;
else
if(maxnum==leftnum)
return roadleftvec;
else
return null;
}
}
闽公网安备 35060202000074号