def initialize(self, height, width, treasure_number, traps, start_pos): """ Initializes DungeonMap param: height (int) height of the map param: width (int) width of the map param: treasure_number (int) number of treasures on map param: traps (iterateble) traps to put on map param: start_pos (Position) player starting position on map """ try: is_input_valid = width * height > treasure_number + len(traps) except TypeError as error: raise DungeonMapInitializationError( "Incorrect parameter type in " "DungeonMap initialize. \n {}".fromat(str(error))) else: if not is_input_valid: try: raise DungeonMapInitializationError( "Incorrect parameters in " "DungeonMap initialize. Map can't fit all of the cells." ) #made because try daoesn't work without exept except DungeonMapInitializationError: raise self.width = width self.height = height self.cells = [[empty_cell.legend for i in range(height)] for j in range(width)] logger.debug("empty map generated") try: self.cells[start_pos.x][start_pos.y] = entrance_cell.legend except IndexError: raise DungeonMapInitializationError( "Incorrect parameters in " "DungeonMap initialize. Strating position is out of DungeonMap " "boundaries") while treasure_number > 0: pos = Position.generate_random_position(width, height) if self.cell(pos) == empty_cell.legend: self.cells[pos.x][pos.y] = treasure_cell.legend treasure_number -= 1 logger.debug("treasures generated") while traps: pos = Position.generate_random_position(width, height) if self.cell(pos) == empty_cell.legend: self.cells[pos.x][pos.y] = traps.pop() logger.debug("traps generated")
def respawn_enemy(self): """ Respawns enemy at random not occupied by Player cell. """ DungeonMap.enemy = choice(enemies_list) enemy_position = Position.generate_random_position(DungeonGame.dmap.width,\ DungeonGame.dmap.height) while enemy_position == DungeonGame.player.position: enemy_position = Position.generate_random_position(DungeonGame.dmap.width,\ DungeonGame.dmap.height) DungeonMap.enemy.position = enemy_position logger.debug("enemy spawned at {},{}".format(DungeonGame.enemy.position.x,\ DungeonGame.enemy.position.y))
def initialize(self, height, width, treasure_number, traps, start_pos): """ Initializes DungeonMap param: height (int) height of the map param: width (int) width of the map param: treasure_number (int) number of treasures on map param: traps (iterateble) traps to put on map param: start_pos (Position) player starting position on map """ if width * height < treasure_number + len(traps) + 1: logger.debug("Incorrect parameters in DungeonMap initialize." " Map can't fit all of the cells") return self.width = width self.height = height self.cells = [[empty_cell.legend for i in range(height)] for j in range(width)] logger.debug("empty map generated") self.cells[start_pos.x][start_pos.y] = entrance_cell.legend while treasure_number > 0: pos = Position.generate_random_position(width, height) if self.cell(pos) == empty_cell.legend: self.cells[pos.x][pos.y] = treasure_cell.legend treasure_number -= 1 logger.debug("treasures generated") while traps: pos = Position.generate_random_position(width, height) if self.cell(pos) == empty_cell.legend: self.cells[pos.x][pos.y] = traps.pop() logger.debug("traps generated")
def init_new_game(self): """ Initializes new games """ logger.info(text.new_game_start) input() logger.info(text.administration) input() logger.info(text.enter_proficiency_prompt) user_input = input().lower() if user_input in DungeonGame.player.proficiencies: DungeonGame.player.proficiency = user_input else: DungeonGame.player.proficiency = "none" logger.info(text.enter_dungeon_width_prompt) width = input_number_from_boundaries(DungeonGame.MIN_MAP_WIDTH,\ DungeonGame.MAX_MAP_WIDTH) logger.info(text.enter_dungeon_height_prompt) height = input_number_from_boundaries(DungeonGame.MIN_MAP_HEIGHT,\ DungeonGame.MAX_MAP_HEIGHT) size = width * height number_of_treasures = max (size * DungeonGame.treasure_rarity,\ DungeonGame.treasure_to_win) number_of_traps = min (size - number_of_treasures - 1, size * DungeonGame.trap_rarity) traps = Trap.generate_traps(number_of_traps) starting_position = Position.generate_random_position(width, height) DungeonGame.dmap.initialize(height, width, number_of_treasures, traps, starting_position) DungeonGame.player.health = DungeonGame.default_health DungeonGame.player.bag = 0 DungeonGame.player.position = starting_position DungeonGame.player.discovered_map.initialize_discovered_map(height, width,\ starting_position) self.respawn_enemy()