diff options
-rw-r--r-- | src/ch/epfl/xblast/server/debug/RandomEventGenerator.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/ch/epfl/xblast/server/debug/RandomEventGenerator.java b/src/ch/epfl/xblast/server/debug/RandomEventGenerator.java new file mode 100644 index 0000000..60a9c62 --- /dev/null +++ b/src/ch/epfl/xblast/server/debug/RandomEventGenerator.java | |||
@@ -0,0 +1,50 @@ | |||
1 | package ch.epfl.xblast.server.debug; | ||
2 | |||
3 | import ch.epfl.xblast.Direction; | ||
4 | import ch.epfl.xblast.PlayerID; | ||
5 | |||
6 | import java.util.*; | ||
7 | |||
8 | /** | ||
9 | * Random event generator debugging utility. | ||
10 | * | ||
11 | * @author EPFL | ||
12 | */ | ||
13 | public final class RandomEventGenerator { | ||
14 | |||
15 | private static final List<Optional<Direction>> possibleSpeeds = | ||
16 | Arrays.asList( | ||
17 | Optional.empty(), | ||
18 | Optional.of(Direction.N), | ||
19 | Optional.of(Direction.E), | ||
20 | Optional.of(Direction.S), | ||
21 | Optional.of(Direction.W)); | ||
22 | |||
23 | private final Random rng; | ||
24 | private final int speedChangeProb, bombProb; | ||
25 | |||
26 | public RandomEventGenerator(long seed, int speedChangeProb, int bombProb) { | ||
27 | this.rng = new Random(seed); | ||
28 | this.speedChangeProb = speedChangeProb; | ||
29 | this.bombProb = bombProb; | ||
30 | } | ||
31 | |||
32 | public Map<PlayerID, Optional<Direction>> randomSpeedChangeEvents() { | ||
33 | Map<PlayerID, Optional<Direction>> events = new EnumMap<>(PlayerID.class); | ||
34 | for (PlayerID pId : PlayerID.values()) { | ||
35 | if (rng.nextInt(speedChangeProb) == 0) | ||
36 | events.put(pId, possibleSpeeds.get(rng.nextInt(possibleSpeeds.size()))); | ||
37 | } | ||
38 | return Collections.unmodifiableMap(events); | ||
39 | } | ||
40 | |||
41 | public Set<PlayerID> randomBombDropEvents() { | ||
42 | Set<PlayerID> events = EnumSet.noneOf(PlayerID.class); | ||
43 | for (PlayerID pID : PlayerID.values()) { | ||
44 | if (rng.nextInt(bombProb) == 0) | ||
45 | events.add(pID); | ||
46 | } | ||
47 | return Collections.unmodifiableSet(events); | ||
48 | } | ||
49 | |||
50 | } | ||