Skip to content

Package: DilemmaTwoTitsForTatStrategy

DilemmaTwoTitsForTatStrategy

nameinstructionbranchcomplexitylinemethod
DilemmaTwoTitsForTatStrategy(IDilemmaMoveFactory)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
computeNextMove(int, IDilemmaPlayer, IDilemmaState)
M: 0 C: 53
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
requestedMemoryCapacity()
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package de.fhdw.gaming.ipspiel23.dilemma.strategy.internals.two_tits_for_tat;
2:
3: import java.util.Optional;
4:
5: import de.fhdw.gaming.core.domain.GameException;
6: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaPlayer;
7: import de.fhdw.gaming.ipspiel23.dilemma.domain.IDilemmaState;
8: import de.fhdw.gaming.ipspiel23.dilemma.moves.IDilemmaMove;
9: import de.fhdw.gaming.ipspiel23.dilemma.moves.IDilemmaMoveFactory;
10: import de.fhdw.gaming.ipspiel23.dilemma.strategy.internals.DilemmaMemoryStrategy;
11: import de.fhdw.gaming.ipspiel23.dilemma.strategy.internals.DilemmaRoundData;
12: import de.fhdw.gaming.ipspiel23.memory.GameMemoryCapacity;
13: import de.fhdw.gaming.ipspiel23.memory.IGameMemory;
14: import de.fhdw.gaming.ipspiel23.memory.IGameMemoryCapacity;
15:
16: import static de.fhdw.gaming.ipspiel23.dilemma.domain.DilemmaAnswerType.DEFECT;
17: /**
18: * Defects twice after being defected against, otherwise cooperates.
19: */
20: public class DilemmaTwoTitsForTatStrategy extends DilemmaMemoryStrategy {
21:
22: /**
23: * Creates a new instance of the {@link DilemmaTwoTitsForTatStrategy} class.
24: * @param moveFactory the move factory to use.
25: */
26: protected DilemmaTwoTitsForTatStrategy(final IDilemmaMoveFactory moveFactory) {
27: super(moveFactory);
28: }
29:
30: @Override
31: public Optional<IDilemmaMove> computeNextMove(final int gameId, final IDilemmaPlayer player,
32: final IDilemmaState state)
33: throws GameException, InterruptedException {
34: final IGameMemory<DilemmaRoundData> memory = getMemoryForPlayer(player, state);
35: final IDilemmaMoveFactory moveFactory = getMoveFactory();
36: // cooperate on the first round ...
37:• if (memory.size() == 0) {
38: return Optional.of(moveFactory.createCooperateMove());
39: }
40: final DilemmaRoundData previousRound = memory.getRound(0, true);
41:
42: // ...and defects twice in a row if the opponent defects one.
43: // check if opponent defected at least once in the previous two rounds
44:• if (previousRound.forOpponentOf(player).answer().equals(DEFECT)
45:• || memory.size() > 1
46:• && memory.getRound(1, true).forOpponentOf(player).answer().equals(DEFECT)) {
47: return Optional.of(getMoveFactory().createDefectMove());
48: } else {
49: return Optional.of(getMoveFactory().createCooperateMove());
50: }
51:
52: }
53:
54: @Override
55: protected IGameMemoryCapacity requestedMemoryCapacity() {
56: return GameMemoryCapacity.of(2);
57: }
58: }