Tracks
/
Lean
Lean
/
Übungen
/
D&D-Charakter
D&D-Charakter

D&D-Charakter

Mittel

Einführung

Nach wochenlanger Vorfreude triffst du dich mit deinen Freunden zu eurer allerersten Partie Dungeons & Dragons (D&D). Da dies die erste Sitzung des Spiels ist, muss jeder Spieler einen Charakter erstellen, mit dem er spielt. Die Fähigkeiten des Charakters werden durch Würfeln mit sechsseitigen Würfeln bestimmt, aber wo sind die Würfel? Erschrocken stellst du fest, dass deine Freunde darauf warten, dass du die Würfel besorgst; schließlich war es deine Idee, D&D zu spielen! In Panik wird dir klar, dass du vergessen hast, die Würfel mitzubringen, was bedeuten würde, dass das D&D-Spiel ausfällt. Da du über grundlegende Programmierkenntnisse verfügst, hast du schnell eine Lösung parat: Du schreibst ein Programm, das das Würfeln simuliert.

Anleitung

Für eine Partie Dungeons & Dragons beginnt jeder Spieler damit, einen Charakter zu erstellen, mit dem er spielen kann. Dieser Charakter hat unter anderem sechs Eigenschaften: Stärke, Geschicklichkeit, Konstitution, Intelligenz, Weisheit und Charisma. Diese sechs Eigenschaften haben Werte, die zufällig bestimmt werden. Dazu würfelst du mit vier sechsseitigen Würfeln und notierst die Summe der drei größten Würfel. Das machst du sechs Mal, einmal für jede Eigenschaft.

Die anfänglichen Trefferpunkte deines Charakters sind 10 + der Konstitutionsmodifikator deines Charakters. Den Konstitutionsmodifikator deines Charakters findest du, indem du 10 von der Konstitution deines Charakters abziehst, durch 2 teilst und abrundest.

Schreibe einen Zufallsgenerator für Charaktere, der den oben genannten Regeln folgt.

Zum Beispiel können die sechs Würfe mit vier Würfeln so aussehen:

  • 5, 3, 1, 6: Du verwirfst die 1 und summierst 5 + 3 + 6 = 14, was du der Stärke zuweist.
  • 3, 2, 5, 3: Du verwirfst die 2 und summierst 3 + 5 + 3 = 11, was du der Geschicklichkeit zuweist.
  • 1, 1, 1, 1: Du verwirfst die 1 und summierst 1 + 1 + 1 = 3, was du der Konstitution zuweist.
  • 2, 1, 6, 6: Du verwirfst die 1 und summierst 2 + 6 + 6 = 14, was du der Intelligenz zuweist.
  • 3, 5, 3, 4: Du verwirfst die 3 und summierst 5 + 3 + 4 = 12, was du der Weisheit zuweist.
  • 6, 6, 6, 6: Du verwirfst die 6 und summierst 6 + 6 + 6 = 18, was du dem Charisma zuweist.

Weil die Konstitution 3 ist, ist der Konstitutionsmodifikator -4 und die Trefferpunkte sind 6.

Note

Die meisten Programmiersprachen bieten (Pseudo-)Zufallsgeneratoren, aber nur wenige Programmiersprachen sind dafür ausgelegt, Würfel zu werfen. Eine solche Sprache ist Troll.

Pseudozufällige Werte in Lean erzeugen

In funktionalen Sprachen sind die meisten Funktionen rein. Das heißt, sie geben für dieselbe Menge an Argumenten immer dieselbe Ausgabe zurück und tun sonst nichts. Mit anderen Worten: Reine Funktionen sind deterministisch.

Ein Zufallswert ist jedoch per Definition unvorhersehbar und nicht deterministisch. Selbst Pseudozufälligkeit, also die Rückgabe einer Folge von Zahlen, die zufällig aussehen, ist in einem reinen Kontext nicht so leicht zu erreichen. Der Grund dafür ist, dass ein Pseudozufallszahlengenerator (PRNG) seinen internen Zustand verfolgen muss, um die nächste Zahl in der Folge zurückzugeben.

Lean bietet zwei mögliche Ansätze für dieses Problem:

  1. Verwende eine Monade, mit der du den internen Zustand eines PRNGs ändern kannst. Es gibt eine fertige Funktion, IO.rand, die genau das tut.

  2. Verwende reine Funktionen, die einen Generator als Argument nehmen und nicht nur den erzeugten pseudozufälligen Wert zurückgeben, sondern auch einen aktualisierten Generator, der für die nächste Zahl in der Folge „vorbereitet“ ist.

Diese Übung verwendet den zweiten Ansatz. Jeder Funktion, die einen pseudozufälligen Wert erzeugen soll, wird ein Generator übergeben, und die Funktion soll sowohl den Wert als auch einen aktualisierten Generator zurückgeben.

Beachte, dass ein gegebener Generator deterministisch ist, das heißt, er erzeugt immer denselben Wert. Um den nächsten pseudozufälligen Wert in einer Folge zu erzeugen, musst du den aktualisierten Generator verwenden.

Zufälligkeit prüfen

In dieser Übung wird die Zufälligkeit mit einem Chi-Quadrat-Test auf einem Signifikanzniveau von p < 0.0001 geprüft.

Das bedeutet: Wenn ein Attributswert gemäß der Anleitung erzeugt wird, besteht eine Chance von weniger als 0,01 %, dass eine korrekte Implementierung den Test durch Zufall nicht besteht.

Beachte, dass ein Attributswert gemäß der Anleitung die Summe der drei größten Ergebnisse aus vier Würfen mit einem fairen d6 (sechsseitigen Würfel) ist.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Lean Exercism

Bereit, mit D&D-Charakter zu starten?

Melde dich bei Exercism an, um Lean mit 100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in D&D-Charakter ein!

Wir schauen uns an, wie man (scheinbar) zufällige Würfelwürfe erzeugt. Du lernst Seeds, Pseudozufallszahlen und einige typische Stolperfallen kennen. Zum Schluss sehen wir, warum Property-based Testing ideal ist, um Funktionen zu testen, die zufällige Werte zurückgeben.