📄 chess.java
字号:
Rectangle rect=null;
if(e.getSource()==this)
move=false;
if(move==false)
if(e.getSource() instanceof ChessPiece)
{
piece=(ChessPiece)e.getSource();
startX=piece.getBounds().x;
startY=piece.getBounds().y;
rect=piece.getBounds();
for(int i=1;i<=x轴长;i++)
{
for(int j=1;j<=y轴长;j++)
{
int x=point[i][j].getX();
int y=point[i][j].getY();
if(rect.contains(x,y))
{
startI=i;
startJ=j;
break;
}
}
}
}
}
public void mouseMoved(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
ChessPiece piece=null;
if(e.getSource() instanceof ChessPiece)
{
piece=(ChessPiece)e.getSource();
move=true;
e=SwingUtilities.convertMouseEvent(piece,e,this);
}
if(e.getSource()==this)
{
if(move&&piece!=null)
{
x=e.getX();
y=e.getY();
if(红方走棋&&((piece.棋子类别()).equals(红方颜色)))
{
piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);
}
if(黑方走棋&&(piece.棋子类别().equals(黑方颜色)))
{
piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);
}
}
}
}
public void mouseReleased(MouseEvent e)
{
ChessPiece piece=null;
move=false;
Rectangle rect=null;
if(e.getSource() instanceof ChessPiece)
{
piece=(ChessPiece)e.getSource();
rect=piece.getBounds();
e=SwingUtilities.convertMouseEvent(piece,e,this);
}
if(e.getSource()==this)
{
boolean containChessPoint=false;
int x=0,y=0;
int m=0,n=0;
if(piece!=null)
{
for(int i=1;i<=x轴长;i++)
{
for(int j=1;j<=y轴长;j++)
{
x=point[i][j].getX();
y=point[i][j].getY();
if(rect.contains(x,y))
{
containChessPoint=true;
m=i;
n=j;
break;
}
}
}
}
if(piece!=null&&containChessPoint)
{
Color pieceColor=piece.获取棋子颜色();
if(point[m][n].isPiece())
{
Color c=(point[m][n].getPiece()).获取棋子颜色();
if(pieceColor.getRGB()==c.getRGB())
{
piece.setLocation(startX,startY);
(point[startI][startJ]).set有棋子(true);
}
else
{
boolean ok=rule.movePieceRule(piece,startI,startJ, m,n);
if(ok)
{
ChessPiece pieceRemoved=point[m][n].getPiece();
point[m][n].reMovePiece(pieceRemoved,this);
point[m][n].setPiece(piece,this);
(point[startI][startJ]).set有棋子(false);
record.记录棋谱(piece,startI,startJ,m,n) ;
record.记录吃掉的棋子(pieceRemoved) ;
if(piece.棋子类别().equals(红方颜色))
{
红方走棋=false;
黑方走棋=true;
}
if(piece.棋子类别().equals(黑方颜色))
{
黑方走棋=false;
红方走棋=true;
}
validate();
repaint();
}
else
{
piece.setLocation(startX,startY);
(point[startI][startJ]).set有棋子(true);
}
}
}
else
{
boolean ok=rule.movePieceRule(piece,startI,startJ, m,n);
if(ok)
{
point[m][n].setPiece(piece,this);
(point[startI][startJ]).set有棋子(false);
record.记录棋谱(piece,startI,startJ,m,n) ;
record.记录吃掉的棋子("没吃棋子");
if(piece.棋子类别().equals(红方颜色))
{
红方走棋=false;
黑方走棋=true;
}
if(piece.棋子类别().equals(黑方颜色))
{
黑方走棋=false;
红方走棋=true;
}
}
else
{
piece.setLocation(startX,startY);
(point[startI][startJ]).set有棋子(true);
}
}
}
if(piece!=null&&!containChessPoint)
{
piece.setLocation(startX,startY);
(point[startI][startJ]).set有棋子(true);
}
}
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
}
class Rule
{
ChessBoard board=null;
ChessPiece piece=null;
ChessPoint point[][];
int startI,startJ,endI,endJ;
public Rule(ChessBoard board,ChessPoint point[][])
{
this.board=board;
this.point=point;
}
public boolean movePieceRule(ChessPiece piece,int startI,int startJ,int endI,int endJ)
{
this.piece=piece;
this.startI=startI;
this.startJ=startJ;
this.endI=endI;
this.endJ=endJ;
int minI=Math.min(startI,endI);
int maxI=Math.max(startI,endI);
int minJ=Math.min(startJ,endJ);
int maxJ=Math.max(startJ,endJ);
boolean 可否走棋=false;
if(piece.getName().equals("车"))
{
if(startI==endI)
{
int j=0;
for(j=minJ+1;j<=maxJ-1;j++)
{
if(point[startI][j].isPiece())
{
可否走棋=false;
break;
}
}
if(j==maxJ)
{
可否走棋=true;
}
}
else if(startJ==endJ)
{
int i=0;
for(i=minI+1;i<=maxI-1;i++)
{
if(point[i][startJ].isPiece())
{
可否走棋=false;
break;
}
}
if(i==maxI)
{
可否走棋=true;
}
}
else
{
可否走棋=false;
}
}
else if(piece.getName().equals("马"))
{
int xAxle=Math.abs(startI-endI);
int yAxle=Math.abs(startJ-endJ);
if(xAxle==2&&yAxle==1)
{
if(endI>startI)
{
if(point[startI+1][startJ].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
if(endI<startI)
{
if(point[startI-1][startJ].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
}
else if(xAxle==1&&yAxle==2)
{
if(endJ>startJ)
{
if(point[startI][startJ+1].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
if(endJ<startJ)
{
if(point[startI][startJ-1].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
}
else
{
可否走棋=false;
}
}
else if(piece.getName().equals("象"))
{
int centerI=(startI+endI)/2;
int centerJ=(startJ+endJ)/2;
int xAxle=Math.abs(startI-endI);
int yAxle=Math.abs(startJ-endJ);
if(xAxle==2&&yAxle==2&&endJ<=5)
{
if(point[centerI][centerJ].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
else
{
可否走棋=false;
}
}
else if(piece.getName().equals("相"))
{
int centerI=(startI+endI)/2;
int centerJ=(startJ+endJ)/2;
int xAxle=Math.abs(startI-endI);
int yAxle=Math.abs(startJ-endJ);
if(xAxle==2&&yAxle==2&&endJ>=6)
{
if(point[centerI][centerJ].isPiece())
{
可否走棋=false;
}
else
{
可否走棋=true;
}
}
else
{
可否走棋=false;
}
}
else if(piece.getName().equals("炮"))
{
int number=0;
if(startI==endI)
{
int j=0;
for(j=minJ+1;j<=maxJ-1;j++)
{
if(point[startI][j].isPiece())
{
number++;
}
}
if(number>1)
{
可否走棋=false;
}
else if(number==1)
{
if(point[endI][endJ].isPiece())
{
可否走棋=true;
}
}
else if(number==0&&!point[endI][endJ].isPiece())
{
可否走棋=true;
}
}
else if(startJ==endJ)
{
int i=0;
for(i=minI+1;i<=maxI-1;i++)
{
if(point[i][startJ].isPiece())
{
number++;
}
}
if(number>1)
{
可否走棋=false;
}
else if(number==1)
{
if(point[endI][endJ].isPiece())
{
可否走棋=true;
}
}
else if(number==0&&!point[endI][endJ].isPiece())
{
可否走棋=true;
}
}
else
{
可否走棋=false;
}
}
else if(piece.getName().equals("兵"))
{
int xAxle=Math.abs(startI-endI);
int yAxle=Math.abs(startJ-endJ);
if(endJ>=6)
{
if(startJ-endJ==1&&xAxle==0)
{
可否走棋=true;
}
else
{
可否走棋=false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -