Skip to content

Method: GDGameImpl(int, GDState, Map, long, GDMoveChecker, ObserverFactoryProvider)

1: package de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.impl;
2:
3: import java.util.Map;
4: import java.util.Optional;
5:
6: import de.fhdw.gaming.core.domain.DefaultGame;
7: import de.fhdw.gaming.core.domain.ObserverFactoryProvider;
8: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.GDGame;
9: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.GDMoveChecker;
10: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.GDPlayer;
11: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.GDState;
12: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.domain.GDStrategy;
13: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.moves.GDMove;
14: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.moves.factory.GDMoveFactory;
15: import de.fhdw.gaming.ipspiel22.gefangenenDilemma.moves.impl.GDDefaultMoveFactory;
16:
17: /**
18: * Implements the Gefangenen Dilemma game.
19: */
20: public class GDGameImpl extends DefaultGame<GDPlayer, GDState, GDMove, GDStrategy> implements GDGame {
21:
22: /**
23: * The move factory.
24: */
25: private final GDMoveFactory moveFactory;
26:
27: /**
28: * Creates a Gefangenen Dilemma game.
29: *
30: * @param id The ID of this game.
31: * @param initialState The initial state of the game.
32: * @param strategies The players' strategies.
33: * @param maxComputationTimePerMove The maximum computation time per move in seconds.
34: * @param moveChecker The move checker.
35: * @param observerFactoryProvider The {@link ObserverFactoryProvider}.
36: * @throws IllegalArgumentException if the player sets do not match.
37: * @throws InterruptedException if creating the game has been interrupted.
38: */
39: GDGameImpl(final int id, final GDState initialState, final Map<String, GDStrategy> strategies,
40: final long maxComputationTimePerMove, final GDMoveChecker moveChecker,
41: final ObserverFactoryProvider observerFactoryProvider)
42: throws IllegalArgumentException, InterruptedException {
43:
44: super(id, initialState, strategies, maxComputationTimePerMove, moveChecker, observerFactoryProvider);
45: this.moveFactory = new GDDefaultMoveFactory();
46: }
47:
48: @Override
49: public Optional<GDMove> chooseRandomMove(final GDPlayer player, final GDState state) {
50: // choose "statement" to punish lame strategies
51: return Optional.of(this.moveFactory.createStatementMove());
52: }
53:
54: @Override
55: public String toString() {
56: return String.format("GDGame[id=%d, %s]", this.getId(), this.gameToString());
57: }
58: }