Tracks
/
Zig
Zig
/
Ejercicios
/
Personaje de D&D
Personaje de D&D

Personaje de D&D

Fácil

Introducción

Después de semanas de espera, tú y tus amigos se reúnen para jugar su primera partida de Dungeons & Dragons (D&D). Como esta es la primera sesión del juego, cada jugador tiene que generar un personaje con el que jugar. Las habilidades del personaje se determinan tirando dados de 6 caras, pero ¿dónde están los dados? Para tu sorpresa, te das cuenta de que tus amigos esperan que tú consigas los dados; después de todo, ¡fue tu idea jugar D&D! Entras en pánico al darte cuenta de que olvidaste traer los dados, lo que significaría que no hay partida de D&D. Como tienes algunos conocimientos básicos de programación, pronto se te ocurre una solución: escribirás un programa para simular tiradas de dados.

Instrucciones

Para una partida de Dungeons & Dragons, cada jugador empieza generando un personaje con el que pueda jugar. Ese personaje tiene, entre otras cosas, seis habilidades: fuerza, destreza, constitución, inteligencia, sabiduría y carisma. Estas seis habilidades tienen puntuaciones que se determinan al azar. Para ello, lanzas cuatro dados de 6 caras y anotas la suma de los tres dados más altos. Haces esto seis veces, una por cada habilidad.

Los puntos de golpe iniciales de tu personaje son 10 + el modificador de constitución de tu personaje. El modificador de constitución de tu personaje se obtiene restando 10 a su constitución, dividiendo entre 2 y redondeando hacia abajo.

Escribe un generador de personajes aleatorios que siga las reglas anteriores.

Por ejemplo, los seis lanzamientos de cuatro dados pueden verse así:

  • 5, 3, 1, 6: descartas el 1 y sumas 5 + 3 + 6 = 14, que asignas a fuerza.
  • 3, 2, 5, 3: descartas el 2 y sumas 3 + 5 + 3 = 11, que asignas a destreza.
  • 1, 1, 1, 1: descartas el 1 y sumas 1 + 1 + 1 = 3, que asignas a constitución.
  • 2, 1, 6, 6: descartas el 1 y sumas 2 + 6 + 6 = 14, que asignas a inteligencia.
  • 3, 5, 3, 4: descartas el 3 y sumas 5 + 3 + 4 = 12, que asignas a sabiduría.
  • 6, 6, 6, 6: descartas el 6 y sumas 6 + 6 + 6 = 18, que asignas a carisma.

Como la constitución es 3, el modificador de constitución es -4 y los puntos de golpe son 6.

Note

La mayoría de los lenguajes de programación incluyen generadores (pseudo)aleatorios, pero pocos lenguajes de programación están diseñados para lanzar dados. Uno de esos lenguajes es Troll.

Aleatoriedad en Zig

La biblioteca estándar de Zig evita el estado global oculto; por eso, en lugar de que mantengas tu propio generador de números aleatorios, tus funciones reciben una interfaz std.Random de la que obtener valores. Los tests pasan un generador inicializado con std.testing.random_seed y comprueban que los generadores con la misma semilla produzcan los mismos personajes.

Cómo comprobar la aleatoriedad

La distribución de tus puntuaciones de habilidad se comprueba con pruebas de chi cuadrado a un nivel de significancia de p < 0.0001:

  • las puntuaciones que devuelve ability se comparan con la distribución esperada;
  • cada una de las seis habilidades de un personaje se compara con la distribución esperada;
  • el patrón de puntuaciones pares e impares a lo largo de las seis habilidades de un personaje se compara con el que producirían habilidades independientes.

Una implementación correcta tiene menos de un 0,01 % de probabilidad de fallar en cada test.

Consulta las instrucciones de arriba para ver la definición de qué es una puntuación de habilidad.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Zig Exercism

¿Todo listo para empezar Personaje de D&D?

Regístrate en Exercism para aprender y dominar Zig con 104 ejercicios y mentoría humana real, todo gratis.

¡Profundiza en Personaje de D&D!

Exploramos cómo generar tiradas de dados (aparentemente) aleatorias. Vas a aprender sobre semillas, números pseudoaleatorios y algunas trampas comunes. Por último, veremos por qué las pruebas basadas en propiedades son ideales para probar funciones que devuelven valores aleatorios.