📄 id.java
字号:
import java.awt.*;
import java.util.*;
import java.math.*;//import table.Table;
public class ID{
private int x;
private int y;
public ID(int x_in,int y_in){
x=x_in;
y=y_in;
}
ID(){}
public int getX(){
return x;
}
public int getY(){
return y;
}
public String toString(){
return new String("id.y="+this.getY()+" id.x="+this.getX());
}
public static ID changeToID(Dimension position){
int x=0,y=0;
Dimension originPos=Table.getOriginPosition();
int chessR=Chess.getChessR();
int distX=Table.getDistanceX();
int distY=Table.getDistanceY();
int n=(position.height-originPos.height)/distY;
if(position.height-(originPos.height+n*distY)>chessR)
y = n + 1;
else if(originPos.height+n*distY-position.height<chessR)
y = n;
int makepos;
if(position.width<originPos.width)
makepos = 2 * originPos.width - position.width;
else makepos=position.width;
if(y%2==0)
{
if(makepos-originPos.width<=chessR)
n=0;
else{
n=(makepos-originPos.width)/distX;
if((makepos-(originPos.width+n*distX))>chessR)
n = n + 1;
else if((originPos.width+n*distX-makepos)<chessR)
n = n;
}
}
if(y%2!=0)
{
n=((makepos-originPos.width)/distX) + 1;
}
if(position.width<originPos.width)
x = 6 - n;
else x = 6 + n;
return new ID(x,y);
}
public static Dimension changeToPos(ID id){
int x=0,y=0;
int idx=id.getX(),idy=id.getY();
// System.out.println("idx="+idx+" idy="+idy);
Dimension originPos=Table.getOriginPosition();
int distX=Table.getDistanceX();
int distY=Table.getDistanceY();
y = originPos.height + idy * distY;
if(idy%2==0){
x = originPos.width + (idx - 6) * distX;
}
if(idy%2!=0){
if(idx>=6){
x = originPos.width + (int)((idx - 6.5) * distX);
}
else{
idx=12-idx;
x = originPos.width - (int)((idx - 6.5) * distX);
}
}
return new Dimension(x,y);
}
public static boolean search(ID idLeave,ID idGo,Table table[][]){
ID id=new ID();
ID idBy=new ID();
id=idLeave;
ID pass[]=new ID[20];
pass[0]=idLeave;
int passNum=1;
boolean isPass=false;
ID idArray[][]=new ID[100][6];
ID idByArray[][]=new ID[100][6];
idArray[0][0]=id;
int i=1,j=0,flag=1,n=1;
Stack stack=new Stack();
stack.push(new Dimension(0,0));
// Stack sta=new Stack();
/* if(idGo.getY()-idLeave.getY()==1||idGo.getY()-idLeave.getY()==-1){
stack.push(new Dimension(0,0));
idArray[0][0]=idGo;
}*/
/* if(idGo.getY()-idLeave.getY()==0&&idGo.getX()-idLeave.getX()==2||
idGo.getX()-idLeave.getX()==-2||idGo.getX()-idLeave.getX()==1
idGo.getX()-idLeave.getX()==-1)*/
// sta.push(idGo);
search: while((id.getX()!=idGo.getX()||id.getY()!=idGo.getY())||(pass[passNum-1].getX()!=
idGo.getX()||pass[passNum-1].getY()!=idGo.getY())){
if(flag==1){
int x=id.getX();
int y=id.getY();
if(x==6&&y%2==0){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x+1,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x-1,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x+1,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x-1,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
else if(x<6&&y%2==0){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x-1,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x-1,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
else if(x>6&&y%2==0){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x+1,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x+1,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
else if(y%2!=0){
if(x==2||x==3||x==0||x==1){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x+1,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x+1,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
if(x==4){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x+1,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x+1,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+3,y); idByArray[n][5]=new ID(x+1,y);
}
if(x==5){
idArray[n][0]=new ID(x+2,y+2);idByArray[n][0]=new ID(x+1,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x,y+1);
idArray[n][2]=new ID(x+2,y-2);idByArray[n][2]=new ID(x+1,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+3,y); idByArray[n][5]=new ID(x+2,y);
}
if(x==7){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x,y+1);
idArray[n][1]=new ID(x-2,y+2);idByArray[n][1]=new ID(x-1,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x,y-1);
idArray[n][3]=new ID(x-2,y-2);idByArray[n][3]=new ID(x-1,y-1);
idArray[n][4]=new ID(x-3,y); idByArray[n][4]=new ID(x-2,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
if(x==8){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x-1,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x-1,y-1);
idArray[n][4]=new ID(x-3,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
if(x==9||x==10||x==11||x==12){
idArray[n][0]=new ID(x+1,y+2);idByArray[n][0]=new ID(x,y+1);
idArray[n][1]=new ID(x-1,y+2);idByArray[n][1]=new ID(x-1,y+1);
idArray[n][2]=new ID(x+1,y-2);idByArray[n][2]=new ID(x,y-1);
idArray[n][3]=new ID(x-1,y-2);idByArray[n][3]=new ID(x-1,y-1);
idArray[n][4]=new ID(x-2,y); idByArray[n][4]=new ID(x-1,y);
idArray[n][5]=new ID(x+2,y); idByArray[n][5]=new ID(x+1,y);
}
}
flag=0;
}
// System.out.println(((Dimension)stack.peek()).toString());
// System.out.println("n="+n);
//System.out.println(i+" "+j);
// System.out.println(idArray[1][1].getX()+idArray[1][1].getY());
if(idGo.getY()-idLeave.getY()==1||idGo.getY()-idLeave.getY()==-1){
while(true){
if(idByArray[i][j]==null)
break search;
if(idByArray[i][j].getX()==idGo.getX()&&idByArray[i][j].getY()==
idGo.getY()){
stack.push(new Dimension(0,0));
idArray[0][0]=idGo;
break search;
}
else if(j==5)
break search;
else j++;
}
}
else if(idGo.getY()-idLeave.getY()==0&&((idLeave.getX()==5&&idLeave.getY()%2!=0&&
(idGo.getX()-idLeave.getX()==2||idGo.getX()-idLeave.getX()==-1))||(idLeave.getX()==7&&idLeave.getY()%2!=0&&
(idGo.getX()-idLeave.getX()==-2||idGo.getX()-idLeave.getX()==1))||
(Math.abs(idLeave.getX()-idGo.getX())==1&&
idLeave.getY()%2==0)||((idLeave.getX()<5||idLeave.getX()>7)&&
Math.abs(idLeave.getX()-idGo.getX())==1&&idLeave.getY()%2!=0))){
while(true){
if(idByArray[i][j]==null)
break search;
if(idByArray[i][j].getX()==idGo.getX()&&idByArray[i][j].getY()==
idGo.getY()){
stack.push(new Dimension(0,0));
idArray[0][0]=idGo;
System.out.println("yes");
break search;
}
else if(j==5)
break search;
else j++;
}
}
else{
if(j<=5&&idArray[i][j]!=null&&idByArray[i][j]!=null){
id=idArray[i][j];
idBy=idByArray[i][j];
System.out.println("x="+id.getX()+" y="+id.getY());
stack.push(new Dimension(i,j));
System.out.println("Stack is "+"i="+((Dimension)stack.peek()).width+
" j="+((Dimension)stack.peek()).height);
int m=id.getX(),q=id.getY();
int d=idBy.getX(),k=idBy.getY();
int initPass=0;
while(pass[initPass]!=null){
if(pass[initPass].getX()==id.getX()&&pass[initPass].getY()
==id.getY())
isPass=true;
initPass++;
}
if(id!=null){
// System.out.println("isPass="+isPass);
// System.out.println("passNum="+passNum);
if((q>=0&&q<=16)&&(k>=0&&k<=16)&&(m>=0&&m<=12)&&(d>=0&&d<=12)){
if(table[q][m].getState()==0&&table[k][d].getState()==1&&!isPass){
flag=1;
n++;
j=0;
i=n;
System.out.println("fuck");
pass[passNum++]=id;
isPass=false;
}
else{
stack.pop();
j++;
System.out.println("yes");
isPass=false;
}
}
else{
stack.pop();
j++;
System.out.println("man");
isPass=false;
}
}
}
else{
if(i==1) break;
Dimension di=(Dimension)stack.pop();
i=di.width;
j=di.height;
j++;
System.out.println("no");
}
System.out.print("flag="+flag);
System.out.print(" n="+n);
System.out.print(" i="+i);
System.out.println(" j="+j);
System.out.println("Stack is "+"i="+((Dimension)stack.peek()).width+
" j="+((Dimension)stack.peek()).height);
System.out.println("x="+id.getX()+" "+"y="+id.getY());
System.out.println();
}
}
/* while(!stack.empty()){
Dimension b=(Dimension)stack.pop();
sta.push(idArray[b.width][b.height]);
}*/
Dimension dc=(Dimension)stack.pop();
if(idArray[dc.width][dc.height].getX()==idGo.getX()&&
idArray[dc.width][dc.height].getY()==idGo.getY()){
// System.out.println("dc.width="+dc.width+" dc.height="+dc.height);
return true;
}
else return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -