这是一个简单的地牢生成器示例。它通过随机生成并放置矩形房间来创建地牢地图。然后,它根据房间位置创建隧道连接房间,最终生成一个完整的地牢地图。在这个示例中,地牢以 '#' 表示墙壁,'.' 表示地板。

import random

# 地图大小
MAP_WIDTH = 50
MAP_HEIGHT = 30

# 房间大小范围
MIN_ROOM_SIZE = 4
MAX_ROOM_SIZE = 10

# 地图数据
map_data = [[0] * MAP_WIDTH for _ in range(MAP_HEIGHT)]

class Room:
    def __init__(self, x, y, width, height):
        self.x1 = x
        self.y1 = y
        self.x2 = x + width
        self.y2 = y + height

def create_room(room):
    for y in range(room.y1+1, room.y2):
        for x in range(room.x1+1, room.x2):
            map_data[y][x] = 1

def create_horizontal_tunnel(x1, x2, y):
    for x in range(min(x1, x2), max(x1, x2) + 1):
        map_data[y][x] = 1

def create_vertical_tunnel(y1, y2, x):
    for y in range(min(y1, y2), max(y1, y2) + 1):
        map_data[y][x] = 1

def generate_dungeon():
    rooms = []
    num_rooms = 0

    for _ in range(1000):
        width = random.randint(MIN_ROOM_SIZE, MAX_ROOM_SIZE)
        height = random.randint(MIN_ROOM_SIZE, MAX_ROOM_SIZE)
        x = random.randint(0, MAP_WIDTH - width - 1)
        y = random.randint(0, MAP_HEIGHT - height - 1)
        new_room = Room(x, y, width, height)

        failed = False
        for other_room in rooms:
            if new_room.x1 < other_room.x2 and new_room.x2 > other_room.x1 and new_room.y1 < other_room.y2 and new_room.y2 > other_room.y1:
                failed = True
                break

        if not failed:
            create_room(new_room)
            if num_rooms == 0:
                # 第一个房间
                player_x = new_room.x1 + (new_room.x2 - new_room.x1) // 2
                player_y = new_room.y1 + (new_room.y2 - new_room.y1) // 2
            else:
                # 其他房间
                prev_room = rooms[num_rooms - 1]
                center_x = new_room.x1 + (new_room.x2 - new_room.x1) // 2
                center_y = new_room.y1 + (new_room.y2 - new_room.y1) // 2
                prev_center_x = prev_room.x1 + (prev_room.x2 - prev_room.x1) // 2
                prev_center_y = prev_room.y1 + (prev_room.y2 - prev_room.y1) // 2

                if random.random() < 0.5:
                    create_horizontal_tunnel(prev_center_x, center_x, prev_center_y)
                    create_vertical_tunnel(prev_center_y, center_y, center_x)
                else:
                    create_vertical_tunnel(prev_center_y, center_y, prev_center_x)
                    create_horizontal_tunnel(prev_center_x, center_x, center_y)

            rooms.append(new_room)
            num_rooms += 1

    return map_data, (player_x, player_y)

# 生成地牢
dungeon_map, player_position = generate_dungeon()

# 打印地牢
for y in range(MAP_HEIGHT):
    for x in range(MAP_WIDTH):
        if dungeon_map[y][x] == 0:
            print('#', end=' ')
        else:
            print('.', end=' ')
    print()

# 打印玩家位置
print('玩家初始位置:', player_position)

请注意,这只是一个基本的示例,并没有包含更高级的地牢生成算法,如使用 BSP 树、随机连通性等。要创建更复杂和多样化的地牢,需要更多的代码和算法。希望这个示例对你有所帮助!

Python Roguelike 地牢生成器代码示例

原文地址: https://www.cveoy.top/t/topic/8lx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录