public boolean launchOneGame(boolean visualisation) {
    GameStateWritable state = new GameStateWritable(maze);
    Game game = new Game(state);

    ArrayList<Path> pacmans_paths = choosePaths();

    for (Path p : pacmans_paths) {
      System.out.println(p);
      game.addPacmanAgent(new Agent_FollowPath(p));
    }

    for (int i = 0; i < state.getNumberOfGhosts(); i++)
      game.addGhostAgent(new IntelligentGhost_Agent1());

    if (visualisation) {
      GamePanel panel = new GamePanel(state);
      game.addObserver(panel);
      JFrame frame = new JFrame("FrameDemo");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setPreferredSize(new Dimension(640, 480));
      frame.add(panel);
      frame.pack();
      frame.setVisible(true);
      GameState fstate = game.runUntilEnd(100);

      return (!fstate.isLose());
    } else {
      GameState fstate = game.runUntilEnd(0);
      return (!fstate.isLose());
    }
  }