Python Roguelike 地牢生成器代码示例
这是一个简单的地牢生成器示例。它通过随机生成并放置矩形房间来创建地牢地图。然后,它根据房间位置创建隧道连接房间,最终生成一个完整的地牢地图。在这个示例中,地牢以 '#' 表示墙壁,'.' 表示地板。
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 树、随机连通性等。要创建更复杂和多样化的地牢,需要更多的代码和算法。希望这个示例对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/8lx 著作权归作者所有。请勿转载和采集!