Chcę zbudować ogólny parser reguł dla systemów RPG typu długopis i papier. Reguła może zwykle obejmować od 1 do N jednostek 1 do N ról kostki i obliczanie wartości na podstawie wielu atrybutów jednostki.
Na przykład:
Gracz ma STR 18, jego obecnie wyposażona broń daje mu premię +1 STR, ale minus DEX -1. Atakuje potwora, a logika gry jest teraz wymagana do uruchomienia zestawu reguł lub akcji:
Gracz rzuca kośćmi, jeśli zdobędzie np. 8 lub więcej (podstawowa wartość ataku, którą musi przekazać, jest jednym z jego podstawowych atrybutów!) Jego atak się powiedzie. Następnie potwór rzuca kośćmi, aby obliczyć, czy atak przejdzie przez jego zbroję. Jeśli tak, obrażenia są przyjmowane, jeśli nie, atak został zablokowany.
Oprócz prostych reguł matematycznych mogą obowiązywać ograniczenia, takie jak zastosowanie tylko do określonej klasy użytkownika (na przykład wojownik kontra czarodziej) lub dowolnego innego atrybutu. Nie ogranicza się to tylko do operacji matematycznych.
Jeśli znasz systemy RPG, takie jak Dungeon i Dragons, będziesz wiedział, co planuję.
Mój problem polega teraz na tym, że nie mam pojęcia, jak dokładnie zbudować to w najlepszy możliwy sposób. Chcę, aby ludzie mogli ustanowić dowolną regułę, a później po prostu wykonać akcję, taką jak wybór gracza i potwora, i uruchomić akcję (zestaw reguł, takich jak atak).
Mniej proszę o pomoc po stronie bazy danych rzeczy, ale więcej o tym, jak wymyślić strukturę i parser, aby zachować elastyczność moich reguł. Nawiasem mówiąc, wybranym językiem jest php.
Edytuj I:
Pozwól mi doprecyzować mój cel: chcę stworzyć przyjazny interfejs użytkownika (który nie wymaga od kogoś nauki języka programowania), aby zbudować mniej lub bardziej złożone reguły gry. Prosty powód: użytek osobisty, aby nie musieć pamiętać wszystkich zasad przez cały czas, po prostu nie gramy tak często i za każdym razem jest to przeszkodą. Ponadto: wygląda na fajne zadanie do zrobienia i nauczenia się czegoś. :)
To, czego do tej pory próbowałem: myślenie o koncepcji zamiast marnowania czasu na budowanie złej architektury. Do tej pory mam pomysł, aby zezwolić użytkownikowi na tworzenie tylu atrybutów, ile chce, a następnie przypisywać tyle atrybutów, ile chcą do dowolnego rodzaju encji. Istotą może być gracz, potwór, przedmiot, cokolwiek. Teraz podczas obliczania czegoś dane są udostępniane analizatorowi reguł, aby analizator reguł mógł wykonywać takie czynności, jak Player.base_attack + dice (1x6)> Monster.armor_check, a następnie Monster.health - 1; Pytanie dotyczy tego, jak utworzyć ten analizator składni.
Edycja II:
Oto przykład dość podstawowej wartości, ale aby ją poprawnie obliczyć, należy wziąć pod uwagę wiele różnych rzeczy i zmiennych:
Podstawowy bonus do ataku (Termin) Podstawowy bonus do ataku (powszechnie określany jako BAB przez społeczność d20) to bonus do rzutu ataku uzyskany z klasy postaci i poziomu. Premie podstawowych ataków rosną w różnym tempie dla różnych klas postaci. Postać zyskuje drugi atak na rundę, gdy jego podstawowy bonus do ataku osiągnie +6, trzeci z bazową premią do ataku +11 lub wyższą, a czwarty z podstawową premią do ataku +16 lub wyższą. Bazowe bonusy do ataku uzyskane z różnych klas, np. Dla postaci wieloklasowej, stosu. Podstawowa premia do ataku postaci nie zapewnia już więcej ataków po osiągnięciu +16, nie może być mniejsza niż +0 i nie zwiększa się z powodu poziomów klasy, gdy poziom postaci osiągnie 20. W przypadku niektórych atutów wymagana jest minimalna premia do ataku podstawowego.
Możesz go przeczytać tutaj http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term), w tym linki do klas i atutów, które ponownie mają swoje własne zasady obliczania wartości wymaganych do ataku podstawowego.
Zacząłem myśleć, że utrzymanie tak ogólnej, jak to tylko możliwe, sprawi, że bardzo trudno będzie wykonać dobry parser reguł.
Func
s, który inicjuje stan programu na podstawie argumentów jako kluczy do słownika. Zaskoczony, że nigdy nie znalazłem tego postu z Yegge, bardzo fajnie, dziękuję za zwrócenie na niego uwagi.