def set_map_size(self, width, height):

        if isinstance(width, int) and isinstance(height, int):

            if width < 2:

                width = 2

            elif width > 119:

                width = 119

            if height < 2:

                height = 2

            elif height > 30:

                height = 30

            self.map_size = [width, height]
            my_logger.debug("Map size has been stored successfully")
            return True

        else:

            my_logger.error("Wrong size type! Please, check the input")
            return False
    def get_cell_content(self, cell_x, cell_y):

        if cell_x >= self.map_size[0] or cell_y >= self.map_size[1]:

            my_logger.error("Wrong coordinates! Please, check the input")
            return "-"

        return self.dungeon_map[cell_y][cell_x]
    def set_cell_content(self, cell_x, cell_y, new_value):

        if cell_x >= self.map_size[0] or cell_y >= self.map_size[1]:

            my_logger.error("Wrong coordinates! Please, check the input")
            return False

        self.dungeon_map[cell_y][cell_x] = new_value
        return True
예제 #4
0
    def setup_game(self):
        """
        Game startup method: user should choose between playing new game or loading save
        """
        my_logger.debug("Game start choice")
        start_game_choice = input(
            'Enter "y" if you want to play a new game or\n"load" if you want to load existing game:\n'
        )
        my_logger.debug("Game start choice handling")

        if start_game_choice == "load":

            try:

                self.load_game()

            except (FileNotFoundError, pickle.UnpicklingError) as file_error:

                my_logger.exception(file_error)

                if isinstance(file_error, FileNotFoundError):

                    my_logger.error(
                        "There is no dungeon.sav file! Start a new game instead!"
                    )

                elif isinstance(file_error, pickle.UnpicklingError):

                    my_logger.error(
                        "dungeon.sav file is corrupted! Start a new game instead!"
                    )

                self.setup_new_game()

        else:

            self.setup_new_game()

        self.player_map.update_map(self.dungeon_map, self.player.player_x,
                                   self.player.player_y)
        self.player_map.draw_map()
        self.is_game_ongoing = True

        self.enemy_last_position = [self.enemy.enemy_x, self.enemy.enemy_y]
        self.enemy_thread = threading.Thread(target=self.enemy_update)
        self.enemy_thread.start()
    def set_map_size(self, width, height):

        if isinstance(width, int) and isinstance(height, int):

            try:

                if width < 5:

                    raise MapSizeError("", width, height)
                    width = 5

                elif width > 119:

                    raise MapSizeError("", width, height)
                    width = 119

                elif height < 5:

                    raise MapSizeError("", width, height)
                    height = 5

                elif height > 30:

                    raise MapSizeError("", width, height)
                    height = 30

            except MapSizeError as map_size_error:

                my_logger.exception(map_size_error)
                my_logger.error("Map size will be resetted to default value!")
                self.reset_map_size()
                return False

            self.map_size = [width, height]
            my_logger.debug("Map size has been stored successfully")
            return True

        else:

            my_logger.error("Wrong size type! Please, check the input")
            return False
    def save_game(self):
        """
        Game save (pickle!)
        """
        data = [
            self.dungeon_map.dungeon_map, self.dungeon_map.map_size,
            self.player_map.dungeon_map, self.player.player_x,
            self.player.player_y, self.player.health, self.player.treasures
        ]

        try:

            out_file = open('dungeon.sav', 'wb')

        except PermissionError as premission_error:

            my_logger.exception(premission_error)
            my_logger.error(
                "Unable to save game! So sorry! But you can play again!")

        pickle.dump(data, out_file)
예제 #7
0
    def setup_new_game(self):
        """
        This function is used to generate new map of size, specified by user
        """
        while True:

            map_request = input(
                'Enter preferable map size in format "width:height", or just press enter to play with default map:\n'
            )
            my_logger.info("Generating map...")

            if not len(map_request):

                map_size = [20, 10]
                break

            else:

                try:

                    map_size = [int(token) for token in map_request.split(':')]
                    break

                except ValueError as val_error:

                    my_logger.exception(val_error)
                    my_logger.error("Try to enter map size once again!")

        self.dungeon_map.set_map_size(*map_size)
        self.dungeon_map.generate_map()
        my_logger.info("Map has been generated successfully!")

        self.player_map.set_map_size(*map_size)
        self.player_map.init_map()

        self.player.reset()
        self.player.randomize_initial_position(self.dungeon_map)

        self.enemy.randomize_initial_position(self.dungeon_map)