You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.6 KiB

  1. package de.fd.fh.server.game;
  2. import de.fd.fh.server.user.UserId;
  3. import lombok.RequiredArgsConstructor;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. @RequiredArgsConstructor
  8. public class GameService
  9. {
  10. private final GameRepository repository;
  11. public GameId createGame(final Game game)
  12. {
  13. return (GameId) repository.save(game).getId();
  14. }
  15. public GameId createGame(final UserId blackUser, final UserId whiteUser)
  16. {
  17. final Set<Field> fields = initFields(blackUser, whiteUser);
  18. final Game game = new Game(null, whiteUser, blackUser, whiteUser, fields, null);
  19. return (GameId) repository.save(game).getId();
  20. }
  21. public Game findGameById(final GameId gameId)
  22. {
  23. return repository.findByGameId(gameId);
  24. }
  25. public List<Game> findRunningGamesOfUser(final UserId userId)
  26. {
  27. return repository.findRunningGamesOfPlayer(userId);
  28. }
  29. private Set<Field> initFields(UserId blackUser, UserId whiteUser)
  30. {
  31. final Set<Field> fields = new HashSet<>();
  32. for (int x = 0; x < 8; x++)
  33. {
  34. for (int y = 0; y < 8; y++)
  35. {
  36. fields.add(new Field(x, y, getColor(x, y) , getFigure(x, y, whiteUser, blackUser)));
  37. }
  38. }
  39. return fields;
  40. }
  41. private Field.Color getColor(final int x, final int y)
  42. {
  43. return (x + y) % 2 != 1 ? Field.Color.WHITE : Field.Color.BLACK;
  44. }
  45. private Figure getFigure(final int x, final int y, final UserId whitePlayer, final UserId blackPlayer)
  46. {
  47. if (x == 0)
  48. {
  49. return getFigureOfGroundLevel(y, whitePlayer);
  50. }
  51. if (x == 1)
  52. {
  53. return new Figure(Figure.Type.PAWN, whitePlayer);
  54. }
  55. if (x == 7)
  56. {
  57. return getFigureOfGroundLevel(y, blackPlayer);
  58. }
  59. if (x == 6)
  60. {
  61. return new Figure(Figure.Type.PAWN, blackPlayer);
  62. }
  63. return null;
  64. }
  65. private Figure getFigureOfGroundLevel(final int y, final UserId player)
  66. {
  67. if (y == 0 || y == 7)
  68. {
  69. return new Figure(Figure.Type.ROOK, player);
  70. }
  71. if (y == 1 || y == 6)
  72. {
  73. return new Figure(Figure.Type.KNIGHT, player);
  74. }
  75. if (y == 2 || y == 5)
  76. {
  77. return new Figure(Figure.Type.BISHOP, player);
  78. }
  79. if (y == 3)
  80. {
  81. return new Figure(Figure.Type.QUEEN, player);
  82. }
  83. if (y == 4)
  84. {
  85. return new Figure(Figure.Type.KING, player);
  86. }
  87. return null;
  88. }
  89. }