chinesechess.java
来自「可联机对战的中国象棋java源代码 包括服务器文件和客户端文件」· Java 代码 · 共 1,165 行 · 第 1/4 页
JAVA
1,165 行
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==current.getY()-60)||(X==current.getX()&&Y==current.getY()+60)||(Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&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()&&chessman[j].getY()==current.getY()-60)||(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&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))||(j==32-i&&face)))//点击到棋子
{
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 cannonmove(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,Xmaxnext=485,Ymaxnext=545,Xminnext=5,Yminnext=5,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();
}
for(j=0;j<=31;j++)
{
if(chessman[j].getX()>Xminnext&&chessman[j].getX()<Xmin&&chessman[j].getY()==current.getY())
Xminnext=chessman[j].getX();
if(chessman[j].getX()<Xmaxnext&&chessman[j].getX()>Xmax&&chessman[j].getY()==current.getY())
Xmaxnext=chessman[j].getX();
if(chessman[j].getY()>Yminnext&&chessman[j].getY()<Ymin&&chessman[j].getX()==current.getX())
Yminnext=chessman[j].getY();
if(chessman[j].getY()<Ymaxnext&&chessman[j].getY()>Ymax&&chessman[j].getX()==current.getX())
Ymaxnext=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()==Ymaxnext||chessman[j].getY()==Yminnext))||(chessman[j].getY()==current.getY()&&(chessman[j].getX()==Xmaxnext||chessman[j].getX()==Xminnext))))//点击到棋子
{
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 soldiermove(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()&&Y==current.getY()-60&&i>=16&&Y>=305)||(X==current.getX()&&Y==current.getY()+60&&i<=15&&Y<=245)||(((Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&X==current.getX()-60)||(Y==current.getY()-60&&X==current.getX()))&&i>=16&&Y<=245)||(((Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&X==current.getX()-60)||(Y==current.getY()+60&&X==current.getX()))&&i<=15&&Y>=305)))
{
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()==current.getY()-60&&i>=16&&chessman[j].getY()>=305)||(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60&&i<=15&&chessman[j].getY()<=245)||(((chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)||(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()))&&i>=16&&chessman[j].getY()<=245)||(((chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)||(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()))&&i<=15&&chessman[j].getY()>=305))))//点击到棋子
{
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 boolean winlost(JLabel chessman[])//判断输赢
{
if(chessman[8].getX()==0||chessman[24].getX()==0)
return false;
else
return true;
}
}
class serverbuildThread extends Thread//建立主机线程类
{
public serverbuildThread()
{}
public void run()
{
try{
ChineseChess.server=new ServerSocket(5000);
ChineseChess.s=ChineseChess.server.accept();
ChineseChess.built[0]=false;
ChineseChess.info.append("已有玩家进入,请按开始键准备\n");
ChineseChess.putchessman();
}
catch(Exception e)
{ChineseChess.info.append("已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;}
}
}
class clientjoinThread extends Thread//客户端加入线程类
{
public clientjoinThread()
{}
public void run()
{
try{
String a=JOptionPane.showInputDialog(null,"请输入主机名称","localhost");
ChineseChess.info.setText("正在寻找主机\n");
ChineseChess.s=new Socket(a,5000);
ChineseChess.info.append("已加入主机,你将执黑棋,请按开始键准备\n");
ChineseChess.putchessman();
ChineseChess.built[0]=false;
}
catch(Exception e)
{ChineseChess.info.append("未找到主机,已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;}
}
}
class receiveThread extends Thread//接受信息线程类
{
public receiveThread()
{}
public void run()
{
while(true)
while(!ChineseChess.built[0])
{
try{
int netX,netY,netman,j;
ChineseChess.m_input=new DataInputStream(ChineseChess.s.getInputStream());
netman=ChineseChess.m_input.readInt();netX=ChineseChess.m_input.readInt();netY=ChineseChess.m_input.readInt();//读取信息前3位整数
if(netman==800){ChineseChess.readythere=true;
if(ChineseChess.player[0]==1)ChineseChess.blackready.setVisible(true);
else ChineseChess.redready.setVisible(true);
if(ChineseChess.readyhere&&ChineseChess.readythere)
{
if(ChineseChess.sound)ChineseChess.begin.play();
ChineseChess.blackready.setVisible(false);
ChineseChess.matchbegin.setVisible(true);
ChineseChess.peaceable.setVisible(true);
ChineseChess.peaceunable.setVisible(false);
ChineseChess.giveinready.setVisible(true);
ChineseChess.givein.setVisible(false);
ChineseChess.regret.setVisible(false);
ChineseChess.regretready.setVisible(true);
}
}
else if(netman==795)//求和代码
{
j=JOptionPane.showConfirmDialog(null,"对方发出求和请求,是否接受","求和",JOptionPane.YES_NO_OPTION);
if(j==0)
{ChineseChess.endgame();ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
ChineseChess.m_output.writeInt(796);ChineseChess.m_output.writeInt(796);ChineseChess.m_output.writeInt(796);
}
else
{
ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
ChineseChess.m_output.writeInt(797);ChineseChess.m_output.writeInt(797);ChineseChess.m_output.writeInt(797);
}
}
else if(netman==796)//接受求和代码
{
JOptionPane.showMessageDialog(null,"对方已接受求和请求,比赛以平局结束");ChineseChess.endgame();
}
else if(netman==797)//拒绝求和代码
{
JOptionPane.showMessageDialog(null,"对方拒绝了求和请求");ChineseChess.peaceable.setVisible(true);
ChineseChess.peaceunable.setVisible(false);
ChineseChess.giveinready.setVisible(true);
ChineseChess.givein.setVisible(false);
}
else if(netman==798)//接受认输代码
{
JOptionPane.showMessageDialog(null,"恭喜您获胜了");ChineseChess.gamewin.play();ChineseChess.endgame();
}
else if(netman==799)//接收悔棋信息代码
{
j=JOptionPane.showConfirmDialog(null,"对方发出悔棋请求,是否接受","悔棋",JOptionPane.YES_NO_OPTION);
if(j==0)
{
ChineseChess.reputreceive();
ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
ChineseChess.m_output.writeInt(794);ChineseChess.m_output.writeInt(794);ChineseChess.m_output.writeInt(794);
}
else
{
ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
ChineseChess.m_output.writeInt(802);ChineseChess.m_output.writeInt(802);ChineseChess.m_output.writeInt(802);
}
}
else if(netman==794)//接受悔棋代码
{
JOptionPane.showMessageDialog(null,"对方接受悔棋请求");
ChineseChess.reputsend();
ChineseChess.regretready.setVisible(true);
ChineseChess.regret.setVisible(false);
}
else if(netman==802)//拒绝悔棋代码
{
JOptionPane.showMessageDialog(null,"对方拒绝了悔棋请求"); ChineseChess.regretready.setVisible(true);
ChineseChess.regret.setVisible(false);
}
else if(netman==911)//聊天代码
{
try{ChineseChess.chart.append(ChineseChess.m_input.readUTF()+"\n");}
catch(Exception e){}
}//走棋代码
else{
if(ChineseChess.player[0]==3){ChineseChess.redready.setVisible(false);ChineseChess.blackready.setVisible(true);}else {ChineseChess.redready.setVisible(true);ChineseChess.blackready.setVisible(false);}
ChineseChess.recent.setBounds(ChineseChess.chessman[netman].getX(),ChineseChess.chessman[netman].getY(),41,41);ChineseChess.recent.setVisible(true);
for(j=0;j<=31;j++)
{
if(ChineseChess.chessman[j].getX()==netX&&ChineseChess.chessman[j].getY()==netY&&j!=netman)
{
ChineseChess.chessman[j].setBounds(0,0,0,0);if(ChineseChess.sound)ChineseChess.dead.play();
ChineseChess.chessman[j].setVisible(false);
}
}
ChineseChess.chessman[netman].setBounds(netX,netY,40,40);
ChineseChess.save();
ChineseChess.selected.setVisible(true);
ChineseChess.selected.setBounds(netX,netY,41,41);if(ChineseChess.sound)ChineseChess.go.play();
ChineseChess.player[0]=3-ChineseChess.player[0];
if(ChineseChess.chessman[8].getX()==0||ChineseChess.chessman[24].getX()==0)
{
JOptionPane.showMessageDialog(null,"很遗憾您输了");if(ChineseChess.sound)ChineseChess.gameover.play();
ChineseChess.endgame();
}
}
}
catch(Exception e)
{ ChineseChess.info.append("已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;
ChineseChess.endgame();
try{ChineseChess.server.close();
ChineseChess.s.close();
ChineseChess.m_input.close();}
catch(Exception f){}}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?