This commit is contained in:
Filip Znachor 2023-04-25 18:51:34 +02:00
parent 0d5c5a3f23
commit 450f4e04e8
5 changed files with 26 additions and 22 deletions

View file

@ -92,9 +92,12 @@ public class Chessboard extends JPanel {
} else {
char pieceType = Character.toLowerCase(item);
Player pieceOwner = pieceType != item ? white : black;
if(pieceType == 'p') new Pawn(pieceOwner, x, y);
if(pieceType == 'p') {
Pawn pawn = new Pawn(pieceOwner, x, y);
if(y != (pieceOwner.getStartPosition() == StartPosition.TOP ? 1 : 6)) pawn.setMoveCount(1);
}
if(pieceType == 'r') {
APiece rook = new Rook(pieceOwner, x, y);
Rook rook = new Rook(pieceOwner, x, y);
rook.setMoveCount(1);
}
if(pieceType == 'n') new Knight(pieceOwner, x, y);
@ -242,6 +245,7 @@ public class Chessboard extends JPanel {
}
if(possibleMoves != null && possibleMoves[y][x]) {
g.setColor(new Color(0, 0, 0, 40));
if(otherPlayer.getAttackArea()[y][x]) g.setColor(new Color(255, 0, 0, 40));
if(pieces[y][x] == null) g.fillOval(50, 50, 40, 40);
else g.drawRect(8, 8, SQUARE_SIZE-16, SQUARE_SIZE-16);
}
@ -321,8 +325,8 @@ public class Chessboard extends JPanel {
public boolean isEndangered(Player player, int x, int y) {
if(!isOnBoard(x, y)) return false;
boolean[][] coverageArea;
if(player == activePlayer) coverageArea = otherPlayer.getCoverageArea();
else coverageArea = activePlayer.getCoverageArea();
if(player == activePlayer) coverageArea = otherPlayer.getAttackArea();
else coverageArea = activePlayer.getAttackArea();
return coverageArea[y][x];
}
@ -354,25 +358,25 @@ public class Chessboard extends JPanel {
Player tempPlayer = activePlayer;
activePlayer = otherPlayer;
otherPlayer = tempPlayer;
generateCoverageAreas();
generateAttackAreas();
}
public void generateCoverageAreas() {
public void generateAttackAreas() {
boolean[][] player1Area = new boolean[SQUARE_COUNT][SQUARE_COUNT];
boolean[][] player2Area = new boolean[SQUARE_COUNT][SQUARE_COUNT];
for (APiece[] pieces2 : pieces) {
for (APiece piece : pieces2) {
if(piece != null && piece != selected) {
if(piece.getPlayer() == activePlayer) mergeCoverageAreas(player1Area, piece.getPossibleMoves(true));
if(piece.getPlayer() == otherPlayer) mergeCoverageAreas(player2Area, piece.getPossibleMoves(true));
if(piece.getPlayer() == activePlayer) mergeAttackAreas(player1Area, piece.getPossibleMoves(true));
if(piece.getPlayer() == otherPlayer) mergeAttackAreas(player2Area, piece.getPossibleMoves(true));
}
}
}
activePlayer.setCoverageArea(player1Area);
otherPlayer.setCoverageArea(player2Area);
activePlayer.setAttackArea(player1Area);
otherPlayer.setAttackArea(player2Area);
}
private void mergeCoverageAreas(boolean[][] area1, boolean[][] area2) {
private void mergeAttackAreas(boolean[][] area1, boolean[][] area2) {
for (int y = 0; y < area2.length; y++) {
for (int x = 0; x < area2[y].length; x++) {
if(area2[y][x]) area1[y][x] = true;

View file

@ -52,7 +52,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
APiece selectedPiece = c.getSelectedPiece();
if (piece != null && piece.getPlayer() == c.getActivePlayer() && selectedPiece != piece) {
c.setSelectedPiece(piece);
c.generateCoverageAreas();
c.generateAttackAreas();
c.showPossibleMoves(piece.getPossibleMoves());
} else if(selectedPiece != null) {
if(selectedPiece.getPossibleMoves()[pos.y][pos.x]) {
@ -73,7 +73,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
APiece piece = c.getPiece(pos);
if (piece != null && piece.getPlayer() == c.getActivePlayer()) {
c.setSelectedPiece(piece);
c.generateCoverageAreas();
c.generateAttackAreas();
c.showPossibleMoves(piece.getPossibleMoves());
c.getRootPane().repaint();
}

View file

@ -67,11 +67,11 @@ public class King extends APiece {
super.move(pos, animate);
if(moveCount == 1 && x == 6) {
APiece rook = chessboard.getPiece(new PiecePosition(7, y));
rook.setPosition(new PiecePosition(5, y));
if(rook != null) rook.setPosition(new PiecePosition(5, y));
}
if(moveCount == 1 && x == 1) {
APiece rook = chessboard.getPiece(new PiecePosition(0, y));
rook.setPosition(new PiecePosition(3, y));
if(rook != null) rook.setPosition(new PiecePosition(3, y));
}
}
}

View file

@ -41,7 +41,7 @@ public class Pawn extends APiece {
boolean firstPlaceEmpty = chessboard.getPiece(new PiecePosition(x, y+directionY*2)) == null;
boolean secondPlaceEmpty = chessboard.getPiece(new PiecePosition(x, y+directionY)) == null;
if(moveCount == 0 && firstPlaceEmpty && secondPlaceEmpty) setPossibleMove(moves, x, y + directionY*2);
if(moveCount == 0 && firstPlaceEmpty && secondPlaceEmpty && !attack) setPossibleMove(moves, x, y + directionY*2);
for (int directionX : new int[]{-1, 1}) {
if(checkEnPassant(directionX)) setPossibleMove(moves, x+directionX, y+directionY);

View file

@ -8,13 +8,13 @@ public class Player {
private King king;
private boolean[][] coverageArea;
private boolean[][] attackArea;
public Player(Chessboard chessboard, StartPosition startPosition, PieceColor color) {
this.chessboard = chessboard;
this.color = color;
this.startPosition = startPosition;
this.coverageArea = new boolean[chessboard.SQUARE_COUNT][chessboard.SQUARE_COUNT];
this.attackArea = new boolean[chessboard.SQUARE_COUNT][chessboard.SQUARE_COUNT];
}
public boolean inCheck() {
@ -33,12 +33,12 @@ public class Player {
return startPosition;
}
public void setCoverageArea(boolean[][] area) {
coverageArea = area;
public void setAttackArea(boolean[][] area) {
attackArea = area;
}
public boolean[][] getCoverageArea() {
return coverageArea;
public boolean[][] getAttackArea() {
return attackArea;
}
public King getKing() {