From dcb220d7bd210d41529999e7555e98ae646a0fe9 Mon Sep 17 00:00:00 2001 From: MSI Date: Fri, 16 May 2025 11:26:09 +0200 Subject: [PATCH] commit undoLastMove, the undo bottom is work now --- src/backend/Board.java | 201 +++++++++++++++++++++++------------------ src/backend/Move.java | 3 +- 2 files changed, 112 insertions(+), 92 deletions(-) diff --git a/src/backend/Board.java b/src/backend/Board.java index a7706eb..e0a7e91 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -4,11 +4,15 @@ import java.util.ArrayList; public class Board { - private int cNum; // nb de colonnes du damier - private int lNum; // nb de ligne du damier + private int cNum; + private int lNum; private Piece[][] cells; private Piece selectedCell; - + private ArrayList moveHistory = new ArrayList<>(); + + private int turnNumber = 0; + + public Board(int colNum, int lineNum) { cNum=colNum; @@ -26,26 +30,18 @@ public class Board { } public int getTurnNumber() { - int turnNumber; - turnNumber=0; - turnNumber=turnNumber+1; - return turnNumber; + return turnNumber; } + public boolean isTurnWhite() { - //Divide by 2 and check if rest = 0 - if (getTurnNumber()%2==0) { - return true; - } - else{ - return false; - } + return getTurnNumber() % 2 == 0; } + public void setPiece(PieceType type, boolean isWhite, int x, int y) { - Piece newPiece= new Piece(type,isWhite,x,y); - - cells[x][y] = newPiece; + Piece newPiece = new Piece(type, isWhite, x, y); + cells[x][y] = newPiece; } public void populateBoard() { @@ -138,66 +134,69 @@ public class Board { public void userTouch(int x, int y) { - // on teste si une cellule est deja selectionne - if(this.selectedCell !=null) { - System.out.println(" cellule deja selectionne : " + this.selectedCell.getName()); - //la nouvelle case touchee est vide ? - if(cells[x][y] ==null) { - // je deplace la pièce selectionnee - //TODO VERIFIER SI LA COULEUR DE LA PIECE EXISTANTE EST DIFFERENTE DE CELLE DU JOUEUR - //TODO A REMPLACER PAR UNE FONCTION MOVE - cells[x][y] = new Piece( - this.selectedCell.getType(), - this.selectedCell.isWhite(), - x, - y - - ); - // je supprime la pièce selectionne pour liberer la case - cells[this.selectedCell.getX()][this.selectedCell.getY()] = null; - //je deselectionne la pièce - this.selectedCell=null; - - } else { - // je teste si la nouvelle case cochée est la meme que celle déjà coche - if(this.cells[x][y].getX()==this.selectedCell.getX() && this.cells[x][y].getY() == this.selectedCell.getY()) { - System.out.println("il a clique sur la meme cellule, je deselectionne" ); - this.selectedCell =null; - } else { - // je deplace la deplace pièce et remplace la pièce existante - //TODO A REMPLACER PAR UNE FONCTION MOVE - cells[x][y] = new Piece( - this.selectedCell.getType(), - this.selectedCell.isWhite(), - x, - y - - ); - // je supprime la pièce selectionne pour liberer la case - cells[this.selectedCell.getX()][this.selectedCell.getY()] = null; - //je deselectionne la pièce - this.selectedCell=null; - } - - } - - } else { - // aucune cellule deja selectionnée, - System.out.println("----- aucune cellule selectionnee" ); - - //a-t-il selectionné une pièce ? - // TODO il faut verifier que c'est une pièce du bon joueur (bonne couleur) - if(cells[x][y] !=null){ - //il a selectionné une pièce, elle devient is selected - this.selectedCell = this.cells[x][y]; - System.out.println("nouvelle cellule selectionne" + cells[x][y].getName()); - - } else { - //rien il a selectionne vide - System.out.println("il a clique sur cellule vide"); - } - } - + if (this.selectedCell != null) { + System.out.println(" cellule deja selectionne : " + this.selectedCell.getName()); + + // CASE 1: Move to empty square + if (cells[x][y] == null) { + moveHistory.add(new Move( + selectedCell, + selectedCell.getX(), + selectedCell.getY(), + x, + y, + null + )); + + cells[x][y] = new Piece( + selectedCell.getType(), + selectedCell.isWhite(), + x, + y + ); + cells[selectedCell.getX()][selectedCell.getY()] = null; + selectedCell = null; + turnNumber++; + + } + // CASE 2: Clicked same piece (deselect) + else if (cells[x][y].getX() == selectedCell.getX() && cells[x][y].getY() == selectedCell.getY()) { + System.out.println("il a clique sur la meme cellule, je deselectionne"); + this.selectedCell = null; + } + // CASE 3: Capture or replace opponent piece + else { + moveHistory.add(new Move( + selectedCell, + selectedCell.getX(), + selectedCell.getY(), + x, + y, + cells[x][y] // captured piece + )); + + cells[x][y] = new Piece( + selectedCell.getType(), + selectedCell.isWhite(), + x, + y + ); + cells[selectedCell.getX()][selectedCell.getY()] = null; + selectedCell = null; + turnNumber++; + } + + } else { + // CASE: No cell selected yet + System.out.println("----- aucune cellule selectionnee"); + + if (cells[x][y] != null) { + this.selectedCell = this.cells[x][y]; + System.out.println("nouvelle cellule selectionne " + cells[x][y].getName()); + } else { + System.out.println("il a clique sur cellule vide"); + } + } } public boolean isSelected(int x, int y) { @@ -344,19 +343,7 @@ public class Board { } - public void undoLastMove() { - ArrayList moveHistory = new ArrayList<>(); - if (moveHistory.isEmpty()) { - Move lastMove = moveHistory.remove(moveHistory.size()-1); - cells[lastMove.getFromX()][lastMove.getFromY()] = lastMove.getPiece(); - cells[lastMove.getToX()][lastMove.getToY()] = lastMove.getCapturedPiece();; - - if (lastMove.getCapturedPiece()!=null) { - //cells.add(lastMove.getCapturedPiece()); - } - } - } - + public Board(Board other) { this.cNum = other.cNum; this.lNum = other.lNum; @@ -392,5 +379,39 @@ public class Board { System.out.println("Moved " + movingPiece.getType() + " from (" + fromX + "," + fromY + ") to (" + toX + "," + toY + ")"); } + + public void undoLastMove() { + if (moveHistory.isEmpty()) { + System.out.println("No move to undo."); + return; + } + + Move lastMove = moveHistory.remove(moveHistory.size() - 1); + + int fromX = lastMove.getFromX(); + int fromY = lastMove.getFromY(); + int toX = lastMove.getToX(); + int toY = lastMove.getToY(); + + // Restore moved piece + cells[fromX][fromY] = lastMove.getPiece(); + + // Restore captured piece (or null) + if (lastMove.getCapturedPiece() != null) { + cells[toX][toY] = lastMove.getCapturedPiece(); + } else { + cells[toX][toY] = null; + } + + // Clear selection + selectedCell = null; + + // Roll back turn + if (turnNumber > 0) { + turnNumber--; + } + + System.out.println("Undo completed."); + } } diff --git a/src/backend/Move.java b/src/backend/Move.java index d5e010e..620a4b2 100644 --- a/src/backend/Move.java +++ b/src/backend/Move.java @@ -12,7 +12,7 @@ public class Move { this.fromY = fromY; this.toX = toX; this.toY = toY; - //this.capturedPiece = capturedPiece; + this.capturedPiece = capturedPiece; } public Piece getPiece() { return piece; @@ -39,5 +39,4 @@ public class Move { return piece + ":("+ fromX + "," + fromY + ")-("+ toX + "," + toY + ")" + ( capturedPiece != null? "capturing "+ capturedPiece: ""); } - /// mjs }