⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 availableplace.java

📁 网络象棋对战程序,模拟vista的国际象棋功能,可以自动寻找路径,棋子随同鼠标移动.另有网络聊天功能. ps:里面用的登陆服务器地址,需要稍做修改,修改成你想登陆的服务器. 开发工具eclipse
💻 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 + -