commit undoLastMove, the undo bottom is work now

This commit is contained in:
MSI 2025-05-16 11:26:09 +02:00
parent 159b0f3e83
commit dcb220d7bd
2 changed files with 112 additions and 92 deletions

View File

@ -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<Move> 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<Move> 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.");
}
}

View File

@ -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
}