aboutsummaryrefslogtreecommitdiff
path: root/src/ch/epfl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ch/epfl')
-rw-r--r--src/ch/epfl/xblast/server/GameState.java108
1 files changed, 101 insertions, 7 deletions
diff --git a/src/ch/epfl/xblast/server/GameState.java b/src/ch/epfl/xblast/server/GameState.java
index 625767a..685bc54 100644
--- a/src/ch/epfl/xblast/server/GameState.java
+++ b/src/ch/epfl/xblast/server/GameState.java
@@ -2,10 +2,18 @@ package ch.epfl.xblast.server;
2 2
3import java.util.List; 3import java.util.List;
4import java.util.Optional; 4import java.util.Optional;
5import java.util.Objects;
6import java.util.ArrayList;
7import java.util.Optional;
5import ch.epfl.xblast.*; 8import ch.epfl.xblast.*;
6import ch.epfl.cs108.Sq; 9import ch.epfl.cs108.Sq;
7 10
11/**
12 * @author Timothée FLOURE (257420)
13 */
14
8public final class GameState { 15public final class GameState {
16
9 private final int ticks; 17 private final int ticks;
10 private final Board board; 18 private final Board board;
11 private final List<Player> players; 19 private final List<Player> players;
@@ -13,37 +21,123 @@ public final class GameState {
13 private final List<Sq<Sq<Cell>>> explosions; 21 private final List<Sq<Sq<Cell>>> explosions;
14 private final List<Sq<Cell>> blasts; 22 private final List<Sq<Cell>> blasts;
15 23
24 /**
25 * Instanciates a new GameState.
26 *
27 * @param ticks thie tick corresponding to the state
28 * @param board the board
29 * @param players list of the players
30 * @param bombs list of the bombs
31 * @param explosions list of the explosions
32 * @param blasts
33 * @throws IllegalArguementException if ticks is negative or players does not contains 4 players.
34 * @throws NullPointerException if any element except ticks is null.
35 */
16 public GameState(int ticks, Board board, List<Player> players, List<Bomb> bombs, List<Sq<Sq<Cell>>> explosions, List<Sq<Cell>> blasts) { 36 public GameState(int ticks, Board board, List<Player> players, List<Bomb> bombs, List<Sq<Sq<Cell>>> explosions, List<Sq<Cell>> blasts) {
37 this.ticks = ArgumentChecker.requireNonNegative(ticks);
38 this.board = Objects.requireNonNull(board);
39 if (players.size() == 4) {
40 this.players = players;
41 } else {
42 throw new IllegalArgumentException();
43 }
44 this.bombs = Objects.requireNonNull(bombs);
45 this.explosions = Objects.requireNonNull(explosions);
46 this.blasts = Objects.requireNonNull(blasts);
17 } 47 }
18 48
49 /**
50 * Instanciates a new (clean) GameState.
51 *
52 * @param board the board
53 * @param players list of the players
54 */
19 public GameState(Board board, List<Player> players) { 55 public GameState(Board board, List<Player> players) {
56 this(0,
57 board,
58 players,
59 new ArrayList<Bomb>(),
60 new ArrayList<Sq<Sq<Cell>>>(),
61 new ArrayList<Sq<Cell>>()
62 );
63
20 } 64 }
21 65
66 /**
67 * @return the tick related to the state.
68 */
22 public int ticks() { 69 public int ticks() {
23 return 0; 70 return ticks;
24 } 71 }
25 72
73 /**
74 * Returns T(the game is over)
75 *
76 * @return true if all the players are dead or if the game reachead the time limit
77 */
26 public boolean isGameOver() { 78 public boolean isGameOver() {
27 return false; 79 int alivePlayerCount = 0;
80 for (Player player : players) {
81 if (player.isAlive()) {alivePlayerCount += 1;}
82 }
83 if (alivePlayerCount == 0 || this.ticks >= Ticks.TOTAL_TICKS) {
84 return true;
85 } else {
86 return false;
87 }
28 } 88 }
29 89
90 /**
91 * Return the remaining time.
92 *
93 * @return the ramaining game time (in seconds)
94 */
30 public double remainingTime() { 95 public double remainingTime() {
31 return 0; 96 return (double) (Ticks.TOTAL_TICKS - this.ticks) / Ticks.TICKS_PER_SECOND;
32 } 97 }
33 98
99 /**
100 * Returns the winner of the game.
101 *
102 * @return the ID of the player who winned the game.
103 */
34 public Optional<PlayerID> winner() { 104 public Optional<PlayerID> winner() {
35 return null; 105 if (players.size() == 1 && this.ticks < Ticks.TOTAL_TICKS) {
106 PlayerID winnerId = players.get(0).id();
107 return Optional.of(winnerId);
108 } else {
109 return Optional.empty();
110 }
36 } 111 }
37 112
113 /**
114 * @return the game board
115 */
38 public Board board() { 116 public Board board() {
39 return null; 117 return this.board;
40 } 118 }
41 119
120 /**
121 * @return the players
122 */
42 public List<Player> players() { 123 public List<Player> players() {
43 return null; 124 return this.players;
44 } 125 }
45 126
127 /**
128 * Returns the alive players.
129 *
130 * @return a list of the alive players
131 */
46 public List<Player> alivePlayers() { 132 public List<Player> alivePlayers() {
47 return null; 133 List<Player> alivePlayers = new ArrayList<>();
134
135 for (Player player : players) {
136 if (player.isAlive()) {
137 alivePlayers.add(player);
138 }
139 }
140
141 return alivePlayers;
48 } 142 }
49} 143}