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.

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