From f4b5e10e5b29a9098e1ff8b5446ba7706ebc68d4 Mon Sep 17 00:00:00 2001 From: Janet-Doe Date: Mon, 31 Mar 2025 12:02:23 +0200 Subject: [PATCH] addition of decorator to manage pieces' moves --- .../chess/model/AccessibleCellsDecorator.java | 17 +++++++++++ app/src/main/java/chess/model/Board.java | 30 +++++++++++-------- app/src/main/java/chess/model/Piece.java | 15 +++++++--- .../model/decorators/DiagonalDecorator.java | 21 +++++++++++++ .../chess/model/decorators/LineDecorator.java | 22 ++++++++++++++ .../main/java/chess/model/pieces/Bishop.java | 6 ++-- .../main/java/chess/model/pieces/King.java | 6 ++-- .../main/java/chess/model/pieces/Knight.java | 6 ++-- .../main/java/chess/model/pieces/Pawn.java | 6 ++-- .../main/java/chess/model/pieces/Queen.java | 9 +++--- .../main/java/chess/model/pieces/Rook.java | 10 +++++-- 11 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/chess/model/AccessibleCellsDecorator.java create mode 100644 app/src/main/java/chess/model/decorators/DiagonalDecorator.java create mode 100644 app/src/main/java/chess/model/decorators/LineDecorator.java diff --git a/app/src/main/java/chess/model/AccessibleCellsDecorator.java b/app/src/main/java/chess/model/AccessibleCellsDecorator.java new file mode 100644 index 0000000..69783aa --- /dev/null +++ b/app/src/main/java/chess/model/AccessibleCellsDecorator.java @@ -0,0 +1,17 @@ +package chess.model; + +import java.util.ArrayList; + +public abstract class AccessibleCellsDecorator { + public AccessibleCellsDecorator base; + public ArrayList cells; + protected abstract ArrayList getAccessibleCells(); + public AccessibleCellsDecorator(AccessibleCellsDecorator base) { + this.base = base; + } + public AccessibleCellsDecorator() { + this(null); + } + + +} diff --git a/app/src/main/java/chess/model/Board.java b/app/src/main/java/chess/model/Board.java index f55fa9e..090aa5c 100644 --- a/app/src/main/java/chess/model/Board.java +++ b/app/src/main/java/chess/model/Board.java @@ -40,27 +40,27 @@ public class Board { public void setPiecesSize8(){ for (int i = 0; i < 8; i++) { - board[i][1].setPiece(new Pawn(BLACK)); - board[i][6].setPiece(new Pawn(WHITE)); + board[i][1].setPiece(new Pawn(BLACK, this, board[i][1])); + board[i][6].setPiece(new Pawn(WHITE, this, board[i][6])); if (i==0 || i==7) { - board[i][0].setPiece(new Rook(BLACK)); - board[i][7].setPiece(new Rook(WHITE)); + board[i][0].setPiece(new Rook(BLACK, this, board[i][0])); + board[i][7].setPiece(new Rook(WHITE, this, board[i][7])); } if (i==1 || i==6) { - board[i][0].setPiece(new Knight(BLACK)); - board[i][7].setPiece(new Knight(WHITE)); + board[i][0].setPiece(new Knight(BLACK, this, board[i][0])); + board[i][7].setPiece(new Knight(WHITE, this, board[i][7])); } if (i==2 || i==5) { - board[i][0].setPiece(new Bishop(BLACK)); - board[i][7].setPiece(new Bishop(WHITE)); + board[i][0].setPiece(new Bishop(BLACK, this, board[i][0])); + board[i][7].setPiece(new Bishop(WHITE, this, board[i][7])); } if (i==3) { - board[i][0].setPiece(new Queen(BLACK)); - board[i][7].setPiece(new Queen(WHITE)); + board[i][0].setPiece(new Queen(BLACK, this, board[i][0])); + board[i][7].setPiece(new Queen(WHITE, this, board[i][7])); } if (i==4) { - board[i][0].setPiece(new King(BLACK)); - board[i][7].setPiece(new King(WHITE)); + board[i][0].setPiece(new King(BLACK, this, board[i][0])); + board[i][7].setPiece(new King(WHITE, this, board[i][7])); } } @@ -75,7 +75,11 @@ public class Board { Cell arrivalCell = getCell(move.getEnd()); getCell(move.getStart()).deletePiece(); arrivalCell.setPiece(movingPiece); + movingPiece.setPosition(arrivalCell); + } + + public Cell getRelativePosition(Coordinates coordinates, MovePattern mp){ + // todo } - // je fais mumuse } diff --git a/app/src/main/java/chess/model/Piece.java b/app/src/main/java/chess/model/Piece.java index 44dee56..6dc15ac 100644 --- a/app/src/main/java/chess/model/Piece.java +++ b/app/src/main/java/chess/model/Piece.java @@ -3,18 +3,25 @@ package chess.model; import chess.view.render2D.Pieces; public abstract class Piece { - public int color; + public final int color; + public AccessibleCellsDecorator decorator; + public final Board board; + public Cell position; - public Piece(int color) { + public Piece(int color, Board board, Cell position) { this.color = color; + this.board = board; + this.position = position; } public int getColor() { return color; } + public void setPosition(Cell cell) { + this.position = cell; + } + public abstract void accept(PieceVisitor pv); - // public abstract void allowedMove(); - } diff --git a/app/src/main/java/chess/model/decorators/DiagonalDecorator.java b/app/src/main/java/chess/model/decorators/DiagonalDecorator.java new file mode 100644 index 0000000..d613e99 --- /dev/null +++ b/app/src/main/java/chess/model/decorators/DiagonalDecorator.java @@ -0,0 +1,21 @@ +package chess.model.decorators; + +import chess.model.AccessibleCellsDecorator; +import chess.model.Cell; + +import java.util.ArrayList; + +public class DiagonalDecorator extends AccessibleCellsDecorator { + public DiagonalDecorator(AccessibleCellsDecorator base) { + super(base); + } + + public DiagonalDecorator(){ + super(); + } + + @Override + protected ArrayList getAccessibleCells() { + return null; + } +} diff --git a/app/src/main/java/chess/model/decorators/LineDecorator.java b/app/src/main/java/chess/model/decorators/LineDecorator.java new file mode 100644 index 0000000..c554cc3 --- /dev/null +++ b/app/src/main/java/chess/model/decorators/LineDecorator.java @@ -0,0 +1,22 @@ +package chess.model.decorators; + +import chess.model.AccessibleCellsDecorator; +import chess.model.Cell; + +import java.util.ArrayList; + +public class LineDecorator extends AccessibleCellsDecorator { + public LineDecorator(AccessibleCellsDecorator base) { + super(base); + } + + public LineDecorator(){ + super(); + } + + @Override + protected ArrayList getAccessibleCells() { + + return null; + } +} diff --git a/app/src/main/java/chess/model/pieces/Bishop.java b/app/src/main/java/chess/model/pieces/Bishop.java index 81e9871..5c4a8d5 100644 --- a/app/src/main/java/chess/model/pieces/Bishop.java +++ b/app/src/main/java/chess/model/pieces/Bishop.java @@ -1,11 +1,13 @@ package chess.model.pieces; +import chess.model.Board; +import chess.model.Cell; import chess.model.Piece; import chess.model.PieceVisitor; public class Bishop extends Piece { - public Bishop(final int color) { - super(color); + public Bishop(final int color, Board board, Cell cell) { + super(color, board, cell); } @Override diff --git a/app/src/main/java/chess/model/pieces/King.java b/app/src/main/java/chess/model/pieces/King.java index 2c26bb1..367e8e1 100644 --- a/app/src/main/java/chess/model/pieces/King.java +++ b/app/src/main/java/chess/model/pieces/King.java @@ -1,11 +1,13 @@ package chess.model.pieces; +import chess.model.Board; +import chess.model.Cell; import chess.model.Piece; import chess.model.PieceVisitor; public class King extends Piece { - public King(final int color) { - super(color); + public King(final int color, Board board, Cell cell) { + super(color, board, cell); } @Override diff --git a/app/src/main/java/chess/model/pieces/Knight.java b/app/src/main/java/chess/model/pieces/Knight.java index 6ecc0e2..d7a6d4d 100644 --- a/app/src/main/java/chess/model/pieces/Knight.java +++ b/app/src/main/java/chess/model/pieces/Knight.java @@ -1,11 +1,13 @@ package chess.model.pieces; +import chess.model.Board; +import chess.model.Cell; import chess.model.Piece; import chess.model.PieceVisitor; public class Knight extends Piece { - public Knight(final int color) { - super(color); + public Knight(final int color, Board board, Cell cell) { + super(color, board, cell); } @Override diff --git a/app/src/main/java/chess/model/pieces/Pawn.java b/app/src/main/java/chess/model/pieces/Pawn.java index 770956b..b9dcb74 100644 --- a/app/src/main/java/chess/model/pieces/Pawn.java +++ b/app/src/main/java/chess/model/pieces/Pawn.java @@ -1,11 +1,13 @@ package chess.model.pieces; +import chess.model.Board; +import chess.model.Cell; import chess.model.Piece; import chess.model.PieceVisitor; public class Pawn extends Piece { - public Pawn(final int color) { - super(color); + public Pawn(final int color, Board board, Cell cell) { + super(color, board, cell); } @Override diff --git a/app/src/main/java/chess/model/pieces/Queen.java b/app/src/main/java/chess/model/pieces/Queen.java index ecaceb0..3f0e392 100644 --- a/app/src/main/java/chess/model/pieces/Queen.java +++ b/app/src/main/java/chess/model/pieces/Queen.java @@ -1,11 +1,12 @@ package chess.model.pieces; -import chess.model.Piece; -import chess.model.PieceVisitor; +import chess.model.*; +import chess.model.decorators.DiagonalDecorator; +import chess.model.decorators.LineDecorator; public class Queen extends Piece { - public Queen(final int color) { - super(color); + public Queen(final int color, Board board, Cell cell) { + super(color, board, cell); } @Override diff --git a/app/src/main/java/chess/model/pieces/Rook.java b/app/src/main/java/chess/model/pieces/Rook.java index 3897ca8..6593bf5 100644 --- a/app/src/main/java/chess/model/pieces/Rook.java +++ b/app/src/main/java/chess/model/pieces/Rook.java @@ -1,11 +1,17 @@ package chess.model.pieces; +import chess.model.Board; +import chess.model.Cell; import chess.model.Piece; import chess.model.PieceVisitor; +import chess.model.decorators.DiagonalDecorator; +import chess.model.decorators.LineDecorator; public class Rook extends Piece { - public Rook(final int color) { - super(color); + public Rook(final int color, Board board, Cell cell) { + super(color, board, cell); + this.decorator = new LineDecorator(); + // todo } @Override