Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
61d9b40263 | |
|
|
ab8da52181 |
|
|
@ -62,8 +62,8 @@ public class Board {
|
|||
setPiece(false, PieceType.Rook, 0, 0);
|
||||
setPiece(false, PieceType.Knight, 1, 0);
|
||||
setPiece(false, PieceType.Bishop, 2, 0);
|
||||
setPiece(false, PieceType.Queen, 4, 0);
|
||||
setPiece(false, PieceType.King, 3, 0);
|
||||
setPiece(false, PieceType.Queen, 3, 0);
|
||||
setPiece(false, PieceType.King, 4, 0);
|
||||
setPiece(false, PieceType.Bishop, 5, 0);
|
||||
setPiece(false, PieceType.Knight, 6, 0);
|
||||
setPiece(false, PieceType.Rook, 7, 0);
|
||||
|
|
@ -72,8 +72,8 @@ public class Board {
|
|||
setPiece(true, PieceType.Rook, 0, 7);
|
||||
setPiece(true, PieceType.Knight, 1, 7);
|
||||
setPiece(true, PieceType.Bishop, 2, 7);
|
||||
setPiece(true, PieceType.Queen, 4, 7);
|
||||
setPiece(true, PieceType.King, 3, 7);
|
||||
setPiece(true, PieceType.Queen, 3, 7);
|
||||
setPiece(true, PieceType.King, 4, 7);
|
||||
setPiece(true, PieceType.Bishop, 5, 7);
|
||||
setPiece(true, PieceType.Knight, 6, 7);
|
||||
setPiece(true, PieceType.Rook, 7, 7);
|
||||
|
|
@ -87,7 +87,7 @@ public class Board {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
for (Piece p : pieces) {
|
||||
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");
|
||||
}
|
||||
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
|
||||
moveHistory.add(move);
|
||||
|
||||
|
|
@ -159,9 +162,7 @@ public class Board {
|
|||
Piece capturedPawn = getPieceAt(x, y + dir);
|
||||
if (capturedPawn != null) {
|
||||
pieces.remove(capturedPawn);
|
||||
}
|
||||
} else if (destPiece != null) {
|
||||
pieces.remove(destPiece);
|
||||
}
|
||||
}
|
||||
pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y));
|
||||
|
||||
|
|
@ -294,53 +295,54 @@ public class Board {
|
|||
|
||||
public void playMove(Move move) {
|
||||
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());
|
||||
if (pieceToMove == null) return;
|
||||
|
||||
// Supprimer la pi<EFBFBD>ce d'origine
|
||||
pieces.remove(pieceToMove);
|
||||
|
||||
// Supprimer la pi<EFBFBD>ce captur<EFBFBD>e (si elle existe)
|
||||
Piece captured = getPieceAt(move.getToX(), move.getToY());
|
||||
if (captured != null) {
|
||||
pieces.remove(captured);
|
||||
// Handle capture or en passant
|
||||
if (move.isEnPassant()) {
|
||||
int dir = pieceToMove.isWhite() ? 1 : -1;
|
||||
Piece captured = getPieceAt(move.getToX(), move.getToY() + dir);
|
||||
if (captured != null) pieces.remove(captured);
|
||||
} else if (move.getCapturedPiece() != null) {
|
||||
pieces.remove(move.getCapturedPiece());
|
||||
}
|
||||
|
||||
// Ajouter la nouvelle position
|
||||
Piece newPiece = new Piece(
|
||||
pieceToMove.getType(),
|
||||
pieceToMove.isWhite(),
|
||||
move.getToX(),
|
||||
move.getToY()
|
||||
);
|
||||
pieces.add(newPiece);
|
||||
// Move the piece instead of removing it
|
||||
pieceToMove.setX(move.getToX());
|
||||
pieceToMove.setY(move.getToY());
|
||||
pieceToMove.setHasMoved(true);
|
||||
|
||||
// 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);
|
||||
|
||||
// Fin de tour
|
||||
turnNumber++;
|
||||
|
||||
// D<EFBFBD>s<EFBFBD>lection et surlignage off
|
||||
// Deselect anything
|
||||
selectedX = -1;
|
||||
selectedY = -1;
|
||||
highlightedSquares.clear();
|
||||
|
||||
//Mise <EFBFBD> jour du statut d<EFBFBD><EFBFBD>chec apr<EFBFBD>s le coup
|
||||
// Update check status
|
||||
isWhiteInCheck = isInCheck(isTurnWhite());
|
||||
isCheck = isWhiteInCheck;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Piece getPieceAt(int x, int y) {
|
||||
for (Piece p : pieces) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ public class Move {
|
|||
private int toX, toY;
|
||||
private Piece capturedPiece;
|
||||
private boolean enPassant;
|
||||
private boolean castling;
|
||||
|
||||
public Move(Piece movedPiece, int fromX, int fromY, int toX, int toY, Piece capturedPiece) {
|
||||
this.movedPiece = movedPiece;
|
||||
|
|
@ -22,9 +23,18 @@ public class Move {
|
|||
public boolean isEnPassant() {
|
||||
return enPassant;
|
||||
}
|
||||
|
||||
public void setEnPassant(boolean enPassant) {
|
||||
this.enPassant = enPassant;
|
||||
}
|
||||
|
||||
public boolean isCastling() {
|
||||
return castling;
|
||||
}
|
||||
|
||||
public void setCastling(boolean castling) {
|
||||
this.castling = castling;
|
||||
}
|
||||
|
||||
public Piece getMovedPiece() { return movedPiece; }
|
||||
public int getFromX() { return fromX; }
|
||||
|
|
|
|||
|
|
@ -32,6 +32,14 @@ public class Piece {
|
|||
return y;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public PieceType getType() {
|
||||
return type;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,13 +111,13 @@ public class JPanelChessBoard extends JPanel {
|
|||
for (int x = 0; x < myGame.getWidth(); x++) {
|
||||
for (int y = 0; y < myGame.getHeight(); y++) {
|
||||
|
||||
Piece p = getPieceAt(x, y); //définir p AVANT toute condition
|
||||
Piece p = getPieceAt(x, y); //d<EFBFBD>finir p AVANT toute condition
|
||||
|
||||
// Damier inversé
|
||||
// Damier invers<EFBFBD>
|
||||
if ((x + y) % 2 == 0) {
|
||||
g.setColor(new Color(1, 1, 1)); // clair
|
||||
g.setColor(new Color(255, 250, 255)); // clair
|
||||
} else {
|
||||
g.setColor(new Color(240, 240, 240)); // foncé
|
||||
g.setColor(new Color(50, 25, 1)); // fonc<EFBFBD>
|
||||
}
|
||||
|
||||
// Surlignage rouge en cas de mat
|
||||
|
|
@ -125,7 +125,7 @@ public class JPanelChessBoard extends JPanel {
|
|||
g.setColor(Color.RED);
|
||||
}
|
||||
|
||||
// Sélection
|
||||
// S<EFBFBD>lection
|
||||
if (myGame.isSelected(x, y)) {
|
||||
g.setColor(Color.ORANGE);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue