Nie jestem pewien, czy „labirynt” jest właściwym terminem. Zasadniczo użytkownicy zaczynają od jednego, Room
który ma 4 drzwi (N, S, E i W). Mogą iść w dowolnym kierunku, a każdy kolejny pokój zawiera inny pokój z dowolnym miejscem od 1 do 4 drzwi prowadzących do innych pokoi.
„Labirynt” ma być nieograniczony i powiększać się w miarę przemieszczania się po pokojach. Dostępna jest ograniczona liczba Rooms
, jednak dostępna liczba jest dynamiczna i może ulec zmianie.
Mój problem polega na tym, że nie jestem pewien najlepszej struktury danych dla tego typu wzorca
Najpierw pomyślałem o użyciu tablicy Room
obiektów [X] [X] , ale naprawdę wolałbym tego unikać, ponieważ rzecz ma rosnąć w dowolnym kierunku i należy budować tylko pokoje, które są „odwiedzane”.
Inną myślą było, aby każda Room
klasa zawierała 4 połączone Room
właściwości dla N, S, E i W, i po prostu łączyła się z poprzednią Room
, ale problem z tym, że nie wiem, jak rozpoznać, czy użytkownik wejdzie do pokoju, w którym ma sąsiadujący pokój już „zbudowany”
Na przykład,
--- --- ---------- | | | | Rozpocznij 5 4 | | | | --- --- --- --- --- --- ---------- --- --- | | | | | | | 1 2 3 | | | | | | --- --- --- --- ----------
Jeśli użytkownik przejdzie z pozycji Start> 1> 2> 3> 4> 5, wówczas Room
nr 5 musi wiedzieć, że W zawiera pokój początkowy, S oznacza pokój nr 2 iw tym przypadku nie powinien być dostępny, a N może być albo nowy Room
lub ściana (nic).
Być może potrzebuję połączenia tablicy i połączonych pokoi, a może po prostu patrzę na to w niewłaściwy sposób.
Czy istnieje lepszy sposób budowania struktury danych dla tego typu „labiryntu”? Czy też jestem na dobrej drodze z obecnym procesem myślowym i brakuje mi tylko kilku informacji?
(Jeśli jesteś zainteresowany, projekt jest grą bardzo podobną do Munchkin Quest )