Trilhas
/
Zig
Zig
/
Exercícios
/
Personagem de D&D
Personagem de D&D

Personagem de D&D

Fácil

Introdução

Depois de semanas de expectativa, você e seus amigos se reúnem para a primeira partida de Dungeons & Dragons (D&D). Como esta é a primeira sessão do jogo, cada jogador precisa gerar um personagem para jogar. As habilidades do personagem são determinadas rolando dados de 6 lados, mas onde estão os dados? Com um susto, você percebe que seus amigos estão esperando que você produza os dados; afinal, foi sua ideia jogar D&D! Em pânico, você percebe que esqueceu de trazer os dados, o que significaria nenhuma partida de D&D. Como você tem algumas habilidades básicas de programação, rapidamente encontra uma solução: vai escrever um programa para simular rolagens de dados.

Instruções

Em uma partida de Dungeons & Dragons, cada jogador começa gerando um personagem com o qual possa jogar. Esse personagem tem, entre outras coisas, seis atributos: Força, Destreza, Constituição, Inteligência, Sabedoria e Carisma. Esses seis atributos têm valores determinados aleatoriamente. Você faz isso rolando quatro dados de 6 lados e anotando a soma dos três maiores valores. Você faz isso seis vezes, uma vez para cada atributo.

Os pontos de vida iniciais do seu personagem são 10 + o modificador de Constituição dele. Você calcula o modificador de Constituição do seu personagem subtraindo 10 da Constituição dele, dividindo por 2 e arredondando para baixo.

Escreva um gerador aleatório de personagens que siga as regras acima.

Por exemplo, as seis rolagens de quatro dados podem ser assim:

  • 5, 3, 1, 6: Você descarta o 1 e soma 5 + 3 + 6 = 14, que você atribui à Força.
  • 3, 2, 5, 3: Você descarta o 2 e soma 3 + 5 + 3 = 11, que você atribui à Destreza.
  • 1, 1, 1, 1: Você descarta o 1 e soma 1 + 1 + 1 = 3, que você atribui à Constituição.
  • 2, 1, 6, 6: Você descarta o 1 e soma 2 + 6 + 6 = 14, que você atribui à Inteligência.
  • 3, 5, 3, 4: Você descarta o 3 e soma 5 + 3 + 4 = 12, que você atribui à Sabedoria.
  • 6, 6, 6, 6: Você descarta o 6 e soma 6 + 6 + 6 = 18, que você atribui ao Carisma.

Como a Constituição é 3, o modificador de Constituição é -4 e os pontos de vida são 6.

Note

A maioria das linguagens de programação possui geradores (pseudo)aleatórios, mas poucas linguagens de programação são projetadas para rolar dados. Uma dessas linguagens é Troll.

Aleatoriedade em Zig

A biblioteca padrão do Zig evita estado global oculto, então, em vez de você manter um gerador de números aleatórios próprio, suas funções recebem uma interface std.Random da qual extraem valores. Os testes passam um gerador inicializado com std.testing.random_seed e verificam que geradores com a mesma semente produzem os mesmos personagens.

Verificação da aleatoriedade

A distribuição dos seus valores de atributo é verificada por testes do qui-quadrado a um nível de significância de p < 0.0001:

  • os valores retornados por ability são comparados com a distribuição esperada;
  • cada uma das seis habilidades de um personagem é comparada com a distribuição esperada;
  • o padrão de valores pares e ímpares ao longo das seis habilidades de um personagem é comparado com o que habilidades independentes produziriam.

Uma implementação correta tem menos de 0,01% de chance de falhar em cada teste.

Consulte as instruções acima para ver a definição do que é um valor de atributo.

Editar via GitHub O link abre em uma nova janela ou aba
Zig Exercism

Tudo pronto para começar Personagem de D&D?

Crie sua conta no Exercism para aprender e dominar Zig com 104 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Personagem de D&D!

Vamos explorar como gerar rolagens de dados (aparentemente) aleatórias. Você vai aprender sobre sementes, números pseudoaleatórios e algumas armadilhas comuns. Por fim, vamos ver como o teste baseado em propriedades é ótimo para testar funções que retornam valores aleatórios.