Für ein Roguelike, an dem ich arbeitete, implementierte ich ein ziemlich flexibles datengesteuertes System zum Erzeugen von Tropfen. Ich habe es hier dokumentiert . Es ist im Wesentlichen ein wenig DSL für die Auswahl einer Reihe von zufällig ausgewählten Elementen.
Ein einfacher Tropfen sieht so aus:
1-10 copper coin
Es heißt nur, eine zufällige Anzahl von Kupfermünzen zwischen 1 und 10 fallen zu lassen. Die Dinge werden flexibler, wenn Sie Zweige hinzufügen:
one of
turquoise stone (50%)
onyx stone (25%)
malachite stone (15%)
jade stone (10%)
Ein "Eins von" wählt einen seiner untergeordneten Zweige basierend auf den angegebenen Wahrscheinlichkeiten aus und wertet diesen dann aus. Tropfen können mehr als einen Gegenstand fallen lassen:
any of
turquoise stone (50%)
onyx stone (25%)
malachite stone (15%)
jade stone (10%)
Dies wertet alle Unterzweige aus und lässt sie fallen, wenn ein Wurf gegen ihre Wahrscheinlichkeit abläuft. Es gibt auch einige andere Zweige, um einen Gegenstand basierend auf dem Dungeon und dem Level des Spielers auszuwählen.
Da diese komplex werden können, können Sie auch benannte Makros definieren, im Wesentlichen Funktionen, die einen Verzweigungsausdruck erweitern und in mehreren Ablagen wiederverwendet werden können. Wenn zum Beispiel alle Zwerge dieselbe Art von Beute ablegen, können Sie dafür ein einziges Makro erstellen und dieses für alle Monstertypen verwenden, anstatt große Ablagetabellen zu kopieren und einzufügen.
Ein Beispiel für einen Monstertropfen :
:: ancient dragon
glyph = D
groups = dragon
drops
(coins)
2-3(1:8) one of
(any-weapon)
(any-armor)
Hier (coins)
, (any-weapon)
und (any-armor)
sind alle Makroaufrufe:
(any-armor)
one of
(shield)
(helm)
(boots)
(gloves)
(cloak)
(robe)
(soft-armor)
(hard-armor)
was wiederum Dinge wie nennt:
(cloak)
one near level
cloak (10)
velvet cloak (20)
fur-lined cloak (50)
Sie können Drop-Ausdrücke wie eine echte Programmiersprache beliebig tief verschachteln. Dies gibt Ihnen die Kompositionsfähigkeit, die ein einfacher tabellenbasierter Ansatz nicht bietet.
Wie bei allen datengesteuerten Systemen können Sie sich selbst überwältigen, indem Sie undurchdringlich komplexe Tropfen erstellen, aber dies erfüllt meine Ziele:
- Geben Sie an, welche Elemente vollständig außerhalb des Codes abgelegt werden.
- Einfach, das Kernsystem in Code zu implementieren.
- Stelle fest, welche Monster fallen gelassen werden, damit der Spieler zielgerichtete Erkundungen durchführen kann. ("Ich brauche eine Halskette. Ich werde nach Zwergen suchen, da sie dazu neigen, sie fallen zu lassen.")
Der C # -Code, der dies implementiert, ist hier .