Chcę stworzyć prostą grę podobną do książek z przygodami „wybierz własną przygodę”. Gracz otrzymuje tekst narracyjny i wybiera swoją akcję z listy możliwości. To z kolei prowadzi do nowego tekstu narracyjnego ad infinitum. Jedynym haczykiem jest to, że w zależności od niektórych wcześniejszych decyzji lista możliwości może się różnić.
Na pierwszy rzut oka brzmi to jak zestaw instrukcji if-else, co sugeruje, że silnik reguł byłby dostępny. Ale dla mnie to też brzmi jak skończona maszyna stanowa.
Mam zamiar napisać to w Javie, a może Groovy. Obecnie bardziej interesują mnie kwestie koncepcyjne, tj. Jak należy to zrobić na szerokim poziomie (w jaki sposób ludzie wdrażają szachy lub gry karciane?), Ale mile widziane są również porady dotyczące konkretnej biblioteki.
Oczywiście „silnik gry” z tego tytułu nie odnosi się do wykrywania kolizji lub innej mechaniki fizyki / grafiki, ale logiki decydującej o tym, jakie opcje daje graczowi sytuacja i jego obecny stan.
Odpowiedzi:
Na podstawie tego, co powiedziałeś w komentarzach, poradziłbym sobie z tym:
Zaimplementuj tę historię jako skończoną maszynę stanu z niespodzianką. Każde państwo jest stroną historii, a każde przejście jest linkiem z jednej strony do drugiej. Ale każda zmiana ma również warunki . Warunki mogą być zerowe, w takim przypadku przejście zawsze pojawia się jako dostępna opcja, ale jeśli nie, należy je ocenić podczas wyświetlania strony, a jeśli ocena powróci
False
, przejście nie pojawi się.Istnieją dwa podstawowe sposoby wdrożenia Warunków. Pierwszym z nich jest skonfigurowanie pełnoprawnego silnika skryptowego w grze, a następnie wygląda warunek
return player.inventory.contains(GUN)
. Jest to początkowo bardziej skomplikowane w konfiguracji, ale pozwala na bardziej zaawansowane skrypty.Drugim jest zakodowanie możliwych warunków w jakimś obiekcie. Może mieć
RequiredItem
pole, a jeśli to pole ma wartość, sprawdzasz, czy warunek jest spełniony. Ten system jest prostszy w konfiguracji. Ogranicza to, co możesz zrobić o wiele więcej niż skrypty, ale jeśli nie potrzebujesz elastyczności zapewnianej przez silnik skryptów, prawdopodobnie jest o wiele łatwiejszy w użyciu.źródło
Myślę, że odpowiedź jest w tytule: potrzebujesz silnika reguł. Jeśli planujesz napisać swoją aplikację w Javie, możesz oczywiście napisać własną, jak sugerował Gilbert Le Blanc, LUB możesz rzucić okiem na Drools , silnik reguł.
Za pomocą Drools lub dowolnego innego silnika reguł można zdefiniować sparametryzowaną sytuację, która wyświetla listę możliwych działań. Możesz kodować proste reguły, które ma:
gracz jest na stronie X:
Interesujące w Drools jest to, że możesz zakodować wszystkie swoje reguły w pliku Excel, a następnie na początku gry zmusić Drools do odczytania tego pliku. Po tym wszystkim wszystko jest w pamięci, wystarczy martwić się o interfejs użytkownika.
Oto kilka zasobów, które pomogą Ci zacząć korzystać z Drools:
źródło
Maszyna stanowa brzmi jak bezpieczne podejście do modelowania twojej gry. Istnieje wiele bibliotek do interaktywnych fikcji:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
nie wspomniany w wikipedii, sznurek jest obecnie bardzo popularny.
źródło
Pod względem koncepcyjnym Twoja gra jest prosta. W psudeokodzie wyglądałoby to mniej więcej tak:
Teraz łączenie całego tekstu w całość, aby przepływał od jednej akcji do drugiej, jest trudną częścią. Możesz użyć relacyjnej bazy danych. Możesz użyć drzewa.
Trudno jest być bardziej szczegółowym, nie wiedząc, jakiego języka komputera chcesz używać. Odkąd wspomniałeś o Javie, bardziej skłaniam się ku strukturze drzewa.
Utwórz klasę odpowiedzi, która zawiera jedną odpowiedź i łącze do klasy tekstowej.
Utwórz klasę tekstową zawierającą tekst przygodowy oraz listę odpowiedzi jako instancje klasy odpowiedzi.
Edytowane, aby odpowiedzieć na komentarz:
Nie obliczasz niczego na podstawie tego modelu. Na twoim przykładzie drzewo wyglądałoby mniej więcej tak: T to tekst, a A to wybór akcji:
Tak, istnieje pewne powielanie tekstu, ale podążając za łańcuchem, przyszłe działania mogą uwzględniać wcześniejsze decyzje. To ogromne drzewo decyzyjne.
źródło