📄 availableplace.java
字号:
package client;
import java.awt.Point;
public class AvailablePlace
{
public java.util.Vector<java.awt.Point> ap = ChessBoard.theap; // new java.util.Vector<java.awt.Point>(10,2);
public AvailablePlace(int id, int[][] moment)
{
ap.removeAllElements();
if(id < 1 | id > 32)
{
System.err.println("Availabe place("+id+", moment)");
return;
}
int x = ChessBoard.chess[id].x;
int y = ChessBoard.chess[id].y;
System.err.println("OK: Available("+id+" , "+x+" , "+y+")");
switch(id)
{
//Che's Rule
case 1:
case 9:
case 17:
case 25: for(int i = x+1; i < 9 && canMove(id,moment[i][y]); i++)
{
ap.add(new Point(i, y));
if(moment[i][y] != 0)
{
break;
}
}
for(int i = x-1; i > -1 && canMove(id,moment[i][y]); i--)
{
ap.add(new Point(i, y));
if(moment[i][y] != 0)
{
break;
}
}
for(int i = y+1; i < 10 && canMove(id,moment[x][i]); i++)
{
ap.add(new Point(x,i));
if(moment[x][i] != 0)
{
break;
}
}
for(int i = y-1; i > -1 && canMove(id,moment[x][i]); i--)
{
ap.add(new Point(x,i));
if(moment[x][i] != 0)
{
break;
}
}
break;
//Ma's Rule
case 2:
case 8:
case 18:
case 24: if(x+2 < 9 && y-1 > -1 && canMove(id,moment[x+2][y-1]) && moment[x+1][y] == 0)
ap.add(new Point(x+2, y-1));
if(x+2 < 9 && y+1 < 10 && canMove(id,moment[x+2][y+1]) && moment[x+1][y] == 0)
ap.add(new Point(x+2, y+1));
if(x+1 < 9 && y+2 < 10 && canMove(id,moment[x+1][y+2]) && moment[x][y+1] == 0)
ap.add(new Point(x+1, y+2));
if(x-1 > -1 && y+2 < 10 && canMove(id,moment[x-1][y+2]) && moment[x][y+1] == 0)
ap.add(new Point(x-1, y+2));
if(x-2 > -1&& y+1 < 10&& canMove(id,moment[x-2][y+1]) && moment[x-1][y] == 0)
ap.add(new Point(x-2, y+1));
if(x-2 > -1&& y-1 > -1 && canMove(id,moment[x-2][y-1]) && moment[x-1][y] == 0)
ap.add(new Point(x-2, y-1));
if(x-1 >-1 && y-2 > -1 && canMove(id,moment[x-1][y-2]) && moment[x][y-1] == 0)
ap.add(new Point(x-1, y-2));
if(x+1 < 9 && y-2 > -1 && canMove(id,moment[x+1][y-2]) && moment[x][y-1] == 0)
ap.add(new Point(x+1, y-2));
break;
//blue Xiang's Rule
case 3:
case 7:
//Red Xiang's rule
case 19:
case 23:if(y < 5 && y > -1)
{
if(x+2 < 9 && y+2 < 5 && canMove(id,moment[x+2][y+2])&& moment[x+1][y+1] == 0)
ap.add(new Point(x+2, y+2));
if(x-2 > -1 && y+2 < 5 &&canMove(id,moment[x-2][y+2])&& moment[x-1][y+1] == 0)
ap.add(new Point(x-2, y+2));
if(x+2 < 9 && y-2 > -1 && canMove(id,moment[x+2][y-2]) && moment[x+1][y-1] == 0)
ap.add(new Point(x+2, y-2));
if(x-2 > -1&& y-2 > -1 && canMove(id,moment[x-2][y-2]) && moment[x-1][y-1] == 0)
ap.add(new Point(x-2, y-2));
break;
}
if(y > 4 && y < 10)
{
if(x+2 < 9 && y+2 < 10&& canMove(id,moment[x+2][y+2])&& moment[x+1][y+1] == 0)
ap.add(new Point(x+2, y+2));
if(x-2 > -1 && y+2 < 10&& canMove(id,moment[x-2][y+2])&& moment[x-1][y+1] == 0)
ap.add(new Point(x-2, y+2));
if(x+2 < 9 && y-2 > 4 && canMove(id,moment[x+2][y-2])&& moment[x+1][y-1] == 0)
ap.add(new Point(x+2, y-2));
if(x-2 > -1&& y-2 > 4 && canMove(id,moment[x-2][y-2])&& moment[x-1][y-1] == 0)
ap.add(new Point(x-2, y-2));
break;
}
System.err.println("err when get available place");
//blue Shi's rule
case 4:
case 6:
case 20:
case 22:if((x==4&&y==1)|(x==4&&y==8))
{
if(canMove(id,moment[x-1][y-1]))ap.add(new Point(x-1,y-1));
if(canMove(id,moment[x-1][y+1]))ap.add(new Point(x-1,y+1));
if(canMove(id,moment[x+1][y-1]))ap.add(new Point(x+1,y-1));
if(canMove(id,moment[x+1][y+1]))ap.add(new Point(x+1,y+1));
break;
}
if(x==3&&y==0)
{
if(canMove(id,moment[x+1][y+1]))ap.add(new Point(x+1,y+1));
break;
}
if(x==3&&y==2)
{
if(canMove(id,moment[x+1][y-1]))ap.add(new Point(x+1,y-1));
break;
}
if(x==3&&y==7)
{
if(canMove(id,moment[x+1][y+1]))ap.add(new Point(x+1,y+1));
break;
}
if(x==3&&y==9)
{
if(canMove(id,moment[x+1][y-1]))ap.add(new Point(x+1,y-1));
break;
}
if(x==5&&y==0)
{
if(canMove(id,moment[x-1][y+1]))ap.add(new Point(x-1,y+1));
break;
}
if(x==5&&y==2)
{
if(canMove(id,moment[x-1][y-1]))ap.add(new Point(x-1,y-1));
break;
}
if(x==5&&y==7)
{
if(canMove(id,moment[x-1][y+1]))ap.add(new Point(x-1,y+1));
break;
}
if(x==5&&y==9)
{
if(canMove(id,moment[x-1][y-1]))ap.add(new Point(x-1,y-1));
break;
}
System.err.println("err when get available place");
//blue Jiang's rule
case 5:
//red Shuai's rule
case 21:
if(y < 3)
{
for(int i = 3; i < 6; i++)
for(int j = 0; j < 3; j++)
{
if(i==x && (j-y == 1 || j-y == -1) && canMove(id,moment[i][j]))
//if(canMove(id,moment[i][j]))
ap.add(new Point(i,j));
if(j==y && (x-i == 1 || x-i == -1) && canMove(id,moment[i][j]))
//if(canMove(id,moment[i][j]))
ap.add(new Point(i,j));
}
break;
}
if(y>6)
{
for(int i = 3; i < 6; i++)
for(int j = 7; j < 10; j++)
{
if(i==x && (j-y == 1 || j-y == -1) && canMove(id,moment[i][j]))
//if(canMove(id,moment[i][j]))
ap.add(new Point(i,j));
if(j==y && (x-i == 1 || x-i == -1) && canMove(id,moment[i][j]))
//if(canMove(id,moment[i][j]))
ap.add(new Point(i,j));
}
break;
}
System.err.println("err when get available place");
//Pao's rules
case 10:
case 11:
case 26:
case 27:int i;// = x+1;
for(i = x+1; i < 9 && moment[i][y] == 0; i++)
ap.add(new Point(i, y));
if(i < 9)
{
for(i++;i < 9 && moment[i][y] == 0;i++)
;
if(i < 9 && ((moment[i][y]< 17 && moment[i][y] > 0 && id > 16)|(moment[i][y] > 16 && id < 17)))
ap.add(new Point(i,y));
}
//dirction 2
for(i = x-1; i > -1 && moment[i][y] == 0; i--)
ap.add(new Point(i, y));
if(i > -1)
{
for(i--;i > -1 && moment[i][y] == 0;i--)
;
if(i > -1 && ((moment[i][y]< 17 && moment[i][y] > 0 && id > 16)|(moment[i][y] > 16 && id < 17)))
ap.add(new Point(i,y));
}
//dirction 3
for(i = y+1; i < 10 && moment[x][i] == 0; i++)
ap.add(new Point(x,i));
if(i < 10)
{
for(i++;i < 10 && moment[x][i] == 0;i++)
;
if(i < 10 && ((moment[x][i]< 17 && moment[x][i] > 0 && id > 16)|(moment[x][i] > 16 && id < 17)))
ap.add(new Point(x,i));
}
//dirction 4
for(i = y-1; i > -1 && moment[x][i] == 0; i--)
ap.add(new Point(x,i));
if(i > -1)
{
for(i--;i > -1 && moment[x][i] == 0;i--);
if(i > -1 && ((moment[x][i]< 17 && moment[x][i] > 0 && moment[x][i] > 0 && id > 16)|(moment[x][i] > 16 && id < 17)))
ap.add(new Point(x,i));
}
break;
//blue Zui's rule
case 12:
case 13:
case 14:
case 15:
case 16:
//red Bing's rule
case 28:
case 29:
case 30:
case 31:
case 32:
if(id < 17)//greenv 5- shuai, 21- jiang
{
if(ChessBoard.chess[5].y < 3) //above place
{
if(y+1 < 10 && canMove(id,moment[x][y+1]))
ap.add(new Point(x,y+1));
if(y > 4) // in enemy's place
{
if(x-1 > -1 && canMove(id,moment[x-1][y]))
ap.add(new Point(x-1, y));
if(x+1 < 9 && canMove(id,moment[x+1][y]))
ap.add(new Point(x+1,y));
}
}//ChessBoard.chess[5].y < 3
else //y > 4
{
if(y-1 > -1 && canMove(id,moment[x][y-1]))
ap.add(new Point(x,y-1));
if(y < 5) // in enemy's place
{
if(x-1 > -1 && canMove(id,moment[x-1][y]))
ap.add(new Point(x-1, y));
if(x+1 < 9 && canMove(id,moment[x+1][y]))
ap.add(new Point(x+1,y));
}
} //ChessBoard.chess[5].y >= 3
}//if(id < 17)
else //red id > 16
{
if(ChessBoard.chess[21].y < 3) //above place
{
if(y+1 < 10 && canMove(id,moment[x][y+1]))
ap.add(new Point(x,y+1));
if(y > 4) // in enemy's place
{
if(x-1 > -1 && canMove(id,moment[x-1][y]))
ap.add(new Point(x-1, y));
if(x+1 < 9 && canMove(id,moment[x+1][y]))
ap.add(new Point(x+1,y));
}
}//ChessBoard.chess[5].y < 3
else
{
if(y-1 > -1 && canMove(id,moment[x][y+1]))
ap.add(new Point(x,y+1));
if(y < 5) // in enemy's place
{
if(x-1 > -1 && canMove(id,moment[x-1][y]))
ap.add(new Point(x-1, y));
if(x+1 < 9 && canMove(id,moment[x+1][y]))
ap.add(new Point(x+1,y));
}
} //ChessBoard.chess[5].y >= 3
}
break;
default: System.err.println("default:err when get available place("+id+" , "+x+" , "+y+")");
}//switch ends
System.err.println("OK: Available("+id+" , "+x+" , "+y+") and ap == 0 is "+(ap.size() == 0));
}//AvailablePlace
public boolean canMove(int id, int id2)
{
if(id2 == 0)
return true;
if(id < 17 && id2 > 16)
return true;
if(id > 16 && id2 < 17)
return true;
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -