feat: add ai castling (Fixes #4)
All checks were successful
Linux arm64 / Build (push) Successful in 41s
All checks were successful
Linux arm64 / Build (push) Successful in 41s
This commit is contained in:
@@ -2,20 +2,15 @@ package chess.ai;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import chess.controller.Command;
|
||||
import chess.ai.actions.AIAction;
|
||||
import chess.ai.actions.AIActions;
|
||||
import chess.controller.CommandExecutor;
|
||||
import chess.controller.Command.CommandResult;
|
||||
import chess.controller.commands.GetPieceAtCommand;
|
||||
import chess.controller.commands.GetPlayerMovesCommand;
|
||||
import chess.controller.commands.GetAllowedCastlingsCommand;
|
||||
import chess.controller.commands.GetAllowedCastlingsCommand.CastlingResult;
|
||||
import chess.controller.event.GameAdapter;
|
||||
import chess.model.Color;
|
||||
import chess.model.Coordinate;
|
||||
import chess.model.Move;
|
||||
import chess.model.Piece;
|
||||
|
||||
public abstract class AI extends GameAdapter{
|
||||
public abstract class AI extends GameAdapter {
|
||||
|
||||
protected final CommandExecutor commandExecutor;
|
||||
protected final Color color;
|
||||
@@ -26,7 +21,6 @@ public abstract class AI extends GameAdapter{
|
||||
}
|
||||
|
||||
protected abstract void play();
|
||||
protected abstract void promote(Coordinate pawnCoords);
|
||||
|
||||
@Override
|
||||
public void onPlayerTurn(Color color, boolean undone) {
|
||||
@@ -36,44 +30,12 @@ public abstract class AI extends GameAdapter{
|
||||
play();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPromotePawn(Coordinate pieceCoords) {
|
||||
Piece pawn = pieceAt(pieceCoords);
|
||||
if (pawn.getColor() != this.color)
|
||||
return;
|
||||
promote(pieceCoords);
|
||||
protected List<AIAction> getAllowedActions() {
|
||||
return AIActions.getAllowedActions(this.commandExecutor);
|
||||
}
|
||||
|
||||
protected Piece pieceAt(Coordinate coordinate) {
|
||||
GetPieceAtCommand command = new GetPieceAtCommand(coordinate);
|
||||
sendCommand(command);
|
||||
return command.getPiece();
|
||||
return AIActions.pieceAt(coordinate, this.commandExecutor);
|
||||
}
|
||||
|
||||
protected List<Move> getAllowedMoves() {
|
||||
return getAllowedMoves(this.commandExecutor);
|
||||
}
|
||||
|
||||
protected List<Move> getAllowedMoves(CommandExecutor commandExecutor) {
|
||||
GetPlayerMovesCommand cmd = new GetPlayerMovesCommand();
|
||||
sendCommand(cmd, commandExecutor);
|
||||
return cmd.getMoves();
|
||||
}
|
||||
|
||||
protected CastlingResult getAllowedCastlings() {
|
||||
GetAllowedCastlingsCommand cmd2 = new GetAllowedCastlingsCommand();
|
||||
sendCommand(cmd2);
|
||||
return cmd2.getCastlingResult();
|
||||
}
|
||||
|
||||
protected CommandResult sendCommand(Command command) {
|
||||
return sendCommand(command, this.commandExecutor);
|
||||
}
|
||||
|
||||
protected CommandResult sendCommand(Command command, CommandExecutor commandExecutor) {
|
||||
CommandResult result = commandExecutor.executeCommand(command);
|
||||
assert result != CommandResult.NotAllowed : "Command not allowed!";
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user