diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/fr/umlv/java/wallj/context/Game.java | 66 |
1 files changed, 42 insertions, 24 deletions
diff --git a/src/main/java/fr/umlv/java/wallj/context/Game.java b/src/main/java/fr/umlv/java/wallj/context/Game.java index 7ddac02..c7dd6f1 100644 --- a/src/main/java/fr/umlv/java/wallj/context/Game.java +++ b/src/main/java/fr/umlv/java/wallj/context/Game.java | |||
@@ -1,66 +1,84 @@ | |||
1 | package fr.umlv.java.wallj.context; | 1 | package fr.umlv.java.wallj.context; |
2 | 2 | ||
3 | import fr.umlv.java.wallj.board.Board; | 3 | import fr.umlv.java.wallj.board.Board; |
4 | import fr.umlv.java.wallj.controller.Controller; | ||
4 | import fr.umlv.java.wallj.controller.GameController; | 5 | import fr.umlv.java.wallj.controller.GameController; |
6 | import fr.umlv.java.wallj.event.Event; | ||
7 | import fr.umlv.java.wallj.model.Stage; | ||
5 | 8 | ||
6 | import java.util.Collections; | 9 | import java.util.*; |
7 | import java.util.List; | ||
8 | import java.util.NoSuchElementException; | ||
9 | import java.util.Objects; | ||
10 | 10 | ||
11 | /** | 11 | /** |
12 | * A game. | 12 | * A game. |
13 | * | ||
13 | * @author Adam NAILI | 14 | * @author Adam NAILI |
14 | */ | 15 | */ |
15 | public final class Game { | 16 | public final class Game { |
16 | //TODO | 17 | private Stage currentStage; |
17 | private final GameController gameController; | 18 | private final List<Controller> controllers; |
18 | private int indexBoard; | 19 | private int indexBoard; |
19 | private final List<Board> boards; | 20 | private final List<Board> boards; |
20 | 21 | ||
21 | /** | 22 | /** |
22 | * @param gameController the controller of the game | 23 | * @param boards the list of boards charged for the game |
23 | * @param boards the list of boards charged for the game | ||
24 | */ | 24 | */ |
25 | public Game(GameController gameController, List<Board> boards) { | 25 | public Game(List<Board> boards) { |
26 | this.gameController = Objects.requireNonNull(gameController); | 26 | this.controllers = new LinkedList<>(); |
27 | this.controllers.add(new GameController()); | ||
27 | Objects.requireNonNull(boards); | 28 | Objects.requireNonNull(boards); |
28 | if (boards.isEmpty()) { | 29 | if (boards.isEmpty()) { |
29 | throw new IllegalArgumentException("The list of boards is empty, not able to create a correct game from this."); | 30 | throw new IllegalArgumentException("The list of boards is empty, not able to create a correct game from this."); |
30 | } | 31 | } |
31 | this.boards = Collections.unmodifiableList(boards); | 32 | this.boards = Collections.unmodifiableList(boards); |
32 | this.indexBoard = 0; | 33 | this.indexBoard = 0; |
34 | this.currentStage = new Stage(this.boards.get(0)); | ||
33 | } | 35 | } |
34 | 36 | ||
35 | /** | 37 | /** |
36 | * @return the game controller | 38 | * @return a boolean on the condition of having a next Board in our game. |
37 | */ | 39 | */ |
38 | public GameController getGameController() { | 40 | public boolean hasNextBoard() { |
39 | return gameController; | 41 | return indexBoard + 1 < boards.size(); |
40 | } | 42 | } |
41 | 43 | ||
42 | /** | 44 | /** |
43 | * @return the current board of the game. | 45 | * @return the next board |
44 | */ | 46 | */ |
45 | public Board getCurrentBoard() { | 47 | private Board nextBoard() { |
48 | if (!hasNextBoard()) { | ||
49 | throw new IllegalStateException("No more board for the game."); | ||
50 | } | ||
51 | indexBoard++; | ||
46 | return boards.get(indexBoard); | 52 | return boards.get(indexBoard); |
47 | } | 53 | } |
48 | 54 | ||
49 | /** | 55 | /** |
50 | * @return a boolean on the condition of having a next Board in our game. | 56 | * @return the current stage |
51 | */ | 57 | */ |
52 | public boolean hasNextBoard() { | 58 | public Stage getCurrentStage() { |
53 | return indexBoard + 1 < boards.size(); | 59 | return currentStage; |
60 | } | ||
61 | |||
62 | public void nextStage() { | ||
63 | if (hasNextBoard()) { | ||
64 | currentStage = new Stage(nextBoard()); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | public void retryStage() { | ||
69 | currentStage = new Stage(currentStage.getCurrentBoard()); | ||
54 | } | 70 | } |
55 | 71 | ||
56 | /** | 72 | /** |
57 | * @return the next board | 73 | * @param context the current context |
74 | * @return a list of new events | ||
58 | */ | 75 | */ |
59 | public Board nextBoard() { | 76 | public List<Event> update(Context context) { |
60 | if (indexBoard >= boards.size()) { | 77 | LinkedList<Event> events = new LinkedList<>(); |
61 | throw new NoSuchElementException("No more board for the game."); | 78 | for (Controller controller : controllers) { |
79 | events.addAll(controller.update(context)); | ||
62 | } | 80 | } |
63 | indexBoard++; | 81 | events.addAll(currentStage.update(context)); |
64 | return boards.get(indexBoard); | 82 | return events; |
65 | } | 83 | } |
66 | } | 84 | } |