Removed IPiece
This commit is contained in:
parent
e3d3a93c5c
commit
d72e9202af
|
@ -7,7 +7,7 @@ import java.util.TimerTask;
|
|||
/**
|
||||
* Abstract piece class
|
||||
*/
|
||||
public abstract class AbstractPiece implements IPiece {
|
||||
public abstract class APiece {
|
||||
|
||||
/**
|
||||
* Chessboard instance
|
||||
|
@ -49,7 +49,7 @@ public abstract class AbstractPiece implements IPiece {
|
|||
* @param x piece's X location
|
||||
* @param y piece's Y location
|
||||
*/
|
||||
public AbstractPiece(Player player, int x, int y) {
|
||||
public APiece(Player player, int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.player = player;
|
||||
|
@ -219,7 +219,7 @@ public abstract class AbstractPiece implements IPiece {
|
|||
public void setPossibleMove(boolean[][] moves, int x, int y) {
|
||||
if(x == this.x && y == this.y) return;
|
||||
if(x < 0 || x >= moves.length || y < 0 || y >= moves.length) return;
|
||||
IPiece piece = chessboard.getPiece(new PiecePosition(x, y));
|
||||
APiece piece = chessboard.getPiece(new PiecePosition(x, y));
|
||||
if(piece != null && piece != chessboard.getSelectedPiece() && player == piece.getPlayer()) return;
|
||||
moves[y][x] = true;
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ public abstract class AbstractPiece implements IPiece {
|
|||
int j = y + yDirection;
|
||||
while(i >= 0 && i < moves.length && j >= 0 && j < moves.length) {
|
||||
setPossibleMove(moves, i, j);
|
||||
IPiece piece = chessboard.getPiece(new PiecePosition(i, j));
|
||||
APiece piece = chessboard.getPiece(new PiecePosition(i, j));
|
||||
if(piece != null && piece != chessboard.getSelectedPiece()) break;
|
||||
i += xDirection;
|
||||
j += yDirection;
|
||||
|
@ -263,6 +263,10 @@ public abstract class AbstractPiece implements IPiece {
|
|||
return getPossibleMoves(false);
|
||||
}
|
||||
|
||||
abstract public boolean[][] getPossibleMoves(boolean attack);
|
||||
|
||||
abstract public void paint(Graphics2D g2);
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
|
@ -1,13 +1,11 @@
|
|||
import java.awt.*;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Bishop piece class
|
||||
*/
|
||||
public class Bishop extends AbstractPiece {
|
||||
public class Bishop extends APiece {
|
||||
|
||||
/**
|
||||
* Create new Bishop piece
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +32,7 @@ public class Chess {
|
|||
|
||||
chessboard = Chessboard.fromFEN(DEFAULT_FEN);
|
||||
|
||||
window.add(chessboard);
|
||||
window.add(chessboard, BorderLayout.CENTER);
|
||||
window.pack();
|
||||
|
||||
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
@ -96,7 +97,7 @@ public class Chess {
|
|||
static void newGame(Chessboard newChessboard) {
|
||||
window.remove(chessboard);
|
||||
chessboard = newChessboard;
|
||||
window.add(chessboard);
|
||||
window.add(chessboard, BorderLayout.CENTER);
|
||||
repaintWindow();
|
||||
}
|
||||
|
||||
|
|
|
@ -47,14 +47,14 @@ public class Chessboard extends JPanel {
|
|||
/**
|
||||
* Instance of the selected piece
|
||||
*/
|
||||
private IPiece selected;
|
||||
private APiece selected;
|
||||
|
||||
/**
|
||||
* Two-dimensional array of pieces
|
||||
*/
|
||||
public IPiece[][] pieces = new IPiece[SQUARE_COUNT][SQUARE_COUNT];
|
||||
public APiece[][] pieces = new APiece[SQUARE_COUNT][SQUARE_COUNT];
|
||||
|
||||
public Set<IPiece> removedPieces = new HashSet<>();
|
||||
public Set<APiece> removedPieces = new HashSet<>();
|
||||
|
||||
public boolean[][] possibleMoves = new boolean[SQUARE_COUNT][SQUARE_COUNT];
|
||||
|
||||
|
@ -101,7 +101,7 @@ public class Chessboard extends JPanel {
|
|||
Player pieceOwner = pieceType != item ? white : black;
|
||||
if(pieceType == 'p') new Pawn(pieceOwner, x, y);
|
||||
if(pieceType == 'r') {
|
||||
IPiece rook = new Rook(pieceOwner, x, y);
|
||||
APiece rook = new Rook(pieceOwner, x, y);
|
||||
rook.setMoveCount(1);
|
||||
}
|
||||
if(pieceType == 'n') new Knight(pieceOwner, x, y);
|
||||
|
@ -129,7 +129,7 @@ public class Chessboard extends JPanel {
|
|||
Player pieceOwner = pieceType != item ? white : black;
|
||||
int rookX = pieceType == 'q' ? 0 : 7;
|
||||
int rookY = pieceType != item ? 7 : 0;
|
||||
IPiece rook = c.getPiece(new PiecePosition(rookX, rookY));
|
||||
APiece rook = c.getPiece(new PiecePosition(rookX, rookY));
|
||||
if(rook != null && rook.getPlayer() == pieceOwner) rook.setMoveCount(0);
|
||||
}
|
||||
}
|
||||
|
@ -144,9 +144,9 @@ public class Chessboard extends JPanel {
|
|||
* @param x piece's X location
|
||||
* @param y piese's Y location
|
||||
*/
|
||||
public void addPiece(IPiece piece, int x, int y) {
|
||||
public void addPiece(APiece piece, int x, int y) {
|
||||
if(!isOnBoard(x, y)) return;
|
||||
IPiece removedPiece = pieces[y][x];
|
||||
APiece removedPiece = pieces[y][x];
|
||||
if(removedPiece != null) removedPieces.add(removedPiece);
|
||||
removedPieces.remove(piece);
|
||||
pieces[y][x] = piece;
|
||||
|
@ -158,9 +158,9 @@ public class Chessboard extends JPanel {
|
|||
* @param y piece's Y location
|
||||
* @return removed piece
|
||||
*/
|
||||
public IPiece removePiece(int x, int y) {
|
||||
public APiece removePiece(int x, int y) {
|
||||
if(!isOnBoard(x, y)) return null;
|
||||
IPiece piece = pieces[y][x];
|
||||
APiece piece = pieces[y][x];
|
||||
if(piece != null) removedPieces.add(piece);
|
||||
pieces[y][x] = null;
|
||||
return piece;
|
||||
|
@ -232,7 +232,7 @@ public class Chessboard extends JPanel {
|
|||
}
|
||||
}
|
||||
|
||||
for (IPiece piece : removedPieces) {
|
||||
for (APiece piece : removedPieces) {
|
||||
if(!piece.isFloating()) continue;
|
||||
g2.setTransform(beforeBoard);
|
||||
g2.translate(piece.getOverrideX(), piece.getOverrideY());
|
||||
|
@ -296,7 +296,7 @@ public class Chessboard extends JPanel {
|
|||
* @param pos piece position
|
||||
* @return piece
|
||||
*/
|
||||
public IPiece getPiece(PiecePosition pos) {
|
||||
public APiece getPiece(PiecePosition pos) {
|
||||
if(!isOnBoard(pos.x, pos.y)) return null;
|
||||
return pieces[pos.y][pos.x];
|
||||
}
|
||||
|
@ -305,7 +305,7 @@ public class Chessboard extends JPanel {
|
|||
* Set piece as selected
|
||||
* @return piece
|
||||
*/
|
||||
public void setSelectedPiece(IPiece piece) {
|
||||
public void setSelectedPiece(APiece piece) {
|
||||
if(piece == null) {
|
||||
selected.setOverride(0, 0);
|
||||
}
|
||||
|
@ -316,7 +316,7 @@ public class Chessboard extends JPanel {
|
|||
* Get current selected piece
|
||||
* @return floating piece
|
||||
*/
|
||||
public IPiece getSelectedPiece() {
|
||||
public APiece getSelectedPiece() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
|
@ -365,8 +365,8 @@ public class Chessboard extends JPanel {
|
|||
public void generateCoverageAreas() {
|
||||
boolean[][] player1Area = new boolean[SQUARE_COUNT][SQUARE_COUNT];
|
||||
boolean[][] player2Area = new boolean[SQUARE_COUNT][SQUARE_COUNT];
|
||||
for (IPiece[] pieces2 : pieces) {
|
||||
for (IPiece piece : pieces2) {
|
||||
for (APiece[] pieces2 : pieces) {
|
||||
for (APiece piece : pieces2) {
|
||||
if(piece != null && piece != selected) {
|
||||
if(piece.getPlayer() == player1) mergeCoverageAreas(player1Area, piece.getPossibleMoves(true));
|
||||
if(piece.getPlayer() == player2) mergeCoverageAreas(player2Area, piece.getPossibleMoves(true));
|
||||
|
|
|
@ -48,8 +48,8 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
public void onClick(MouseEvent me) {
|
||||
Chessboard c = (Chessboard) me.getSource();
|
||||
PiecePosition pos = c.getPieceCoordinates(me.getX(), me.getY());
|
||||
IPiece piece = c.getPiece(pos);
|
||||
IPiece selectedPiece = c.getSelectedPiece();
|
||||
APiece piece = c.getPiece(pos);
|
||||
APiece selectedPiece = c.getSelectedPiece();
|
||||
if (piece != null && piece.getPlayer() == c.getActivePlayer() && selectedPiece != piece) {
|
||||
c.setSelectedPiece(piece);
|
||||
c.generateCoverageAreas();
|
||||
|
@ -70,7 +70,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
public void onDragStart(MouseEvent me) {
|
||||
Chessboard c = (Chessboard) me.getSource();
|
||||
PiecePosition pos = c.getPieceCoordinates(me.getX(), me.getY());
|
||||
IPiece piece = c.getPiece(pos);
|
||||
APiece piece = c.getPiece(pos);
|
||||
if (piece != null && piece.getPlayer() == c.getActivePlayer()) {
|
||||
c.setSelectedPiece(piece);
|
||||
c.generateCoverageAreas();
|
||||
|
@ -81,7 +81,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
|
||||
public void onDrag(MouseEvent me) {
|
||||
Chessboard c = (Chessboard) me.getSource();
|
||||
IPiece piece = c.getSelectedPiece();
|
||||
APiece piece = c.getSelectedPiece();
|
||||
if (piece != null) {
|
||||
int yOffset = Chess.menuBar.getHeight();
|
||||
double totalScale = c.pieceScale * c.boardScale;
|
||||
|
@ -95,7 +95,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
|
||||
public void onDragEnd(MouseEvent me) {
|
||||
Chessboard c = (Chessboard) me.getSource();
|
||||
IPiece piece = c.getSelectedPiece();
|
||||
APiece piece = c.getSelectedPiece();
|
||||
PiecePosition pos = c.getPieceCoordinates(me.getX(), me.getY());
|
||||
if(piece != null) {
|
||||
if(piece.getPossibleMoves()[pos.y][pos.x]) {
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Piece's interface
|
||||
*/
|
||||
public interface IPiece {
|
||||
|
||||
/**
|
||||
* Paint the piece
|
||||
* @param g2 Graphics2D
|
||||
*/
|
||||
void paint(Graphics2D g2);
|
||||
|
||||
/**
|
||||
* Get piece's X location
|
||||
* @return piece's X location
|
||||
*/
|
||||
int getX();
|
||||
|
||||
/**
|
||||
* Get piece's Y location
|
||||
* @return piece's Y location
|
||||
*/
|
||||
int getY();
|
||||
|
||||
/**
|
||||
* Set override location if piece is floating
|
||||
* @param x floating piece's X location
|
||||
* @param y floating piece's Y location
|
||||
*/
|
||||
void setOverride(double x, double y);
|
||||
|
||||
/**
|
||||
* Return true, if piece is floating
|
||||
* @return floating state
|
||||
*/
|
||||
boolean isFloating();
|
||||
|
||||
/**
|
||||
* Get piece's override X location
|
||||
* @return override X location
|
||||
*/
|
||||
double getOverrideX();
|
||||
|
||||
/**
|
||||
* Get piece's override Y location
|
||||
* @return override Y location
|
||||
*/
|
||||
double getOverrideY();
|
||||
|
||||
/**
|
||||
* Set piece's new position
|
||||
* @param pos piece position
|
||||
*/
|
||||
void setPosition(PiecePosition pos);
|
||||
|
||||
void setPosition(PiecePosition pos, boolean animate);
|
||||
|
||||
boolean[][] getPossibleMoves();
|
||||
|
||||
boolean[][] getPossibleMoves(boolean attack);
|
||||
|
||||
PieceColor getColor();
|
||||
|
||||
void move(PiecePosition pos);
|
||||
|
||||
void move(PiecePosition pos, boolean animate);
|
||||
|
||||
Player getPlayer();
|
||||
|
||||
boolean isEndangered();
|
||||
|
||||
int getMoveCount();
|
||||
|
||||
void setMoveCount(int moveCount);
|
||||
|
||||
Rectangle getRepaintRectangle(double pieceX, double pieceY, double totalScale);
|
||||
|
||||
}
|
||||
|
|
@ -1,14 +1,9 @@
|
|||
import java.awt.*;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* King piece class
|
||||
*/
|
||||
public class King extends AbstractPiece {
|
||||
public class King extends APiece {
|
||||
|
||||
/**
|
||||
* Create new King piece
|
||||
|
@ -63,7 +58,7 @@ public class King extends AbstractPiece {
|
|||
|
||||
private boolean checkRook(int direction) {
|
||||
int rookX = direction == -1 ? 0 : 7;
|
||||
IPiece rook = chessboard.getPiece(new PiecePosition(rookX, y));
|
||||
APiece rook = chessboard.getPiece(new PiecePosition(rookX, y));
|
||||
return rook != null && rook instanceof Rook && rook.getMoveCount() == 0;
|
||||
}
|
||||
|
||||
|
@ -71,11 +66,11 @@ public class King extends AbstractPiece {
|
|||
public void move(PiecePosition pos, boolean animate) {
|
||||
super.move(pos, animate);
|
||||
if(moveCount == 1 && x == 6) {
|
||||
IPiece rook = chessboard.getPiece(new PiecePosition(7, y));
|
||||
APiece rook = chessboard.getPiece(new PiecePosition(7, y));
|
||||
rook.setPosition(new PiecePosition(5, y));
|
||||
}
|
||||
if(moveCount == 1 && x == 1) {
|
||||
IPiece rook = chessboard.getPiece(new PiecePosition(0, y));
|
||||
APiece rook = chessboard.getPiece(new PiecePosition(0, y));
|
||||
rook.setPosition(new PiecePosition(3, y));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import java.awt.*;
|
|||
/**
|
||||
* Knight piece class
|
||||
*/
|
||||
public class Knight extends AbstractPiece {
|
||||
public class Knight extends APiece {
|
||||
|
||||
/**
|
||||
* Create new Knight piece
|
||||
|
|
|
@ -5,7 +5,7 @@ import java.util.TimerTask;
|
|||
/**
|
||||
* Pawn piece class
|
||||
*/
|
||||
public class Pawn extends AbstractPiece {
|
||||
public class Pawn extends APiece {
|
||||
|
||||
/**
|
||||
* Create new Pawn piece
|
||||
|
@ -52,7 +52,7 @@ public class Pawn extends AbstractPiece {
|
|||
}
|
||||
|
||||
private boolean checkEnPassant(int directionX) {
|
||||
IPiece piece = chessboard.getPiece(new PiecePosition(x+directionX, y));
|
||||
APiece piece = chessboard.getPiece(new PiecePosition(x+directionX, y));
|
||||
if(piece == null) return false;
|
||||
int pieceY = piece.getPlayer().getStartPosition() == StartPosition.TOP ? 3 : 4;
|
||||
return chessboard.lastMove[y][x+directionX] && piece instanceof Pawn && y == pieceY && piece.getMoveCount() == 1;
|
||||
|
|
|
@ -6,7 +6,7 @@ import java.awt.geom.Path2D;
|
|||
/**
|
||||
* Queen piece class
|
||||
*/
|
||||
public class Queen extends AbstractPiece {
|
||||
public class Queen extends APiece {
|
||||
|
||||
/**
|
||||
* Create new Queen piece
|
||||
|
|
|
@ -3,7 +3,7 @@ import java.awt.*;
|
|||
/**
|
||||
* Rook piece class
|
||||
*/
|
||||
public class Rook extends AbstractPiece {
|
||||
public class Rook extends APiece {
|
||||
|
||||
/**
|
||||
* Create new Rook piece
|
||||
|
|
Loading…
Reference in a new issue