commit undoLastMove, the undo bottom is work now
This commit is contained in:
parent
159b0f3e83
commit
dcb220d7bd
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue