package chess.ai; import java.util.List; import java.util.Random; import chess.controller.CommandExecutor; import chess.controller.commands.CastlingCommand; import chess.controller.commands.GetAllowedCastlingsCommand.CastlingResult; import chess.controller.commands.MoveCommand; import chess.controller.commands.PromoteCommand; import chess.controller.commands.PromoteCommand.PromoteType; import chess.model.Color; import chess.model.Coordinate; import chess.model.Move; public class DumbAI extends AI { private final Random random = new Random(); public DumbAI(CommandExecutor commandExecutor, Color color) { super(commandExecutor, color); } @Override protected void play() { CastlingResult castlings = getAllowedCastlings(); List moves = getAllowedMoves(); switch (castlings) { case Both: { int randomMove = this.random.nextInt(moves.size() + 2); if (randomMove < moves.size() - 2) break; this.commandExecutor.executeCommand(new CastlingCommand(randomMove == moves.size())); return; } case Small: case Big: { int randomMove = this.random.nextInt(moves.size() + 1); if (randomMove != moves.size()) break; this.commandExecutor.executeCommand(new CastlingCommand(castlings == CastlingResult.Big)); return; } default: break; } int randomMove = this.random.nextInt(moves.size()); this.commandExecutor.executeCommand(new MoveCommand(moves.get(randomMove))); } @Override protected void promote(Coordinate pawnCoords) { int promote = this.random.nextInt(PromoteType.values().length); this.commandExecutor.executeCommand(new PromoteCommand(PromoteType.values()[promote])); } }