From 8cd5e5adfc73b7253671c801d67ea332d5e0af13 Mon Sep 17 00:00:00 2001 From: "g.vancompernolle" Date: Wed, 9 Apr 2025 10:21:23 +0200 Subject: [PATCH] oo --- src/backend/Board.java | 105 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 92 insertions(+), 13 deletions(-) diff --git a/src/backend/Board.java b/src/backend/Board.java index 841c058..abc4067 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -6,6 +6,9 @@ public class Board { private int width; private int height; + private int turnNumber = 0; + private int selectedX = -1; + private int selectedY = -1; private ArrayList pieces = new ArrayList<>(); public Board(int colNum, int lineNum) { @@ -23,30 +26,62 @@ public class Board { public int getTurnNumber() { //TODO - return 0; + return turnNumber; } public boolean isTurnWhite() { - //TODO - return false; + return (turnNumber % 2 == 0); } public void setPiece(boolean isWhite, PieceType type, int x, int y) { - //TODO + Piece piece = new Piece(type, isWhite, x, y); + pieces.add(piece); } public void populateBoard() { - //TODO + cleanBoard(); // on vide d'abord le plateau + + // Pions + for (int i = 0; i < 8; i++) { + setPiece(true, PieceType.Pawn, i, 6); // Blancs + setPiece(false, PieceType.Pawn, i, 1); // Noirs + } + + // Pièces noires + setPiece(false, PieceType.Rook, 0, 0); + setPiece(false, PieceType.Knight, 1, 0); + setPiece(false, PieceType.Bishop, 2, 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); + + // Pièces blanches + setPiece(true, PieceType.Rook, 0, 7); + setPiece(true, PieceType.Knight, 1, 7); + setPiece(true, PieceType.Bishop, 2, 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); } - + public void cleanBoard() { - //TODO + pieces.clear(); } public String toString() { - //TODO - return ""; + StringBuilder sb = new StringBuilder(); + for (Piece p : pieces) { + sb.append(p.getType()).append(" ") + .append(p.isWhite() ? "white" : "black") + .append(" at (").append(p.getX()).append(", ").append(p.getY()).append(")\n"); + } + return sb.toString(); } + public ArrayList getPieces() { ArrayList pieces = new ArrayList<>(); @@ -56,14 +91,49 @@ public class Board { } public void userTouch(int x, int y) { - //TODO - + Piece clickedPiece = getPieceAt(x, y); + + // Aucun pion sélectionné + if (selectedX == -1 && selectedY == -1) { + if (clickedPiece != null && clickedPiece.isWhite() == isTurnWhite()) { + selectedX = x; + selectedY = y; + } + } + // Déjà une sélection + else { + // Si on reclique sur la même case, on désélectionne + if (selectedX == x && selectedY == y) { + selectedX = -1; + selectedY = -1; + } else { + Piece selectedPiece = getPieceAt(selectedX, selectedY); + + if (selectedPiece != null && selectedPiece.isWhite() == isTurnWhite()) { + // Capture éventuelle + Piece destPiece = getPieceAt(x, y); + if (destPiece != null) { + pieces.remove(destPiece); + } + + // Déplacement + pieces.remove(selectedPiece); + pieces.add(new Piece(selectedPiece.getType(), selectedPiece.isWhite(), x, y)); + + // Fin du tour + turnNumber++; + selectedX = -1; + selectedY = -1; + } + } + } } + public boolean isSelected(int x, int y) { - //TODO - return false; + return x == selectedX && y == selectedY; } + /* saving-loading feature :*/ @@ -98,5 +168,14 @@ public class Board { //TODO } + + private Piece getPieceAt(int x, int y) { + for (Piece p : pieces) { + if (p.getX() == x && p.getY() == y) { + return p; + } + } + return null; + } }