Bugfixes
This commit is contained in:
parent
0d5c5a3f23
commit
450f4e04e8
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue