chinesechess.java
来自「可联机对战的中国象棋java源代码 包括服务器文件和客户端文件」· Java 代码 · 共 1,165 行 · 第 1/4 页
JAVA
1,165 行
if(host)player[0]=1;else player[0]=3;
}
public static void save()//储存已走的部分
{
for(int i=0;i<=31;i++)
{
savechessman[num%10][2*i]=chessman[i].getX();savechessman[num%10][2*i+1]=chessman[i].getY();
}
num++;
}
public static void reputsend()//发送请求方的悔棋方法
{
if(player[0]==3||player[0]==2)
{
if(num==1)
{
putchessman();player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);num--;
if(player[0]==3)
{blackready.setVisible(true);redready.setVisible(false);}else{blackready.setVisible(false);redready.setVisible(true);}
}
if(num>1)
{
for(int i=0;i<=31;i++)
{
if(savechessman[(num-2)%10][2*i]!=0)
{
chessman[i].setBounds(savechessman[(num-2)%10][2*i],savechessman[(num-2)%10][2*i+1],40,40);chessman[i].setVisible(true);
}
}
num--;selected.setVisible(false);player[0]=3-player[0];recent.setVisible(false);
if(!host){blackready.setVisible(true);redready.setVisible(false);}else{blackready.setVisible(false);redready.setVisible(true);}
}
}
else
{
if(num==2){putchessman();selected.setVisible(false);recent.setVisible(false);num=num-2;}
if(num>2)
{
for(int i=0;i<=31;i++)
{
if(savechessman[(num-3)%10][2*i]!=0)
{
chessman[i].setBounds(savechessman[(num-3)%10][2*i],savechessman[(num-3)%10][2*i+1],40,40);chessman[i].setVisible(true);
}
}
num=num-2;selected.setVisible(false);recent.setVisible(false);
}
}
}
public static void reputreceive()//接受请求方的悔棋方法
{
if(player[0]==1||player[0]==0)
{
if(num==1){putchessman();player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);num--;
if(!host)
{blackready.setVisible(false);redready.setVisible(true);}else{blackready.setVisible(true);redready.setVisible(false);}}
if(num>1)
{
for(int i=0;i<=31;i++)
{
if(savechessman[(num-2)%10][2*i]!=0)
{
chessman[i].setBounds(savechessman[(num-2)%10][2*i],savechessman[(num-2)%10][2*i+1],40,40);chessman[i].setVisible(true);
}
}
num--;player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);
if(!host)
{blackready.setVisible(false);redready.setVisible(true);}
else{blackready.setVisible(true);redready.setVisible(false);}
}
}
else
{
if(num==2){putchessman();selected.setVisible(false);recent.setVisible(false);num=num-2;}
if(num>2)
{
for(int i=0;i<=31;i++)
{
if(savechessman[(num-3)%10][2*i]!=0)
{
chessman[i].setBounds(savechessman[(num-3)%10][2*i],savechessman[(num-3)%10][2*i+1],40,40);chessman[i].setVisible(true);
recent.setVisible(false);
}
}
num=num-2;selected.setVisible(false);recent.setVisible(false);
}
}
}
public static void main(String args[])
{
new ChineseChess();
}
}
class rule//规则类
{
//车规则开始
public static void vehiclemove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
{
int Xmin=5,Xmax=485,Ymin=5,Ymax=545,j,k;
for(j=0;j<=31;j++)//获得移动范围
{
if(chessman[j].getX()>Xmin&&chessman[j].getX()<current.getX()&&chessman[j].getY()==current.getY())
Xmin=chessman[j].getX();
if(chessman[j].getX()<Xmax&&chessman[j].getX()>current.getX()&&chessman[j].getY()==current.getY())
Xmax=chessman[j].getX();
if(chessman[j].getY()>Ymin&&chessman[j].getY()<current.getY()&&chessman[j].getX()==current.getX())
Ymin=chessman[j].getY();
if(chessman[j].getY()<Ymax&&chessman[j].getY()>current.getY()&&chessman[j].getX()==current.getX())
Ymax=chessman[j].getY();
}
if(e.getSource().equals(background))//点击到棋盘移动
{
selected.setVisible(false);
for(int X=5;X<620;X+=60)
for(int Y=5;Y<620;Y+=60)
{
if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()&&Y<=Ymax&&Y>=Ymin)||(Y==current.getY()&&X<=Xmax&&X>=Xmin)))
{
current.setBounds(X,Y,40,40);
clicked[0]=true;
player[0]=3-player[0];
break;
}
}
}
for(j=0;j<=31;j++)//吃掉被单击的棋子
{
if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()&&chessman[j].getY()<=Ymax&&chessman[j].getY()>=Ymin)||(chessman[j].getY()==current.getY()&&chessman[j].getX()<=Xmax&&chessman[j].getX()>=Xmin)))//点击到棋子
{
selected.setVisible(false);
current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
clicked[0]=true;
chessman[j].setVisible(false);
chessman[j].setBounds(0,0,0,0);
player[0]=3-player[0];
break;
}
}
clicked[0]=true;
selected.setVisible(false);
}//车规则结束
//马规则开始
public static void horsemove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
{
int j;
boolean north=true,south=true,east=true,west=true;
for(j=0;j<=31;j++)//确认是否蹩脚
{
if(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()-60)
north=false;
if(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60)
south=false;
if(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)
west=false;
if(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)
east=false;
}
if(e.getSource().equals(background))//走日字
{
selected.setVisible(false);
for(int X=5;X<620;X+=60)
for(int Y=5;Y<620;Y+=60)
{
if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&(((X==current.getX()-60||X==current.getX()+60)&&Y==current.getY()-120&&north)||((X==current.getX()-60||X==current.getX()+60)&&Y==current.getY()+120&&south)||((Y==current.getY()-60||Y==current.getY()+60)&&X==current.getX()-120&&west)||((Y==current.getY()-60||Y==current.getY()+60)&&X==current.getX()+120&&east)))
{
current.setBounds(X,Y,40,40);
clicked[0]=true;
player[0]=3-player[0];
break;
}
}
}
for(j=0;j<=31;j++)//吃掉被单击的棋子
{
if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&(((chessman[j].getX()==current.getX()-60||chessman[j].getX()==current.getX()+60)&&chessman[j].getY()==current.getY()-120&&north)||((chessman[j].getX()==current.getX()-60||chessman[j].getX()==current.getX()+60)&&chessman[j].getY()==current.getY()+120&&south)||((chessman[j].getY()==current.getY()-60||chessman[j].getY()==current.getY()+60)&&chessman[j].getX()==current.getX()-120&&west)||((chessman[j].getY()==current.getY()-60||chessman[j].getY()==current.getY()+60)&&chessman[j].getX()==current.getX()+120&&east)))//点击到棋子
{
selected.setVisible(false);
current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
clicked[0]=true;
chessman[j].setVisible(false);
chessman[j].setBounds(0,0,0,0);
player[0]=3-player[0];
break;
}
}
clicked[0]=true;
selected.setVisible(false);
}//马规则结束
//相规则开始
public static void ministermove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
{
int j;
boolean leftup=true,leftdown=true,rightup=true,rightdown=true;
for(j=0;j<=31;j++)//确认是否蹩脚
{
if(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()-60)
leftup=false;
if(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()+60)
leftdown=false;
if(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()+60)
rightdown=false;
if(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()+60)
rightup=false;
}
if(e.getSource().equals(background))//走田字
{
selected.setVisible(false);
for(int X=5;X<620;X+=60)
for(int Y=5;Y<620;Y+=60)
{
if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()-120&&Y==current.getY()-120&&leftup)||(X==current.getX()-120&&Y==current.getY()+120&&leftdown)||(Y==current.getY()-120&&X==current.getX()+120&&rightup)||(Y==current.getY()+120&&X==current.getX()+120&&rightdown))&&((Y<=245&&i<=15)||(Y>=305&&i>=16)))
{
current.setBounds(X,Y,40,40);
clicked[0]=true;
player[0]=3-player[0];
break;
}
}
}
for(j=0;j<=31;j++)//吃掉被单击的棋子
{
if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()-120&&chessman[j].getY()==current.getY()-120&&leftup)||(chessman[j].getX()==current.getX()-120&&chessman[j].getY()==current.getY()+120&&leftdown)||(chessman[j].getY()==current.getY()-120&&chessman[j].getX()==current.getX()+120&&rightup)||(chessman[j].getY()==current.getY()+120&&chessman[j].getX()==current.getX()+120&&rightdown))&&((chessman[j].getY()<=245&&i<=15)||(chessman[j].getY()>=305&&i>=16)))//点击到棋子
{
selected.setVisible(false);
current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
clicked[0]=true;
chessman[j].setVisible(false);
chessman[j].setBounds(0,0,0,0);
player[0]=3-player[0];
break;
}
}
clicked[0]=true;
selected.setVisible(false);
}//相规则结束
//士规则开始
public static void bodyguardmove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
{
int j;
if(e.getSource().equals(background))//移动
{
selected.setVisible(false);
for(int X=5;X<620;X+=60)
for(int Y=5;Y<620;Y+=60)
{
if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()-60&&Y==current.getY()-60)||(X==current.getX()-60&&Y==current.getY()+60)||(Y==current.getY()-60&&X==current.getX()+60)||(Y==current.getY()+60&&X==current.getX()+60))&&((Y<=125&&X<=305&&X>=185&&i<=15)||(Y>=425&&X<=305&&X>=185&&i>=16)))
{
current.setBounds(X,Y,40,40);
clicked[0]=true;
player[0]=3-player[0];
break;
}
}
}
for(j=0;j<=31;j++)//吃掉被单击的棋子
{
if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()-60)||(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()+60)||(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()+60))&&((chessman[j].getY()<=125&&chessman[j].getX()<=305&&chessman[j].getX()>=185&&i<=15)||(chessman[j].getY()>=425&&chessman[j].getX()<=305&&chessman[j].getX()>=185&&i>=16)))//点击到棋子
{
selected.setVisible(false);
current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
clicked[0]=true;
chessman[j].setVisible(false);
chessman[j].setBounds(0,0,0,0);
player[0]=3-player[0];
break;
}
}
clicked[0]=true;
selected.setVisible(false);
}//士规则结束
//将规则开始
public static void bodymove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
{
int j,max,min;
if(current.getY()>chessman[32-i].getY())
{
max=current.getY();min=chessman[32-i].getY();
}
else
{
max=chessman[32-i].getY();min=current.getY();
}
boolean face=true;//将帅是否相对
if(current.getX()!=chessman[32-i].getX())
face=false;
for(j=0;j<=31;j++)
{
if(chessman[j].getX()==current.getX()&&chessman[j].getY()>min&&chessman[j].getY()<max)
face=false;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?