Exemplo n.º 1
0
    def execute(command: str):
        player = WorldManager().get().player
        eventsys = EventSystem()

        if command == 'left':
            eventsys.register(LeftCellEvent(player, player.cell))
            player.move(Direction.LEFT)
            eventsys.register(EnteredCellEvent(player, player.cell))

        elif command == 'right':
            eventsys.register(LeftCellEvent(player, player.cell))
            player.move(Direction.RIGHT)
            eventsys.register(EnteredCellEvent(player, player.cell))

        elif command == 'up':
            eventsys.register(LeftCellEvent(player, player.cell))
            player.move(Direction.UP)
            eventsys.register(EnteredCellEvent(player, player.cell))

        elif command == 'down':
            eventsys.register(LeftCellEvent(player, player.cell))
            player.move(Direction.DOWN)
            eventsys.register(EnteredCellEvent(player, player.cell))

        elif command == 'skip':
            eventsys.register(SkipTurnEvent(player, player.cell))

        elif command == 'save':
            Engine.save_world()

        elif command == 'load':
            Engine.load_save()

        elif command == 'exit':
            return
Exemplo n.º 2
0
    def run(self):
        WorldManager().generate()
        Engine.register_listeners()
        CLI().add_message('Good day, Player! Welcome to Labyrinth')

        dimensions = None
        while dimensions is None:
            CLI().add_event_message('choose_dimensions')
            Renderer().update_screen()
            dimensions = CLI().get_player_input('dimensions')

        self.config['world']['width'] = dimensions[0]
        self.config['world']['height'] = dimensions[1]

        self.make_new_world()

        CLI().add_event_message('choose_command', 'Enter commands!')

        game_over = False
        while not game_over:
            command = None
            while command is None:
                Renderer().update_screen()
                command = CLI().get_player_input('command')

            if CommandProcessor().is_valid(command):
                Engine.execute(command)

            if command == 'exit':
                game_over = True

            EventSystem().update()
            Renderer().update_screen()
Exemplo n.º 3
0
    def register_listeners():
        world = WorldManager().get()

        traversable_cells = [
            cell for row in world.cells for cell in row
            if cell.type == CellType.Empty
        ]
        EventSystem().add_listeners(EnteredCellEvent(), traversable_cells)
        EventSystem().add_listeners(LeftCellEvent(), traversable_cells)
        EventSystem().add_listeners(TreasureFoundEvent(), traversable_cells)
Exemplo n.º 4
0
    def init(self, config):
        self.config = config

        CLI().init(config)
        WorldManager().init(config)
        Renderer().init(config)
        CommandProcessor().init(config)
        EventSystem().init(config)

        CLI().add_message('Finished initialization.')
Exemplo n.º 5
0
    def can_move_to(destination: Cell) -> bool:
        player = WorldManager().get().player
        if destination is not None:
            if destination.type == CellType.Empty:
                return True
            elif destination.type == CellType.Wall:
                EventSystem().register(FacedWallEvent(player, player.cell))
            elif destination.type == CellType.Monolith:
                EventSystem().register(FacedMonolithEvent(player, player.cell))

        return False
Exemplo n.º 6
0
    def is_valid(command: str) -> bool:
        player = WorldManager().get().player
        if command == 'left':
            return CommandProcessor.can_move_to(player.cell.left)
        elif command == 'right':
            return CommandProcessor.can_move_to(player.cell.right)
        elif command == 'up':
            return CommandProcessor.can_move_to(player.cell.up)
        elif command == 'down':
            return CommandProcessor.can_move_to(player.cell.down)
        elif command == 'skip':
            pass
        elif command == 'save':
            pass
        elif command == 'load':
            pass
        elif command == 'exit':
            pass

        return True
Exemplo n.º 7
0
 def load_save():
     WorldManager().load()
     Engine.register_listeners()
Exemplo n.º 8
0
 def save_world():
     WorldManager().save()
Exemplo n.º 9
0
 def make_new_world(self):
     self.init(self.config)
     WorldManager().generate()
     Engine.register_listeners()
     CLI().add_event_message('WorldCreated')
Exemplo n.º 10
0
 def get_world_image(self) -> list:
     return [
         ''.join(str(cell) for cell in row)
         for row in WorldManager().get().cells
     ]