diff options
Diffstat (limited to 'src/ch')
-rw-r--r-- | src/ch/epfl/xblast/server/Bomb.java | 19 | ||||
-rw-r--r-- | src/ch/epfl/xblast/server/Player.java | 22 |
2 files changed, 25 insertions, 16 deletions
diff --git a/src/ch/epfl/xblast/server/Bomb.java b/src/ch/epfl/xblast/server/Bomb.java index c1a6b12..dd26ddd 100644 --- a/src/ch/epfl/xblast/server/Bomb.java +++ b/src/ch/epfl/xblast/server/Bomb.java | |||
@@ -22,6 +22,17 @@ public final class Bomb { | |||
22 | 22 | ||
23 | private static final UnaryOperator<Integer> FUSE_STEP_FUNCTION = fl -> fl - 1; | 23 | private static final UnaryOperator<Integer> FUSE_STEP_FUNCTION = fl -> fl - 1; |
24 | 24 | ||
25 | /** | ||
26 | * Builds and returns a new fuse sequence of given length. | ||
27 | * | ||
28 | * @param fuseLength the fuse length | ||
29 | * @return the fuse sequence | ||
30 | */ | ||
31 | private static Sq<Integer> buildFuseSequence(int fuseLength) { | ||
32 | int fl = ArgumentChecker.requireNonNegative(fuseLength); | ||
33 | return Sq.iterate(fl, Bomb.FUSE_STEP_FUNCTION).limit(fl); | ||
34 | } | ||
35 | |||
25 | private PlayerID ownerId; | 36 | private PlayerID ownerId; |
26 | private Cell position; | 37 | private Cell position; |
27 | private Sq<Integer> fuseLengths; | 38 | private Sq<Integer> fuseLengths; |
@@ -49,11 +60,7 @@ public final class Bomb { | |||
49 | public Bomb(PlayerID ownerId, Cell position, Sq<Integer> fuseLengths, int range) { | 60 | public Bomb(PlayerID ownerId, Cell position, Sq<Integer> fuseLengths, int range) { |
50 | this.ownerId = Objects.requireNonNull(ownerId); | 61 | this.ownerId = Objects.requireNonNull(ownerId); |
51 | this.position = Objects.requireNonNull(position); | 62 | this.position = Objects.requireNonNull(position); |
52 | 63 | this.fuseLengths = ArgumentChecker.requireNonEmpty(fuseLengths); | |
53 | this.fuseLengths = Objects.requireNonNull(fuseLengths); | ||
54 | if (this.fuseLengths.isEmpty()) | ||
55 | throw new IllegalArgumentException(); | ||
56 | |||
57 | this.range = ArgumentChecker.requireNonNegative(range); | 64 | this.range = ArgumentChecker.requireNonNegative(range); |
58 | } | 65 | } |
59 | 66 | ||
@@ -68,7 +75,7 @@ public final class Bomb { | |||
68 | * @throws NullPointerException if ownerId, position or fuseLengths is null | 75 | * @throws NullPointerException if ownerId, position or fuseLengths is null |
69 | */ | 76 | */ |
70 | public Bomb(PlayerID ownerId, Cell position, int fuseLength, int range) { | 77 | public Bomb(PlayerID ownerId, Cell position, int fuseLength, int range) { |
71 | this(ownerId, position, Sq.iterate(fuseLength, Bomb.FUSE_STEP_FUNCTION), range); | 78 | this(ownerId, position, Bomb.buildFuseSequence(fuseLength), range); |
72 | } | 79 | } |
73 | 80 | ||
74 | /** | 81 | /** |
diff --git a/src/ch/epfl/xblast/server/Player.java b/src/ch/epfl/xblast/server/Player.java index afff209..e8f3145 100644 --- a/src/ch/epfl/xblast/server/Player.java +++ b/src/ch/epfl/xblast/server/Player.java | |||
@@ -40,7 +40,7 @@ public final class Player { | |||
40 | */ | 40 | */ |
41 | public LifeState(int lives, State state) { | 41 | public LifeState(int lives, State state) { |
42 | this.lives = ArgumentChecker.requireNonNegative(lives); | 42 | this.lives = ArgumentChecker.requireNonNegative(lives); |
43 | this.state = state; | 43 | this.state = Objects.requireNonNull(state); |
44 | } | 44 | } |
45 | 45 | ||
46 | /** | 46 | /** |
@@ -166,16 +166,18 @@ public final class Player { | |||
166 | * @return the sequence | 166 | * @return the sequence |
167 | */ | 167 | */ |
168 | private static Sq<LifeState> buildDefaultLifeStateSequence(int lives) { | 168 | private static Sq<LifeState> buildDefaultLifeStateSequence(int lives) { |
169 | LifeState invulnerability = new LifeState( | 169 | int l = ArgumentChecker.requireNonNegative(lives); |
170 | ArgumentChecker.requireNonNegative(lives), | 170 | |
171 | LifeState.State.INVULNERABLE | 171 | switch (l) { |
172 | ); | 172 | case 0: |
173 | LifeState vulnerability = new LifeState( | 173 | return Sq.constant(new LifeState(l, LifeState.State.DEAD)); |
174 | ArgumentChecker.requireNonNegative(lives), | ||
175 | LifeState.State.VULNERABLE | ||
176 | ); | ||
177 | 174 | ||
178 | return Sq.repeat(Ticks.PLAYER_INVULNERABLE_TICKS, invulnerability).concat(Sq.constant(vulnerability)); | 175 | default: |
176 | LifeState invulnerability = new LifeState(l, LifeState.State.INVULNERABLE); | ||
177 | LifeState vulnerability = new LifeState(l, LifeState.State.VULNERABLE); | ||
178 | return Sq.repeat(Ticks.PLAYER_INVULNERABLE_TICKS, invulnerability).concat(Sq.constant(vulnerability)); | ||
179 | |||
180 | } | ||
179 | } | 181 | } |
180 | 182 | ||
181 | /** | 183 | /** |