Skip to contentMethod: C4GSTKopplung(IC4MoveFactory)
      1: package de.fhdw.gaming.ipspiel23.c4.gststrategy;
2: 
3: import java.util.ArrayList;
4: import java.util.Collection;
5: import java.util.Optional;
6: 
7: import de.fhdw.gaming.core.domain.Move;
8: import de.fhdw.gaming.core.domain.PlayerState;
9: import de.fhdw.gaming.ipspiel23.c4.domain.IC4Player;
10: import de.fhdw.gaming.ipspiel23.c4.domain.IC4Position;
11: import de.fhdw.gaming.ipspiel23.c4.domain.IC4State;
12: import de.fhdw.gaming.ipspiel23.c4.moves.factory.IC4MoveFactory;
13: import de.fhdw.gaming.ipspiel23.gst.domain.IKopplung;
14: 
15: /**
16:  * The C4-GST-Kopplung.
17:  */
18: public class C4GSTKopplung implements IKopplung<IC4Player, IC4State> {
19: 
20:     
21:     /**
22:      * Eval Strategy-Pattern.
23:      */
24:     private final SimpleC4GSTEvaluation evaluationStrategy;
25:     
26:     
27:     
28:     /**
29:      * The Movefactory.
30:      */
31:     private final IC4MoveFactory moveFactory;
32: 
33:     /**
34:      * Ctr.
35:      * @param moveFactory
36:      */
37:     public C4GSTKopplung(final IC4MoveFactory moveFactory) {
38:         this.moveFactory = moveFactory;
39:         this.evaluationStrategy = new SimpleC4GSTEvaluation();
40:     }
41: 
42:     @Override
43:     public Optional<Collection<Move<IC4Player, IC4State>>> getPossibleMoves(final IC4State state) {
44: 
45:         // seems to work as intended
46:         final IC4Position[] positions = state.getBoard().getLegalPositions();
47: 
48:         final Collection<Move<IC4Player, IC4State>> possibleMoves = new ArrayList<>();
49: 
50:         for (final IC4Position position : positions) {
51:             possibleMoves.add(moveFactory.createMove(state.getCurrentPlayer(), position));
52:         }
53: 
54:         //
55:         return Optional.of(possibleMoves);
56:     }
57: 
58:     @Override
59:     public Optional<Integer> evalState(final IC4State state) {
60:        return Optional.of(evaluationStrategy.evalC4State(state));
61:     }
62: 
63:     @Override
64:     public Optional<IC4Player> getCurrentPlayer(final IC4State state) {
65:       return Optional.of(state.getCurrentPlayer());
66:     }
67: 
68:     @Override
69:     public Optional<Boolean> getIsGameOver(final IC4State state) {
70:         
71:         return Optional.of(state.getPlayers().values().stream()
72:                 .filter(p -> p.getState() == PlayerState.PLAYING)
73:                 .findAny()
74:                 .isEmpty()
75:                 );
76:         
77:         //return Optional.of(false);
78:         
79:         
80:         //return Optional.of(state.getPlayers().values()
81:         //        .stream()
82:         //        .filter(p -> p.getOutcome().get() > 0)
83:         //        .count() > 0);
84:         
85:         
86: 
87:     }
88: 
89: }