def main(args): game = pyBaba.Game(args.map_path) action_logs = load_action_logs() images = [] action_logs = [action_logs[0] for _ in range(2)] for epoch, actions in enumerate(action_logs): game = pyBaba.Game(args.map_path) images += play(game, actions, epoch) save_as_animation(images, 'stage.gif')
def test_game_sink(): game = pyBaba.Game("Resources/Maps/out_of_reach.txt") assert game.GetMap().At(9, 3).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetRuleManager().GetNumRules() == 5 assert game.GetPlayerIcon() == pyBaba.ObjectType.ICON_BABA game.MovePlayer(pyBaba.Direction.UP) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.DOWN) game.MovePlayer(pyBaba.Direction.LEFT) game.MovePlayer(pyBaba.Direction.LEFT) game.MovePlayer(pyBaba.Direction.UP) game.MovePlayer(pyBaba.Direction.LEFT) game.MovePlayer(pyBaba.Direction.DOWN) game.MovePlayer(pyBaba.Direction.DOWN) game.MovePlayer(pyBaba.Direction.DOWN) assert game.GetMap().At(10, 5).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(10, 6).HasType(pyBaba.ObjectType.ICON_ROCK) game.MovePlayer(pyBaba.Direction.DOWN) assert game.GetMap().At(10, 6).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(10, 7).HasType( pyBaba.ObjectType.ICON_ROCK) is False game.MovePlayer(pyBaba.Direction.DOWN) assert game.GetPlayState() == pyBaba.PlayState.LOST
def test_game_lost(): game = pyBaba.Game("Resources/Maps/simple_map.txt") assert game.GetMap().At(0, 2).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetRuleManager().GetNumRules() == 1 assert game.GetPlayState() == pyBaba.PlayState.PLAYING game.MovePlayer(pyBaba.Direction.UP) assert game.GetRuleManager().GetNumRules() == 0 assert game.GetPlayState() == pyBaba.PlayState.LOST
def __init__(self, enable_render=True): super(BabaEnv, self).__init__() self.path = '../../../Resources/Maps/volcano.txt' self.game = pyBaba.Game(self.path) self.renderer = rendering.Renderer(self.game) self.action_space = [ pyBaba.Direction.UP, pyBaba.Direction.DOWN, pyBaba.Direction.LEFT, pyBaba.Direction.RIGHT ] self.action_size = len(self.action_space) self.seed() self.reset()
def reset(self): self.game = pyBaba.Game(self.width, self.height) self.done = False self.game.Put(2, 1).SetType(pyBaba.ObjectType.BABA).SetText(True) self.game.Put(3, 1).SetType(pyBaba.ObjectType.IS) self.game.Put(4, 1).SetType(pyBaba.ObjectType.YOU) self.game.Put(1, 6).SetType(pyBaba.ObjectType.BABA) self.game.Put(7, 3).SetType(pyBaba.ObjectType.FLAG).SetText(True) self.game.Put(9, 5).SetType(pyBaba.ObjectType.WIN) self.game.Put(8, 6).SetType(pyBaba.ObjectType.FLAG) return self._get_obs()
def test_game_basic(): game = pyBaba.Game("Resources/Maps/baba_is_you.txt") assert game.GetMap().At(1, 4).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(9, 4).HasType(pyBaba.ObjectType.ICON_FLAG) assert game.GetRuleManager().GetNumRules() == 4 assert game.GetPlayerIcon() == pyBaba.ObjectType.ICON_BABA pos = game.GetMap().GetPositions(game.GetPlayerIcon()) assert len(pos) == 1 assert pos[0][0] == 1 assert pos[0][1] == 4 game.MovePlayer(pyBaba.Direction.UP) assert game.GetMap().At(1, 3).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(1, 4).HasType(pyBaba.ObjectType.ICON_EMPTY) game.MovePlayer(pyBaba.Direction.UP) assert game.GetMap().At(1, 3).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(1, 2).HasType(pyBaba.ObjectType.ICON_WALL) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) assert game.GetMap().At(4, 3).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(3, 3).HasType(pyBaba.ObjectType.ICON_TILE) game.MovePlayer(pyBaba.Direction.RIGHT) assert game.GetMap().At(5, 3).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(6, 3).HasType(pyBaba.ObjectType.ICON_ROCK) assert game.GetMap().At(4, 3).HasType(pyBaba.ObjectType.ICON_TILE) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.DOWN) assert game.GetPlayState() == pyBaba.PlayState.PLAYING game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) game.MovePlayer(pyBaba.Direction.RIGHT) assert game.GetPlayState() == pyBaba.PlayState.WON game.Reset() assert game.GetMap().At(1, 4).HasType(pyBaba.ObjectType.ICON_BABA) assert game.GetMap().At(9, 4).HasType(pyBaba.ObjectType.ICON_FLAG) assert game.GetRuleManager().GetNumRules() == 4 assert game.GetPlayerIcon() == pyBaba.ObjectType.ICON_BABA assert game.GetPlayState() == pyBaba.PlayState.PLAYING
def __init__(self, map_path="baba-is-auto/Resources/Maps/baba_is_you.txt", enable_render=True): super(BabaEnv, self).__init__() self.path = map_path _map = open(self.path) self.W, self.H = [int(x) for x in _map.readline().strip().split()] self.ids = np.array([l.strip().split() for l in _map]) _map.close() self.game = pyBaba.Game(self.path) self.renderer = rendering.Renderer(self.game, enable_render=enable_render) self.action_space = [ pyBaba.Direction.UP, pyBaba.Direction.DOWN, pyBaba.Direction.LEFT, pyBaba.Direction.RIGHT ] self.action_size = len(self.action_space) self.seed() self.reset()
import pygame import pyBaba import config import sys import sprites game = pyBaba.Game("../../Resources/Maps/BabaIsYou.txt") screen_size = (game.GetMap().GetWidth() * config.BLOCK_SIZE, game.GetMap().GetHeight() * config.BLOCK_SIZE) screen = pygame.display.set_mode((screen_size[0], screen_size[1]), pygame.DOUBLEBUF) sprite_loader = sprites.SpriteLoader() result_image = sprites.ResultImage() result_image_group = pygame.sprite.Group() result_image_group.add(result_image) def draw_obj(x_pos, y_pos): objects = game.GetMap().At(x_pos, y_pos) for obj_type in objects.GetTypes(): if pyBaba.IsTextType(obj_type): obj_image = sprite_loader.text_images[obj_type] else: if obj_type == pyBaba.ObjectType.ICON_EMPTY: continue obj_image = sprite_loader.icon_images[obj_type] obj_image.render( screen, (x_pos * config.BLOCK_SIZE, y_pos * config.BLOCK_SIZE))
pyBaba.ObjectType.FLAG: 'FLAG', pyBaba.ObjectType.WIN: 'WIN', pyBaba.ObjectType.WALL: 'WALL', pyBaba.ObjectType.STOP: 'STOP', pyBaba.ObjectType.ROCK: 'ROCK', pyBaba.ObjectType.PUSH: 'PUSH', pyBaba.ObjectType.WATER: 'WATER', pyBaba.ObjectType.SINK: 'SINK', pyBaba.ObjectType.LAVA: 'LAVA', pyBaba.ObjectType.MELT: 'MELT', pyBaba.ObjectType.HOT: 'HOT', pyBaba.ObjectType.SKULL: 'SKULL', pyBaba.ObjectType.DEFEAT: 'DEFEAT' } game = pyBaba.Game("../../Resources/Maps/off_limits_bug.txt") screen_size = (game.GetMap().GetWidth() * config.BLOCK_SIZE, game.GetMap().GetHeight() * config.BLOCK_SIZE) screen = pygame.display.set_mode((screen_size[0], screen_size[1]), pygame.DOUBLEBUF) map_sprite_group = pygame.sprite.Group() result_image = sprites.ResultImage() result_image_group = pygame.sprite.Group() result_image_group.add(result_image) def draw_obj(x_pos, y_pos): objects = game.GetMap().At(x_pos, y_pos) is_icon = False
import pyBaba game = pyBaba.Game(10, 10) def setGame(game_): game_.Put(2, 1).SetType(pyBaba.ObjectType.BABA).SetText(True) game_.Put(3, 1).SetType(pyBaba.ObjectType.IS) game_.Put(4, 1).SetType(pyBaba.ObjectType.YOU) game_.Put(1, 4).SetType(pyBaba.ObjectType.BABA) game_.Put(7, 5).SetType(pyBaba.ObjectType.FLAG).SetText(True) game_.Put(7, 6).SetType(pyBaba.ObjectType.IS) game_.Put(7, 7).SetType(pyBaba.ObjectType.WIN) game_.Put(8, 6).SetType(pyBaba.ObjectType.FLAG)
def main(args): game = pyBaba.Game(args.map_path) renderer = Renderer(game) clock = pygame.time.Clock() pygame.time.set_timer(pygame.USEREVENT, 100) game_over = False time_step = 0 while True: if game_over: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() renderer.render(game.GetMap(), text='Step %d, (KEY: SPACE + UDLR)' % time_step) time.sleep(0.75) renderer.show_result() pygame.display.flip() time.sleep(0.5) pygame.quit() sys.exit() events = pygame.event.get() if not events: continue for event in events: if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() elif event.key == pygame.K_UP: game.MovePlayer(pyBaba.Direction.UP) time_step += 1 elif event.key == pygame.K_DOWN: game.MovePlayer(pyBaba.Direction.DOWN) time_step += 1 elif event.key == pygame.K_LEFT: game.MovePlayer(pyBaba.Direction.LEFT) time_step += 1 elif event.key == pygame.K_RIGHT: game.MovePlayer(pyBaba.Direction.RIGHT) time_step += 1 elif event.key == pygame.K_SPACE: game.MovePlayer(pyBaba.Direction.NONE) time_step += 1 elif event.key == pygame.K_BACKSPACE: print('TODO: implement undo') time_step -= 1 print_all_rules(game, time_step) if game.GetPlayState() == pyBaba.PlayState.WON or game.GetPlayState( ) == pyBaba.PlayState.LOST: game_over = True renderer.render(game.GetMap(), text='Step %d, (KEY: SPACE + UDLR)' % time_step) pygame.display.flip() clock.tick(config.FPS)
import pygame import pyBaba import config import sys import sprites game = pyBaba.Game("../../Resources/Maps/out_of_reach.txt") screen_size = (game.GetMap().GetWidth() * config.BLOCK_SIZE, game.GetMap().GetHeight() * config.BLOCK_SIZE) screen = pygame.display.set_mode( (screen_size[0], screen_size[1]), pygame.DOUBLEBUF) sprite_loader = sprites.SpriteLoader() result_image = sprites.ResultImage() result_image_group = pygame.sprite.Group() result_image_group.add(result_image) def draw_obj(x_pos, y_pos): objects = game.GetMap().At(x_pos, y_pos) for obj_type in objects.GetTypes(): if pyBaba.IsTextType(obj_type): obj_image = sprite_loader.text_images[obj_type] else: if obj_type == pyBaba.ObjectType.ICON_EMPTY: continue obj_image = sprite_loader.icon_images[obj_type] obj_image.render(screen, (x_pos * config.BLOCK_SIZE, y_pos * config.BLOCK_SIZE))