@Override public List<Move> getLegalMoves(MachineState state, Role role) throws MoveDefinitionException { Set<GdlSentence> results = prover.askAll(ProverQueryBuilder.getLegalQuery(role), ProverQueryBuilder.getContext(state)); if (results.size() == 0) { throw new MoveDefinitionException(state, role); } return new ProverResultParser().toMoves(results); }
@Override public MachineState getNextState(MachineState state, List<Move> moves) throws TransitionDefinitionException { Set<GdlSentence> results = prover.askAll( ProverQueryBuilder.getNextQuery(), ProverQueryBuilder.getContext(state, getRoles(), moves)); for (GdlSentence sentence : results) { if (!sentence.isGround()) { throw new TransitionDefinitionException(state, moves); } } return new ProverResultParser().toState(results); }
@Override public int getGoal(MachineState state, Role role) throws GoalDefinitionException { Set<GdlSentence> results = prover.askAll(ProverQueryBuilder.getGoalQuery(role), ProverQueryBuilder.getContext(state)); if (results.size() != 1) { GamerLogger.logError( "StateMachine", "Got goal results of size: " + results.size() + " when expecting size one."); throw new GoalDefinitionException(state, role); } try { GdlRelation relation = (GdlRelation) results.iterator().next(); GdlConstant constant = (GdlConstant) relation.get(1); return Integer.parseInt(constant.toString()); } catch (Exception e) { throw new GoalDefinitionException(state, role); } }
private MachineState computeInitialState() { Set<GdlSentence> results = prover.askAll(ProverQueryBuilder.getInitQuery(), new HashSet<GdlSentence>()); return new ProverResultParser().toState(results); }
@Override public boolean isTerminal(MachineState state) { return prover.prove( ProverQueryBuilder.getTerminalQuery(), ProverQueryBuilder.getContext(state)); }