diff --git a/OOP_2B1_Project/src/backend/Board.java b/OOP_2B1_Project/src/backend/Board.java index 7713bc2..1aac7fc 100644 --- a/OOP_2B1_Project/src/backend/Board.java +++ b/OOP_2B1_Project/src/backend/Board.java @@ -1,6 +1,7 @@ package backend; import java.util.ArrayList; +import java.util.LinkedList; public class Board { public int width; @@ -12,6 +13,7 @@ public class Board { public int turnNumber; public boolean turnColor; public ArrayList> possibleMoves = new ArrayList<>(); + public LinkedList boardHistory = new LinkedList<>(); public Board(int colNum, int lineNum) { this.width = colNum; this.height = lineNum; @@ -29,7 +31,7 @@ public class Board { } this.turnNumber = 0; this.turnColor = true; - + boardHistory.add(new BoardHistory(board,turnNumber,turnColor)); } public int getWidth() { @@ -81,6 +83,7 @@ public class Board { } } } + boardHistory.add(new BoardHistory(board,turnNumber,turnColor)); } public void cleanBoard() { @@ -91,6 +94,8 @@ public class Board { this.board.get(y).set(x, null); } } + this.turnNumber = 0; + this.turnColor = true; } @Override @@ -109,16 +114,28 @@ public class Board { } return pieces; } - + + public Piece getPiece(int x, int y) { return board.get(y).get(x); } - + + public void setBoard(ArrayList> boardToSet) { + for (int x = 0; x < 8; x++) { + for (int y = 0; y < 8; y++) { + if (boardToSet.get(y).get(x) != null) { + setPiece(x, y, boardToSet.get(y).get(x).getType(), boardToSet.get(y).get(x).isWhite()); + } + } + } + } + public void movePiece(int x, int y) { if (select) { Piece pieceToMove = this.board.get(this.ym).get(this.xm); this.setPiece(x,y,pieceToMove.getType(),pieceToMove.isWhite()); board.get(this.ym).set(this.xm,null); + boardHistory.add(new BoardHistory(board,turnNumber,turnColor)); } } @@ -174,8 +191,11 @@ public class Board { } public void undoLastMove() { - //TODO - + ArrayList> boardToSet = boardHistory.get(boardHistory.size() - 2).getBoard(); + this.turnNumber = boardHistory.getLast().getTurnNumber(); + this.turnColor = boardHistory.getLast().isTurnColor(); + boardHistory.removeLast(); + board = boardToSet; } public Board(Board board) { diff --git a/OOP_2B1_Project/src/backend/BoardHistory.java b/OOP_2B1_Project/src/backend/BoardHistory.java new file mode 100644 index 0000000..9577fda --- /dev/null +++ b/OOP_2B1_Project/src/backend/BoardHistory.java @@ -0,0 +1,45 @@ +package backend; + +import java.util.ArrayList; + +public class BoardHistory { + public int width; + public int height; + public ArrayList> board = new ArrayList<>(); + public int turnNumber; + public boolean turnColor; + public BoardHistory(ArrayList> board, int turnNumber, boolean turnColor) { + this.board = deepCopyBoard(board); + this.turnNumber = turnNumber; + this.turnColor = turnColor; + } + private ArrayList> deepCopyBoard(ArrayList> original) { + ArrayList> copy = new ArrayList<>(); + for (ArrayList row : original) { + ArrayList newRow = new ArrayList<>(); + for (Piece p : row) { + if (p != null) { + newRow.add(PieceCreation.createPiece(p.getX(), p.getY(), p.getType(), p.isWhite())); + } else { + newRow.add(null); + } + } + copy.add(newRow); + } + return copy; + } + public ArrayList> getBoard() { + return board; + } + public int getTurnNumber() { + return turnNumber; + } + public boolean isTurnColor() { + return turnColor; + } + @Override + public String toString() { + return "BoardHistory [board=" + board + "]"; + } + +} diff --git a/OOP_2B1_Project/src/backend/History.java b/OOP_2B1_Project/src/backend/History.java new file mode 100644 index 0000000..79d3acf --- /dev/null +++ b/OOP_2B1_Project/src/backend/History.java @@ -0,0 +1,5 @@ +package backend; + +public class History { + +}