package de.fd.fh.server.game; import de.fd.fh.server.user.UserId; import lombok.RequiredArgsConstructor; import java.util.HashSet; import java.util.List; import java.util.Set; @RequiredArgsConstructor public class GameService { private final GameRepository repository; public GameId createGame(final Game game) { return (GameId) repository.save(game).getId(); } public GameId createGame(final UserId blackUser, final UserId whiteUser) { final Set fields = initFields(blackUser, whiteUser); final Game game = new Game(null, whiteUser, blackUser, whiteUser, fields, null); return (GameId) repository.save(game).getId(); } public Game findGameById(final GameId gameId) { return repository.findByGameId(gameId); } public List findRunningGamesOfUser(final UserId userId) { return repository.findRunningGamesOfPlayer(userId); } private Set initFields(UserId blackUser, UserId whiteUser) { final Set fields = new HashSet<>(); for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { fields.add(new Field(x, y, getColor(x, y) , getFigure(x, y, whiteUser, blackUser))); } } return fields; } private Field.Color getColor(final int x, final int y) { return (x + y) % 2 != 1 ? Field.Color.WHITE : Field.Color.BLACK; } private Figure getFigure(final int x, final int y, final UserId whitePlayer, final UserId blackPlayer) { if (x == 0) { return getFigureOfGroundLevel(y, whitePlayer); } if (x == 1) { return new Figure(Figure.Type.PAWN, whitePlayer); } if (x == 7) { return getFigureOfGroundLevel(y, blackPlayer); } if (x == 6) { return new Figure(Figure.Type.PAWN, blackPlayer); } return null; } private Figure getFigureOfGroundLevel(final int y, final UserId player) { if (y == 0 || y == 7) { return new Figure(Figure.Type.ROOK, player); } if (y == 1 || y == 6) { return new Figure(Figure.Type.KNIGHT, player); } if (y == 2 || y == 5) { return new Figure(Figure.Type.BISHOP, player); } if (y == 3) { return new Figure(Figure.Type.QUEEN, player); } if (y == 4) { return new Figure(Figure.Type.KING, player); } return null; } }