Я на самом деле не уверен, что «лабиринт» является правильным термином. В основном пользователи начинают с одного, Room
который имеет 4 двери (N, S, E и W). Они могут идти в любом направлении, и каждая последующая комната содержит отдельную комнату с от 1 до 4 дверными проемами, которые ведут в другие комнаты.
Предполагается, что «лабиринт» неограничен по размеру и будет расти по мере перемещения комнат. Доступно ограниченное количество Rooms
доступных, однако доступное число является динамическим и может изменяться.
Моя проблема в том, что я не уверен в лучшей структуре данных для этого типа шаблона
Сначала я подумал только об использовании массива Room
объектов [X] [X] , но я действительно предпочел бы избегать этого, поскольку объект должен расти в любом направлении, и следует строить только комнаты, которые «посещают».
Другая мысль состояла в том, чтобы каждый Room
класс содержал 4 связанных Room
свойства для N, S, E и W и просто ссылался на предыдущий Room
, но проблема в том, что я не знаю, как определить, входит ли пользователь в комнату, которая соседняя комната уже "построена"
Например,
--- --- ---------- | | | | Начало 5 4 | | | | --- --- --- --- --- --- ---------- --- --- | | | | | | | 1 2 3 | | | | | | --- --- --- --- ----------
Если пользователь переходит от Start> 1> 2> 3> 4> 5, тогда Room
№ 5 должен знать, что W содержит начальную комнату, S - это комната № 2, и в этом случае он не должен быть доступен, а N может быть либо новый Room
или стена (ничего).
Возможно, мне нужно сочетание массива и смежных комнат, или, может быть, я просто смотрю на это неправильно.
Есть ли лучший способ построения структуры данных для этого типа "лабиринта"? Или я нахожусь на правильном пути с моим текущим мыслительным процессом, и мне просто не хватает нескольких фрагментов информации?
(Если вам интересно, проект представляет собой игру, очень похожую на Munchkin Quest )