Beispiel #1
0
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')
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
    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()
Beispiel #5
0
    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()
Beispiel #6
0
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
Beispiel #7
0
    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()
Beispiel #8
0
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))
Beispiel #9
0
    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
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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))