Как лучше реализовать карту
Хочу написать игру на python в стиле mud игр или текстовый квест. Мне нужно сделать карту, чтобы персонаж мог по ней перемещаться командами и выводить ее на экран через print. Пишу на чистом питоне, игра консольная. Была идея сделать её через новый класс в который добавить массив map и сделать что-то вроде такого
class Map():
map = []
def __init__(self):
map.append([w, w, w, w])
map.append([w, 0, 0, w])
map.append([w, 0, 0, w])
map.append([w, w, w, w])
Но у меня так и не получилось довести этот метод до рабочего прототипа, так как появились проблемы с выводом карты на экран.
Ответы (2 шт):
красивый вывод можно сделать так:
def pprint(map):
for line in map:
print(*line, sep = "")
не лучшая идея в MUD играх реализовывать карту в виде 2D карты со стенами, не эффективно
почему бы вам не использовать систему, которую изначально в MUD играх и используется, т.е. систему комнат и выходов
т.е. есть класс Room, в которой есть список выходов (можно сделать как фиксированный список из 14 ссылок на другие комнаты или как словарь типа
{'n': room1, 'u': room2}
и отрисовку такого списка комнат уже можно делать на 2D карту, которую и выводить на экран
типа такого:
Как можно строить карту:
- берём произвольную комнату и ставим ей координату (0,0) (считаем что вверх и вниз не двигаемся),
- дальше начинам обходить все комнаты - если комната на севере, то у нее координата будет уже (0,-1) и т.д. и заодно каждый раз вычисляем
min_x,max_x,min_y,max_y, - после первого обхода комнат у нас будет размер игрового поля
(max_x - min_x, max_y - min_y), строим двумерный массив, - затем опять обходим комнаты и уже в двумерном массиве по координатам (где
min_x = 0,min_y = 0) рисуем что нам надо, - а затем выводим 2D массив
уже дальше алгоритм можно усложнять:
учесть вертикальные направления движения - тогда карта будет уже трехмерной, а наложение на двухмерность придется делать через добавление лишних рядов и колонок на двухмерной карте
учесть, что расстояние между соседними комнатами может быть больше 0
