Booster
Un booster de dix cartes à ouvrir, avec des raretés tirées au sort comme dans un vrai paquet. Le bon exercice pour comprendre le tirage pondéré.
- Tirer au sort avec des poids
- Garantir une rare dans chaque paquet
- Retourner une carte en 3D
Pourquoi ouvrir un booster ? Tirer des cartes, c'est appliquer des probabilités : chaque rareté a sa chance de sortir. On apprend le tirage pondéré, puis on met en scène la révélation, carte par carte.
Ce widget ne vend rien : les cartes sont inventées, et le hasard est là pour le plaisir.
Pourquoi en JavaScript simple ? Un tableau de raretés, une fonction de tirage, une boucle d'affichage.
LES RARETÉS
Chaque rareté a un poids : plus il est grand, plus elle sort souvent.
const RARETES = [ { nom: 'Commune', poids: 70 }, { nom: 'Peu commune', poids: 22 }, { nom: 'Rare', poids: 7 }, { nom: 'Secrète', poids: 1 } ];LE TIRAGE PONDÉRÉ
On tire un nombre entre 0 et la somme des poids, puis on avance jusqu'à la rareté qui le contient.
function tirerRarete() { const total = RARETES.reduce((s, r) => s + r.poids, 0); let n = Math.random() * total; for (const r of RARETES) { if (n < r.poids) return r; n -= r.poids; } }LE BOOSTER
Dix cartes, avec au moins une rare garantie en dernière position, comme dans les vrais boosters.
function ouvrir() { const cartes = Array.from({ length: 9 }, tirerRarete); const derniere = tirerRarete(); cartes.push(derniere.poids <= 7 ? derniere : RARETES[2]); return cartes; }LE HTML
<button id="ouvrir">Ouvrir un booster</button> <ol id="cartes"></ol>
RÉVÉLER UNE À UNE
Chaque carte arrive face cachée. Un clic la retourne.
document.getElementById('ouvrir').addEventListener('click', () => { const ol = document.getElementById('cartes'); ol.innerHTML = ''; ouvrir().forEach(r => { const li = document.createElement('li'); li.innerHTML = '<button>Retourner</button>'; li.dataset.rarete = r.nom; ol.append(li); }); }); document.getElementById('cartes').addEventListener('click', e => { const li = e.target.closest('li'); if (!li || li.classList.contains('vue')) return; li.classList.add('vue'); li.textContent = li.dataset.rarete; });
PIÈGE 1 : Des pourcentages qui ne font pas 100
Mauvais : écrire les chances en pourcentages et en oublier un. Le total fait 98 %, et le tirage tombe parfois dans le vide.
Correct : des poids relatifs, et une somme calculée. On ajoute une rareté sans tout recalculer.
PIÈGE 2 : Relancer jusqu'à la rare
Mauvais : refaire le tirage tant qu'aucune rare n'est sortie. Le booster ne respecte plus les chances annoncées.
Correct : garantir une seule position, la dernière, et laisser les autres au hasard.
PIÈGE 3 : Le résultat lisible dans le code
Mauvais : croire qu'une carte cachée en CSS est secrète. Un coup d'œil aux outils du navigateur suffit pour tout voir.
Correct : pour un jeu, c'est sans importance. Pour un vrai tirage, le résultat ne doit arriver du serveur qu'au moment du clic.
- Vos raretés : changez les noms et les poids, ajoutez une « Alternative » à 0,5.
- Un style par rareté : une bordure lime pour les rares, un fond plein pour les secrètes, un reflet avec la Carte à reflet.
- Un bouton « Tout retourner » qui révèle les dix cartes avec un petit décalage.
- Affichez les chances sous le bouton : c'est honnête, et c'est attendu dès qu'un tirage touche à de l'argent.
- Simulez 100 000 boosters dans la console pour vérifier que les fréquences collent aux poids.
Le booster est un tableau dans un useState, et chaque carte garde son état « vue ».
La révélation change une seule carte : un map sur le tableau avec l'index cliqué.
- Booster One Piece en vrai
JS · API
Chargement des commentaires…