Tirada de dados

Tira cualquier dado, del d4 al d100, en solo o en grupo. Muestra cada resultado y la suma.

Cómo funciona

Elige el tamaño del dado (d4, d6, d8, d10, d12, d20 o d100) y cuántos vas a tirar, después pulsa tirar. Cada dado se tira independientemente usando `crypto.getRandomValues` con muestreo por rechazo para garantizar una distribución uniforme — así que en un d20 sacar 17 es igual de probable que sacar 1 en cada tirada. El widget muestra cada resultado individual para que puedas verificar las tiradas (útil en D&D cuando el master pregunta "¿qué sacaste exactamente en el d20?") más la suma, que es lo que usan la mayoría de sistemas. Hasta 10 dados a la vez cubre los casos típicos: 3d6 para atributos, 4d6 desechando el menor para personaje, 2d20 con ventaja/desventaja en 5e, 1d100 para tiradas porcentuales, etc.

La fórmula

Para cada uno de N dados con S caras: byte ← crypto.getRandomValues(Uint32Array(1))[0] rechazar si byte ≥ floor(0xffffffff / S) × S (muestreo por rechazo) resultado ← (byte mod S) + 1 Total ← Σ resultados

N es el número de dados (1–10 en el widget). S es el número de caras por dado (uno de 4, 6, 8, 10, 12, 20, 100). El muestreo por rechazo importa porque 2^32 no divide exactamente entre S para la mayoría de tamaños — usar `byte mod S` directamente daría a algunos resultados una probabilidad ligeramente mayor. Descartar los bytes que caen en la pequeña zona "sobrante" por encima del último múltiplo de S mantiene la distribución uniforme. La probabilidad de rechazo es como máximo S/2^32 por intento, así que en la práctica el tiempo de espera es invisible.

Ejemplo de cálculo

  • Puntuación de habilidad de D&D: tira 3d6 → resultados [4, 6, 2] → total = 12.
  • Ventaja en 5e: tira 2d20 → [11, 18] → toma el mayor = 18.
  • Tirada porcentual: 1d100 → 73. Útil para "¿se activa la trampa?" (objetivo ≤ 80 = se activa).

Preguntas frecuentes

¿Por qué el d10 da 1–10 y no 0–9?

La mayoría de sistemas tratan el d10 como 1–10. La lectura 0–9 es específica de los dados percentiles — cuando tiras dos d10 donde uno es las decenas y otro las unidades, una cara 0 en cada uno vale 0, y 00 + 0 se lee como 100. Usamos la convención 1–10 porque sirve para el caso general (2d10 para atributos, daño en sistemas con d10, etc.) y para tiradas porcentuales hay un d100 dedicado que devuelve 1–100 directamente sin combinar dos dados.

¿Puedo tirar varios dados distintos a la vez (como 1d20 + 4d6)?

No en una sola pulsación — el widget tira un tipo de dado por vez. Para 1d20 + 4d6, tira el d20, anota el resultado, cambia el tipo a d6 y la cantidad a 4 y vuelve a tirar. Un futuro modo "tirada compleja" podría parsear notación estándar ("1d20+4d6+3") de una sola vez, pero ahora la UI sencilla mantiene los casos comunes (un tipo de dado, cantidad fija, suma opcional) fáciles de captar al instante.

¿En qué se diferencia "justo" de Math.random()?

Para la mayoría de usos lúdicos Math.random() es justo de sobra — las implementaciones modernas son buenas. Usamos crypto.getRandomValues por dos motivos: (1) elimina cualquier pregunta de "¿está sesgado el RNG?", y (2) garantiza imprevisibilidad para usos donde importe (números de lotería, sorteos de torneo, etc.). El coste es prácticamente cero — leemos unos pocos bytes por tirada.

¿El widget recuerda las tiradas entre sesiones?

No. Cada carga de página empieza sin tiradas, y refrescar o navegar fuera borra el resultado. Es intencional — el widget está pensado para tiradas rápidas y desechables; si necesitas un registro persistente (seguimiento de campaña, análisis estadístico) una libreta o un VTT específico lo hace mejor. Bonus de privacidad: nada sale a un servidor, nadie ve lo que tiraste.

Calculadoras relacionadas