62 lines
1.6 KiB
Java
62 lines
1.6 KiB
Java
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<Move> 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]));
|
|
}
|
|
|
|
}
|