Ich möchte einen generischen Regel-Parser für RPG-Systeme im Stift- und Papierstil erstellen. Eine Regel kann normalerweise 1 bis N Entitäten, 1 bis N Rollen eines Würfels und das Berechnen von Werten basierend auf mehreren Attributen einer Entität umfassen.
Beispielsweise:
Spieler hat STR 18, seine aktuell ausgerüstete Waffe gibt ihm einen Bonus von +1 STR, aber einen Malus von DEX -1. Er greift ein Monster an und die Spiellogik muss nun eine Reihe von Regeln oder Aktionen ausführen:
Der Spieler würfelt, wenn er zum Beispiel 8 oder mehr erhält (der Basisangriffswert, den er weitergeben muss, ist eines seiner Basisattribute!), Ist sein Angriff erfolgreich. Das Monster würfelt dann, um zu berechnen, ob der Angriff durch seine Rüstung geht. Wenn ja, wird der Schaden genommen, wenn der Angriff nicht geblockt wurde.
Neben einfachen mathematischen Regeln kann es auch Einschränkungen geben, z. B., dass diese nur für eine bestimmte Benutzerklasse gelten (z. B. Krieger gegen Zauberer) oder für andere Attribute. Das beschränkt sich also nicht nur auf mathematische Operationen.
Wenn Sie mit RPG-Systemen wie Dungeon und Dragons vertraut sind, wissen Sie, was ich vorhabe.
Mein Problem ist jetzt, dass ich keine Ahnung habe, wie ich genau das bestmögliche bauen kann. Ich möchte, dass die Leute in der Lage sind, jede Art von Regel aufzustellen und später einfach eine Aktion wie die Auswahl eines Spielers und eines Monsters durchzuführen und eine Aktion auszuführen (eine Reihe von Regeln wie ein Angriff).
Ich bitte weniger um Hilfe bei der Datenbank, sondern mehr darum, wie ich eine Struktur und einen Parser entwickeln kann, damit meine Regeln flexibel bleiben. Die Sprache der Wahl dafür ist übrigens PHP.
Edit I:
Lassen Sie mich mein Ziel präzisieren: Ich möchte eine benutzerfreundliche Oberfläche erstellen (für die niemand eine Programmiersprache lernen muss), um mehr oder weniger komplexe Spielregeln zu erstellen. Der einfache Grund: Persönliche Verwendung, um sich nicht ständig an alle Regeln erinnern zu müssen, wir spielen einfach nicht so oft und es ist ein Stopper, sie jedes Mal nachzuschlagen. Außerdem: Es scheint eine lustige Aufgabe zu sein, etwas zu tun und zu lernen. :)
Was ich bisher versucht habe: Nur über ein Konzept nachzudenken, anstatt Zeit zu verschwenden, eine falsche Architektur zu erstellen. Bisher bin ich auf die Idee gekommen, einem Benutzer zu erlauben, so viele Attribute zu erstellen, wie er möchte, und dann so viele Attribute zuzuweisen, wie er möchte. Eine Entität kann ein Spieler, ein Monster, ein Gegenstand, alles sein. Wenn Sie nun etwas berechnen, werden die Daten dem Regel-Parser zur Verfügung gestellt, so dass der Regel-Parser in der Lage sein sollte, Dinge zu tun, wenn Player.base_attack + dice (1x6)> Monster.armor_check dann Monster.health - 1; Die Frage hier ist, wie man diesen Parser erstellt.
Edit II:
Hier ist ein Beispiel für einen ziemlich einfachen Wert, aber um ihn richtig zu berechnen, müssen viele verschiedene Dinge und Variablen berücksichtigt werden:
Basisangriffsbonus (Laufzeit) Ihr Basisangriffsbonus (von der d20-Community allgemein als BAB bezeichnet) ist ein Angriffswurfsbonus, der sich aus der Charakterklasse und dem Level ergibt. Basisangriffsboni werden für verschiedene Charakterklassen mit unterschiedlichen Raten erhöht. Ein Charakter erhält einen zweiten Angriff pro Runde, wenn sein Basisangriffsbonus +6 erreicht, einen dritten mit einem Basisangriffsbonus von +11 oder höher und einen vierten mit einem Basisangriffsbonus von +16 oder höher. Basisangriffsboni, die aus verschiedenen Klassen gewonnen wurden, z. B. für einen Stapel mit mehreren Klassen. Der Basisangriffsbonus eines Charakters gewährt nach Erreichen von +16 keine weiteren Angriffe, kann nicht kleiner als +0 sein und erhöht sich nicht aufgrund von Klassenstufen, nachdem die Charakterstufe 20 erreicht hat. Für bestimmte Leistungen ist ein Mindestbonus für Basisangriffe erforderlich.
Sie können es hier lesen: http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term), einschließlich der Links zu Klassen und Kunststücken, die wiederum ihre eigenen Regeln haben, um die Werte zu berechnen, die für den Basisangriff erforderlich sind.
Ich begann zu glauben, dass es auch ziemlich schwierig sein wird, einen guten Regel-Parser zu erstellen, wenn man ihn so allgemein wie möglich hält.
Func
s verwendet wurde, das den Programmstatus basierend auf den Argumenten als Schlüssel für das Wörterbuch initialisiert. Überrascht fand ich diesen Beitrag von Yegge noch nie, sehr cool, danke, dass Sie darauf hingewiesen haben.