Exemplo n.º 1
0
def load_gapworld_game_and_level():
    with open(os.path.join(os.path.dirname(__file__), 'gapworld.txt')) as f:
        gamefile = f.read()
    with open(os.path.join(os.path.dirname(__file__), 'gapworld_lvl0.txt')) as f:
        levelfile = f.read()
    game = vgdl.VGDLParser().parse_game(gamefile)
    game.build_level(levelfile)
    return game
Exemplo n.º 2
0
    def loadGame(self, game_desc, level_desc, **kwargs):

        self.game_desc = game_desc
        self.level_desc = level_desc
        self.game_args.update(kwargs)

        # Need to build a sample level to get the available actions and screensize....
        domain = vgdl.VGDLParser().parse_game(self.game_desc, **self.game_args)
        self.game = domain.build_level(self.level_desc)

        self.score_last = self.game.score

        # Set action space and observation space
        self._action_set = OrderedDict(self.game.get_possible_actions())
        self.action_space = spaces.Discrete(len(self._action_set))

        self.screen_width, self.screen_height = self.game.screensize

        if self._obs_type == 'image':
            self.observation_space = spaces.Box(low=0,
                                                high=255,
                                                shape=(self.screen_height,
                                                       self.screen_width, 3))
        elif self._obs_type == 'objects':
            from .state import NotableSpritesObserver
            self.observer = NotableSpritesObserver(self.game,
                                                   self.notable_sprites)
            self.observation_space = list_space(
                spaces.Box(low=-100,
                           high=100,
                           shape=self.observer.observation_shape))
        elif self._obs_type == 'features':
            from .state import AvatarOrientedObserver
            self.observer = AvatarOrientedObserver(self.game)
            self.observation_space = spaces.Box(
                low=0, high=100, shape=self.observer.observation_shape)
        elif isinstance(self._obs_type, type) and issubclass(
                self._obs_type, StateObserver):
            self.observer = self._obs_type(self.game)
            # TODO vgdl.StateObserver should report some space
            self.observation_space = spaces.Box(
                low=0, high=100, shape=self.observer.observation_shape)
        else:
            raise Exception('Unknown obs_type `{}`'.format(self._obs_type))

        # For rendering purposes, will be initialised by first `render` call
        self.renderer = None