Removed IPiece

This commit is contained in:
Filip Znachor 2023-04-25 14:28:49 +02:00
parent e3d3a93c5c
commit d72e9202af
11 changed files with 41 additions and 123 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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();
}

View file

@ -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));

View file

@ -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]) {

View file

@ -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);
}

View file

@ -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));
}
}

View file

@ -3,7 +3,7 @@ import java.awt.*;
/**
* Knight piece class
*/
public class Knight extends AbstractPiece {
public class Knight extends APiece {
/**
* Create new Knight piece

View file

@ -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;

View file

@ -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

View file

@ -3,7 +3,7 @@ import java.awt.*;
/**
* Rook piece class
*/
public class Rook extends AbstractPiece {
public class Rook extends APiece {
/**
* Create new Rook piece