import random from helper import run_action class Dungeon: def __init__(self, width, height): self.width = width self.height = height self.grid = self.generate_dungeon() self.items = [] self.npcs = [] self.story = "" self.current_room = "entrance" def generate_dungeon(self): # Enhanced procedural generation grid = [["." for _ in range(self.width)] for _ in range(self.height)] # Create rooms rooms = [] for _ in range(3): room_w = random.randint(3, 5) room_h = random.randint(3, 5) x = random.randint(1, self.width - room_w - 1) y = random.randint(1, self.height - room_h - 1) rooms.append((x, y, room_w, room_h)) # Carve out room for i in range(y, y + room_h): for j in range(x, x + room_w): grid[i][j] = "." # Connect rooms with corridors for i in range(len(rooms) - 1): x1, y1 = rooms[i][0] + rooms[i][2] // 2, rooms[i][1] + rooms[i][3] // 2 x2, y2 = ( rooms[i + 1][0] + rooms[i + 1][2] // 2, rooms[i + 1][1] + rooms[i + 1][3] // 2, ) # Horizontal corridor for x in range(min(x1, x2), max(x1, x2) + 1): grid[y1][x] = "." # Vertical corridor for y in range(min(y1, y2), max(y1, y2) + 1): grid[y2][x2] = "." return grid def display(self, level=0, player_pos=None): """Return ASCII representation of dungeon""" grid = self.grid.copy() # Mark player position if player_pos: x, y = player_pos if 0 <= x < self.width and 0 <= y < self.height: grid[y][x] = "@" # Mark NPCs for npc in self.npcs: x, y = npc.position if 0 <= x < self.width and 0 <= y < self.height: grid[y][x] = "N" # Mark items for item in self.items: x, y = item.position if 0 <= x < self.width and 0 <= y < self.height: grid[y][x] = "i" # Convert to string return "\n".join("".join(row) for row in grid) def get_room_description(self, room_name, game_state): """Get AI-generated room description based on game state""" prompt = f"Describe the {room_name} of the dungeon in the kingdom of {game_state['kingdom']}" # Use helper.run_action() to get AI description return run_action(prompt, [], game_state)