Skip to content

Method: static {...}

1: package de.fhdw.gaming.ipspiel23.dilemma.domain.internals;
2:
3: import java.util.Map;
4: import java.util.Optional;
5: import java.util.Random;
6:
7: import de.fhdw.gaming.core.domain.DefaultGame;
8: import de.fhdw.gaming.core.domain.ObserverFactoryProvider;
9: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaGame;
10: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaMoveChecker;
11: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaPlayer;
12: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaState;
13: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaStrategy;
14: import de.fhdw.gaming.ipspiel23.dilemma.moves.IDilemmaMove;
15: import de.fhdw.gaming.ipspiel23.dilemma.moves.internals.DilemmaCooperateMove;
16: import de.fhdw.gaming.ipspiel23.dilemma.moves.internals.DilemmaDefectMove;
17:
18: /**
19: * Implements the Dilemma game.
20: */
21: public class DilemmaGame
22: extends DefaultGame<IDilemmaPlayer, IDilemmaState, IDilemmaMove, IDilemmaStrategy>
23: implements IDilemmaGame {
24:
25: /**
26: * yay it's your friendly neighborhood random number generator :).
27: */
28: private static final Random RANDOM = new Random();
29:
30: /**
31: * Creates a Dilemma game.
32: *
33: * @param id The ID of this game.
34: * @param initialState The initial state of the game.
35: * @param strategies The players' strategies.
36: * @param maxComputationTimePerMove The maximum computation time per move in seconds.
37: * @param moveChecker The move checker.
38: * @param observerFactoryProvider The {@link ObserverFactoryProvider}.
39: * @throws IllegalArgumentException if the player sets do not match.
40: * @throws InterruptedException if creating the game has been interrupted.
41: */
42: DilemmaGame(final int id, final IDilemmaState initialState, final Map<String, IDilemmaStrategy> strategies,
43: final long maxComputationTimePerMove, final IDilemmaMoveChecker moveChecker,
44: final ObserverFactoryProvider observerFactoryProvider)
45: throws IllegalArgumentException, InterruptedException {
46:
47: super(id, initialState, strategies, maxComputationTimePerMove, moveChecker, observerFactoryProvider);
48: }
49:
50: @Override
51: public Optional<IDilemmaMove> chooseRandomMove(final IDilemmaPlayer player, final IDilemmaState state) {
52: return Optional.of(RANDOM.nextBoolean()
53: ? new DilemmaDefectMove()
54: : new DilemmaCooperateMove());
55: }
56:
57: @Override
58: public String toString() {
59: return String.format("DilemmaGame[id=%d, %s]", this.getId(), this.gameToString());
60: }
61: }