package de.tu_dresden.inf.ggp06_2.strategies;
import java.util.Random;
import de.tu_dresden.inf.ggp06_2.resolver.Atom;
import de.tu_dresden.inf.ggp06_2.resolver.Expression;
import de.tu_dresden.inf.ggp06_2.resolver.structures.GameNode;
import de.tu_dresden.inf.ggp06_2.simulator.Game;
import de.tu_dresden.inf.ggp06_2.simulator.flags.TimerFlag;
public abstract class AbstractStrategy {
protected final Game game;
protected final Atom role;
protected final Atom[] otherRoles;
protected TimerFlag timerFlag;
protected Random random = new Random();
public AbstractStrategy (Game newGame, String currentRole) {
game = newGame;
role = new Atom( currentRole );
otherRoles = new Atom[game.getRoleNames().size() - 1];
int i = 0;
for ( Atom otherRole : game.getRoleNames() )
if ( !otherRole.equals(role) )
otherRoles[i++] = otherRole;
}
public AbstractStrategy(Game newGame, String currentRole, TimerFlag flag) {
this(newGame, currentRole);
timerFlag = flag;
}
abstract public Expression pickMove(GameNode state);
public final Game getGame() {
return game;
}
public final void setTimerFlag(TimerFlag flag) {
timerFlag = flag;
}
public final TimerFlag getTimerFlag() {
return timerFlag;
}
}