package laboratoire4; public abstract class Pawn { protected final Player player; protected int row; protected int col; protected int direction; public Pawn(Player player, int row, int col) { this.player = player; this.row = row; this.col = col; this.direction = player == Player.RED ? 1 : -1; } public void move(PawnMovement movement) { setRow(row + direction); setCol(col + movement.move); } public String getPosition() { char colStr = (char)(col + 65); return String.format("%s%d", colStr, row + 1); } public Player getPlayer() { return player; } public int getCol() { return col; } public int getRow() { return row; } public void setCol(int col) { this.col = col; } public void setRow(int row) { this.row = row; } public int getDirection() { return direction; } public boolean isMoveValid(PusherBoard game, PawnMovement movement) { Pawn[][] board = game.getBoard(); int nextRow = row + getDirection(); if (nextRow < 0 || nextRow >= board.length) { return false; } int nextCol = col + movement.move; if (nextCol < 0 || nextCol >= board.length) { return false; } return isMoveValid(board, movement); } protected abstract boolean isMoveValid(Pawn[][] board, PawnMovement movement); enum PawnMovement { STRAIGHT(0), LEFT_DIAGONAL(-1), RIGHT_DIAGONAL(1); private final int move; PawnMovement(int move) { this.move = move; } public int getMove() { return move; } public static PawnMovement from(int move) { if (move == 0) { return STRAIGHT; } if (move == 1) { return RIGHT_DIAGONAL; } return LEFT_DIAGONAL; } } }