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.
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ì:
Dato che constitution è 3, il modifier di constitution è -4 e gli hitpoints sono 6.
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.
Iscriviti a Exercism per imparare e padroneggiare Kotlin con 88 esercizi e il mentoring di persone reali, tutto gratis.
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.