Autopilot.java
package me.schawe.multijsnake.snake.ai;
import me.schawe.multijsnake.snake.GameState;
import me.schawe.multijsnake.snake.Move;
import me.schawe.multijsnake.snake.Snake;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public interface Autopilot {
String generateName();
Move suggest(GameState gameState, Snake snake);
default List<Move> possibleMoves(GameState gameState, Snake snake) {
Move[] allMoves = {Move.up, Move.down, Move.left, Move.right};
return Arrays.stream(allMoves)
.filter(move -> isSafeMove(gameState, snake, move))
.collect(Collectors.toList());
}
default boolean isSafeMove(GameState gameState, Snake snake, Move move) {
return !(
move.isOpposite(snake.getHeadDirection())
|| gameState.isOccupied(move.toCoord().add(snake.getHead()))
|| gameState.isWall(move.toCoord().add(snake.getHead()))
);
}
}