https://www.youtube.com/watch?v=fCX-lMNShwQ

Até aqui, vimos como gerar números pseudoaleatórios em C. No entanto, os valores produzidos pela função rand() normalmente são inteiros muito grandes, o que nem sempre é adequado para problemas práticos.

Em muitos casos, precisamos ajustar o resultado sorteado para um intervalo específico. Um exemplo bastante conhecido é a simulação de lançamentos de dados, comum em jogos de tabuleiro e RPG.

Suponha, por exemplo, que desejamos representar no programa o lançamento de um dado de 6 faces. Nesse caso, não faz sentido obter valores muito altos, como os produzidos diretamente por rand(). O ideal é restringir o sorteio ao intervalo de 1 a 6.

De forma mais geral, podemos construir uma função capaz de simular o lançamento de um dado com qualquer quantidade de faces, além de permitir o lançamento de vários dados em sequência. Esse tipo de função é bastante útil para exercitar:

Vamos considerar a seguinte situação: imagine que você queira construir um programa para simular lançamentos de dados em uma partida de RPG. Nesse contexto, poderíamos desejar comandos equivalentes a lançamentos como 1d6, 2d8, 4d4 ou 1d12, em que o primeiro número indica a quantidade de dados e o segundo indica o número de faces de cada dado.

A ideia é utilizar a matemática para transformar os valores gerados por rand() em resultados compatíveis com a quantidade de faces desejada. Assim, em vez de obter valores arbitrariamente grandes, passamos a trabalhar com resultados coerentes com a aplicação.

A seguir, assista ao vídeo, no qual é apresentada a implementação de uma função que recebe o número de faces do dado e a quantidade de lançamentos a serem realizados:

Com isso, torna-se possível simular diferentes tipos de jogadas de forma simples e reutilizável, como uma adaga 4d4, uma alabarda 1d12 ou qualquer outra combinação definida pelas regras do jogo.

Existem muitas outras funções úteis nas bibliotecas padrão da linguagem C, mas, por enquanto, o conjunto apresentado nesta seção já é suficiente para ampliar bastante as possibilidades dos nossos programas.

Pratique o uso de funções sempre que possível, inclusive revisitando códigos que você já produziu. Tente identificar quais trechos podem ser reorganizados em funções e de que forma essa modularização pode tornar o programa mais claro, reutilizável e menos suscetível a erros.