def __init__(self, dir, game, max=max): super().__init__(dir, game, max=max) size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1])
class ProgressivePCGSelector(LevelSelector): ''' TODO: Shared object across workers. ''' def __init__(self, dir, game, alpha=0.01, upper_limit=True, max=max): super().__init__(dir, game, max=max) size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1]) self.difficulty = 0 self.alpha = alpha self.upper_limit = upper_limit def get_level(self): if not self.upper_limit: return self.generator.generate([self.difficulty], difficulty=True) dif = random.uniform(0.0, self.difficulty) return self.generator.generate([dif], difficulty=True) def report(self, level_id, win): if win: self.difficulty = min(1.0, self.difficulty + self.alpha) else: self.difficulty = max(0.0, self.difficulty - self.alpha) def get_info(self): return str(self.difficulty)
def __init__(self, dir, game, alpha=0.01, upper_limit=True, max=max): super().__init__(dir, game, max=max) size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1]) self.difficulty = 0 self.alpha = alpha self.upper_limit = upper_limit
def __init__(self, dir, game, difficulty, fixed=False, max=max): super().__init__(dir, game, max=max) self.difficulty = difficulty self.fixed = fixed size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1]) self.last_level = None
class RandomPCGSelector(LevelSelector): def __init__(self, dir, game, max=max): super().__init__(dir, game, max=max) size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1]) def get_level(self): return self.generator.generate() def report(self, level_id, win): pass def get_info(self): return ""
class RandomWithDifPCGSelector(LevelSelector): def __init__(self, dir, game, difficulty, fixed=False, max=max): super().__init__(dir, game, max=max) self.difficulty = difficulty self.fixed = fixed size = game_sizes[game] self.generator = ParamGenerator(self.dir, self.game, width=size[0], height=size[1]) self.last_level = None def get_level(self): if self.fixed and self.last_level is not None: return self.last_level self.last_level = self.generator.generate([self.difficulty], difficulty=True) return self.last_level def report(self, level_id, win): pass def get_info(self): return ""
from level_generator import ParamGenerator game_sizes = { "zelda": [13, 9], "boulderdash": [26, 13], "frogs": [28, 11], "solarfox": [10, 11] } game = "boulderdash" for game in game_sizes: for d in [0, 2.5, 7.5]: gen = ParamGenerator("./data/test-levels/{}/{}/".format(game, d), game, game_sizes[game][0], game_sizes[game][1]) for i in range(1): level = gen.generate([(d / 10.0)], difficulty=True) #print(level) print("Done")