Track
/
Zig
Zig
/
Esercizi
/
Personaggio di D&D
Personaggio di D&D

Personaggio di D&D

Facile

Introduzione

Dopo settimane di attesa, tu e i tuoi amici vi riunite per la vostra primissima partita a Dungeons & Dragons (D&D). Dato che è la prima sessione di gioco, ogni giocatore deve creare un personaggio con cui giocare. Le abilità del personaggio si determinano lanciando dadi a 6 facce, ma dove sono i dadi? Con uno shock, ti rendi conto che i tuoi amici aspettano che sia tu a creare i dadi; dopotutto è stata una tua idea giocare a D&D! Nel panico, ti accorgi di aver dimenticato di portare i dadi, il che vorrebbe dire niente partita a D&D. Dato che hai un po' di competenze di programmazione, trovi in fretta una soluzione: scriverai un programma che simula i lanci di dadi.

Istruzioni

In una partita a Dungeons & Dragons, ogni giocatore inizia generando un personaggio con cui giocare. Questo personaggio ha, tra le altre cose, sei abilità: strength, dexterity, constitution, intelligence, wisdom e charisma. I punteggi di queste sei abilità sono determinati in modo casuale. Per generare un punteggio, lancia quattro dadi a 6 facce e registra la somma dei tre dadi più alti. Lo fai sei volte, una per ogni abilità.

Gli hitpoints iniziali del personaggio sono 10 + il suo modifier di constitution. Per trovare il modifier di constitution, sottrai 10 dalla constitution, dividi per 2 e arrotonda per difetto.

Scrivi un generatore di personaggi casuale che segua le regole qui sopra.

Ad esempio, i sei lanci di quattro dadi potrebbero risultare così:

  • 5, 3, 1, 6: scarta l'1, somma 5 + 3 + 6 = 14 e assegnalo a strength.
  • 3, 2, 5, 3: scarta il 2, somma 3 + 5 + 3 = 11 e assegnalo a dexterity.
  • 1, 1, 1, 1: scarta l'1, somma 1 + 1 + 1 = 3 e assegnalo a constitution.
  • 2, 1, 6, 6: scarta l'1, somma 2 + 6 + 6 = 14 e assegnalo a intelligence.
  • 3, 5, 3, 4: scarta il 3, somma 5 + 3 + 4 = 12 e assegnalo a wisdom.
  • 6, 6, 6, 6: scarta il 6, somma 6 + 6 + 6 = 18 e assegnalo a charisma.

Dato che constitution è 3, il modifier di constitution è -4 e gli hitpoints sono 6.

Note

La maggior parte dei linguaggi di programmazione offre generatori (pseudo-)casuali, ma pochi linguaggi di programmazione sono progettati per lanciare i dadi. Uno di questi linguaggi è Troll.

La casualità in Zig

La libreria standard di Zig evita lo stato globale nascosto: invece di tenere un generatore di numeri casuali tutto tuo, le tue funzioni ricevono un'interfaccia std.Random da cui estrarre i valori. I test passano un generatore a cui impostano il seme con std.testing.random_seed e verificano che generatori con lo stesso seme producano gli stessi personaggi.

Verificare la casualità

La distribuzione dei punteggi di abilità viene verificata con il test del chi quadrato a un livello di significatività di p < 0.0001:

  • i punteggi restituiti da ability vengono confrontati con la distribuzione attesa;
  • ciascuna delle sei abilità di un personaggio viene confrontata con la distribuzione attesa;
  • lo schema di punteggi pari e dispari nelle sei abilità di un personaggio viene confrontato con quello che produrrebbero abilità indipendenti.

Un'implementazione corretta ha meno dello 0,01% di probabilità di fallire ciascun test.

Per la definizione di cosa sia un punteggio di abilità, vedi le istruzioni qui sopra.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Zig Exercism

Vuoi iniziare Personaggio di D&D?

Iscriviti a Exercism per imparare e padroneggiare Zig con 104 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Personaggio di D&D!

Esploriamo come generare lanci di dadi (apparentemente) casuali. Imparerai cosa sono i semi, i numeri pseudo casuali e alcune insidie comuni. Infine, vedremo perché i test basati su proprietà sono ottimi per testare funzioni che restituiscono valori casuali.