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
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