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

D&D-Charakter

Einfach

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.

Zufall in Zig

Die Zig-Standardbibliothek vermeidet versteckten globalen Zustand. Deine Funktionen halten deshalb keinen eigenen Zufallszahlengenerator, sondern erhalten eine std.Random-Schnittstelle, aus der sie Werte ziehen. Die Tests übergeben einen Generator, der mit std.testing.random_seed initialisiert wird, und prüfen, dass Generatoren mit demselben Seed dieselben Charaktere erzeugen.

Zufall prüfen

Die Verteilung deiner Attributswerte wird mit Chi-Quadrat-Tests auf einem Signifikanzniveau von p < 0.0001 geprüft:

  • die von ability zurückgegebenen Werte werden mit der erwarteten Verteilung verglichen;
  • jedes der sechs Attribute eines Charakters wird mit der erwarteten Verteilung verglichen;
  • das Muster aus geraden und ungeraden Werten über die sechs Attribute eines Charakters hinweg wird damit verglichen, was unabhängige Attribute erzeugen würden.

Eine korrekte Implementierung fällt bei jedem Test mit einer Wahrscheinlichkeit von weniger als 0,01 % durch.

Eine Definition des Attributswerts findest du in den Anweisungen oben.

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

Bereit, mit D&D-Charakter zu starten?

Melde dich bei Exercism an, um Zig mit 104 Ü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.