public class PacmanSimulator {

    private PacmanState state;
    private PacmanVisualizer pv;
    private Pacman pacman;
    private int refreshPeriod;

    public PacmanSimulator(PacmanState pacmanState, Pacman pacman, int refreshPeriod) {
        state = pacmanState;
        this.pv = new PacmanVisualizer(state.getHeight(), state.getWidth());
        this.refreshPeriod = refreshPeriod;
        this.pacman = pacman;
    }

    public void gameLoop(){
        while(true){
            long startTime = System.currentTimeMillis();
            Position nextPos = pacman.chooseAction(state);
            state = state.move(nextPos);
            this.pv.update(state);
            if (state.isFinalState()) break;
            while (this.refreshPeriod - (System.currentTimeMillis() - startTime) > 0);
        }
        System.out.println("Score: " + state.getScore());
    }

}