J'ai pas reussi le castling
This commit is contained in:
parent
d818b7d313
commit
ab8da52181
|
|
@ -62,8 +62,8 @@ public class Board {
|
||||||
setPiece(false, PieceType.Rook, 0, 0);
|
setPiece(false, PieceType.Rook, 0, 0);
|
||||||
setPiece(false, PieceType.Knight, 1, 0);
|
setPiece(false, PieceType.Knight, 1, 0);
|
||||||
setPiece(false, PieceType.Bishop, 2, 0);
|
setPiece(false, PieceType.Bishop, 2, 0);
|
||||||
setPiece(false, PieceType.Queen, 4, 0);
|
setPiece(false, PieceType.Queen, 3, 0);
|
||||||
setPiece(false, PieceType.King, 3, 0);
|
setPiece(false, PieceType.King, 4, 0);
|
||||||
setPiece(false, PieceType.Bishop, 5, 0);
|
setPiece(false, PieceType.Bishop, 5, 0);
|
||||||
setPiece(false, PieceType.Knight, 6, 0);
|
setPiece(false, PieceType.Knight, 6, 0);
|
||||||
setPiece(false, PieceType.Rook, 7, 0);
|
setPiece(false, PieceType.Rook, 7, 0);
|
||||||
|
|
@ -72,8 +72,8 @@ public class Board {
|
||||||
setPiece(true, PieceType.Rook, 0, 7);
|
setPiece(true, PieceType.Rook, 0, 7);
|
||||||
setPiece(true, PieceType.Knight, 1, 7);
|
setPiece(true, PieceType.Knight, 1, 7);
|
||||||
setPiece(true, PieceType.Bishop, 2, 7);
|
setPiece(true, PieceType.Bishop, 2, 7);
|
||||||
setPiece(true, PieceType.Queen, 4, 7);
|
setPiece(true, PieceType.Queen, 3, 7);
|
||||||
setPiece(true, PieceType.King, 3, 7);
|
setPiece(true, PieceType.King, 4, 7);
|
||||||
setPiece(true, PieceType.Bishop, 5, 7);
|
setPiece(true, PieceType.Bishop, 5, 7);
|
||||||
setPiece(true, PieceType.Knight, 6, 7);
|
setPiece(true, PieceType.Knight, 6, 7);
|
||||||
setPiece(true, PieceType.Rook, 7, 7);
|
setPiece(true, PieceType.Rook, 7, 7);
|
||||||
|
|
@ -87,7 +87,7 @@ public class Board {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (Piece p : pieces) {
|
for (Piece p : pieces) {
|
||||||
sb.append(p.getType()).append(" ")
|
sb.append(p.getType()).append(" ")
|
||||||
.append(p.isWhite() ? "white" : "black")
|
.append(p.isWhite() ? "black" : "white")
|
||||||
.append(" at (").append(p.getX()).append(", ").append(p.getY()).append(")\n");
|
.append(" at (").append(p.getX()).append(", ").append(p.getY()).append(")\n");
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
|
|
@ -148,7 +148,10 @@ public class Board {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (selectedPiece.getType() == PieceType.King && Math.abs(x - selectedX) == 2 && selectedY == y) {
|
||||||
|
move.setCastling(true);
|
||||||
|
}
|
||||||
|
|
||||||
// Record move
|
// Record move
|
||||||
moveHistory.add(move);
|
moveHistory.add(move);
|
||||||
|
|
||||||
|
|
@ -159,9 +162,7 @@ public class Board {
|
||||||
Piece capturedPawn = getPieceAt(x, y + dir);
|
Piece capturedPawn = getPieceAt(x, y + dir);
|
||||||
if (capturedPawn != null) {
|
if (capturedPawn != null) {
|
||||||
pieces.remove(capturedPawn);
|
pieces.remove(capturedPawn);
|
||||||
}
|
}
|
||||||
} else if (destPiece != null) {
|
|
||||||
pieces.remove(destPiece);
|
|
||||||
}
|
}
|
||||||
pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y));
|
pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y));
|
||||||
|
|
||||||
|
|
@ -294,53 +295,54 @@ public class Board {
|
||||||
|
|
||||||
public void playMove(Move move) {
|
public void playMove(Move move) {
|
||||||
if (move == null) return;
|
if (move == null) return;
|
||||||
|
|
||||||
if (move.isEnPassant()) {
|
|
||||||
int direction = move.getMovedPiece().isWhite() ? 1 : -1;
|
|
||||||
Piece capturedPawn = getPieceAt(move.getToX(), move.getToY() + direction);
|
|
||||||
if (capturedPawn != null) {
|
|
||||||
pieces.remove(capturedPawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Piece pieceToMove = getPieceAt(move.getFromX(), move.getFromY());
|
Piece pieceToMove = getPieceAt(move.getFromX(), move.getFromY());
|
||||||
if (pieceToMove == null) return;
|
if (pieceToMove == null) return;
|
||||||
|
|
||||||
// Supprimer la pi<EFBFBD>ce d'origine
|
// Handle capture or en passant
|
||||||
pieces.remove(pieceToMove);
|
if (move.isEnPassant()) {
|
||||||
|
int dir = pieceToMove.isWhite() ? 1 : -1;
|
||||||
// Supprimer la pi<EFBFBD>ce captur<EFBFBD>e (si elle existe)
|
Piece captured = getPieceAt(move.getToX(), move.getToY() + dir);
|
||||||
Piece captured = getPieceAt(move.getToX(), move.getToY());
|
if (captured != null) pieces.remove(captured);
|
||||||
if (captured != null) {
|
} else if (move.getCapturedPiece() != null) {
|
||||||
pieces.remove(captured);
|
pieces.remove(move.getCapturedPiece());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ajouter la nouvelle position
|
// Move the piece instead of removing it
|
||||||
Piece newPiece = new Piece(
|
pieceToMove.setX(move.getToX());
|
||||||
pieceToMove.getType(),
|
pieceToMove.setY(move.getToY());
|
||||||
pieceToMove.isWhite(),
|
pieceToMove.setHasMoved(true);
|
||||||
move.getToX(),
|
|
||||||
move.getToY()
|
|
||||||
);
|
|
||||||
pieces.add(newPiece);
|
|
||||||
|
|
||||||
// Enregistrer dans l'historique pour undo
|
// ♔ Handle castling
|
||||||
|
if (move.isCastling()) {
|
||||||
|
int y = move.getToY();
|
||||||
|
boolean kingside = move.getToX() > move.getFromX();
|
||||||
|
int rookFromX = kingside ? 7 : 0;
|
||||||
|
int rookToX = kingside ? move.getToX() - 1 : move.getToX() + 1;
|
||||||
|
|
||||||
|
Piece rook = getPieceAt(rookFromX, y);
|
||||||
|
if (rook != null && rook.getType() == PieceType.Rook) {
|
||||||
|
rook.setX(rookToX);
|
||||||
|
rook.setY(y);
|
||||||
|
rook.setHasMoved(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save move to history
|
||||||
moveHistory.add(move);
|
moveHistory.add(move);
|
||||||
|
|
||||||
// Fin de tour
|
|
||||||
turnNumber++;
|
turnNumber++;
|
||||||
|
|
||||||
// D<EFBFBD>s<EFBFBD>lection et surlignage off
|
// Deselect anything
|
||||||
selectedX = -1;
|
selectedX = -1;
|
||||||
selectedY = -1;
|
selectedY = -1;
|
||||||
highlightedSquares.clear();
|
highlightedSquares.clear();
|
||||||
|
|
||||||
//Mise <EFBFBD> jour du statut d<EFBFBD><EFBFBD>chec apr<EFBFBD>s le coup
|
// Update check status
|
||||||
isWhiteInCheck = isInCheck(isTurnWhite());
|
isWhiteInCheck = isInCheck(isTurnWhite());
|
||||||
isCheck = isWhiteInCheck;
|
isCheck = isWhiteInCheck;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Piece getPieceAt(int x, int y) {
|
public Piece getPieceAt(int x, int y) {
|
||||||
for (Piece p : pieces) {
|
for (Piece p : pieces) {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ public class Move {
|
||||||
private int toX, toY;
|
private int toX, toY;
|
||||||
private Piece capturedPiece;
|
private Piece capturedPiece;
|
||||||
private boolean enPassant;
|
private boolean enPassant;
|
||||||
|
private boolean castling;
|
||||||
|
|
||||||
public Move(Piece movedPiece, int fromX, int fromY, int toX, int toY, Piece capturedPiece) {
|
public Move(Piece movedPiece, int fromX, int fromY, int toX, int toY, Piece capturedPiece) {
|
||||||
this.movedPiece = movedPiece;
|
this.movedPiece = movedPiece;
|
||||||
|
|
@ -22,9 +23,18 @@ public class Move {
|
||||||
public boolean isEnPassant() {
|
public boolean isEnPassant() {
|
||||||
return enPassant;
|
return enPassant;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEnPassant(boolean enPassant) {
|
public void setEnPassant(boolean enPassant) {
|
||||||
this.enPassant = enPassant;
|
this.enPassant = enPassant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCastling() {
|
||||||
|
return castling;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCastling(boolean castling) {
|
||||||
|
this.castling = castling;
|
||||||
|
}
|
||||||
|
|
||||||
public Piece getMovedPiece() { return movedPiece; }
|
public Piece getMovedPiece() { return movedPiece; }
|
||||||
public int getFromX() { return fromX; }
|
public int getFromX() { return fromX; }
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,14 @@ public class Piece {
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setX(int x) {
|
||||||
|
this.x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setY(int y) {
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
public PieceType getType() {
|
public PieceType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue