Lancer de dés

Lancez n'importe quel dé du d4 au d100, à l'unité ou en groupes. Chaque résultat et la somme s'affichent.

Comment ça marche

Choisissez la taille du dé (d4, d6, d8, d10, d12, d20 ou d100) et combien vous lancez, puis tapez lancer. Chaque dé est tiré indépendamment via `crypto.getRandomValues` avec échantillonnage par rejet pour garantir une distribution uniforme — donc sur un d20, obtenir 17 est exactement aussi probable que d'obtenir 1, à chaque lancer. Le widget affiche chaque résultat individuellement pour que vous puissiez vérifier (utile en D&D quand le MJ demande « tu as fait combien sur le d20 ? »), ainsi que la somme, que la plupart des systèmes utilisent. Jusqu'à 10 dés à la fois couvre les cas courants : 3d6 pour les caractéristiques, 4d6 retire le plus bas pour la création de personnage, 2d20 avantage/désavantage en 5e, 1d100 pour les jets percentile, etc.

La formule

Pour chacun des N dés à S faces : byte ← crypto.getRandomValues(Uint32Array(1))[0] rejeter si byte ≥ floor(0xffffffff / S) × S (échantillonnage par rejet) résultat ← (byte mod S) + 1 Total ← Σ résultats

N est le nombre de dés (1–10 dans le widget). S est le nombre de faces par dé (parmi 4, 6, 8, 10, 12, 20, 100). L'échantillonnage par rejet est nécessaire parce que 2^32 ne divise pas exactement S pour la plupart des tailles — utiliser `byte mod S` directement donnerait à certains résultats une probabilité légèrement plus élevée. Rejeter les octets qui tombent dans la petite zone « reste » au-dessus du dernier multiple de S maintient la distribution uniforme. La probabilité de rejet est au plus S/2^32 par tentative — en pratique, le temps d'attente est invisible.

Exemple de calcul

  • Score de caractéristique D&D : lancez 3d6 → résultats [4, 6, 2] → total = 12.
  • Avantage en 5e : lancez 2d20 → [11, 18] → prendre le plus haut = 18.
  • Test percentile : 1d100 → 73. Utilisé pour « le piège se déclenche-t-il ? » (objectif ≤ 80 = oui).

Questions fréquentes

Pourquoi le d10 donne-t-il 1–10 et pas 0–9 ?

La plupart des systèmes considèrent le d10 comme 1–10. La lecture 0–9 est spécifique aux dés percentile — quand on lance deux d10 dont un fait les dizaines et l'autre les unités, une face « 0 » sur chacun vaut 0, et « 00, 0 » se lit 100. Nous utilisons la convention 1–10 car elle couvre le cas général (2d10 pour caractéristiques, dégâts dans les systèmes d10, etc.), et pour les jets percentile il existe un d100 dédié qui renvoie directement 1–100 sans avoir à combiner deux dés.

Puis-je lancer plusieurs dés différents à la fois (comme 1d20 + 4d6) ?

Pas en un seul tap — le widget lance un seul type de dé à la fois. Pour 1d20 + 4d6, lancez le d20, notez le résultat, changez le type en d6 et la quantité à 4, puis relancez. Un futur mode « lancer complexe » pourrait parser la notation standard (« 1d20+4d6+3 ») en une seule action, mais pour l'instant l'UI plus simple garde les cas courants (un type de dé, quantité fixe, somme optionnelle) faciles à comprendre.

En quoi « équitable » diffère-t-il de Math.random() ?

Pour la plupart des usages ludiques, Math.random() est largement équitable — les implémentations modernes sont bonnes. Nous utilisons crypto.getRandomValues malgré tout pour deux raisons : (1) cela élimine toute question « le RNG est-il biaisé ? », et (2) cela garantit l'imprévisibilité pour les cas où ça compte (numéros de loterie, tirage de tournoi, etc.). Le coût est quasi nul — quelques octets par lancer.

Le widget retient-il les lancers entre les sessions ?

Non. Chaque chargement de page commence sans aucun lancer, et un refresh ou une navigation efface le résultat. C'est voulu — le widget sert aux lancers rapides et jetables ; pour un journal persistant (suivi de campagne, analyse statistique), un carnet ou un VTT dédié fera mieux. Bonus vie privée : rien n'est envoyé à un serveur, personne ne voit ce que vous avez lancé.

Calculatrices associées