Italie vs France – le duel des joueurs de foot !

// === Shortcode [duel_it_fr] : Duel Italie vs France (HTML + JS inline) === add_action(‘init’, function(){ add_shortcode(‘duel_it_fr’, function(){ ob_start(); ?>

Duel 🇮🇹 Italie vs 🇫🇷 France — Simulateur

Tire deux joueurs au sort, calcule des stats et simule un match en 90’.

🇮🇹 Italien GÉNÉRER
—
🇫🇷 Français GÉNÉRER
—
Stat 🇮🇹 Italien 🇫🇷 Français

đź§Ş Simulation

Seed : —

Score : —
Lance un match pour voir les temps forts.
    🔗 Référence football : UEFA.com
    >>19)}return function(){h=Math.imul(h^(h>>>16),2246822507);h=Math.imul(h^(h>>>13),3266489909);return (h^=h>>>16)>>>0}} function mulberry32(a){return function(){let t=a+=0x6D2B79F5;t=Math.imul(t^(t>>>15),t|1);t^=t+Math.imul(t^(t>>>7),t|61);return ((t^(t>>>14))>>>0)/4294967296}} const clamp=(n,min,max)=>Math.max(min,Math.min(max,n));const pick=(arr,r)=>arr[Math.floor(r()*arr.length)];const toPct=v=>Math.round(v); function genStatsForName(name){const seed=xmur3(name)();const rnd=mulberry32(seed);const base={vitesse:clamp(40+rnd()*60+(rnd()-0.5)*12,35,98),technique:clamp(45+rnd()*55+(rnd()-0.5)*14,35,99),endurance:clamp(50+rnd()*45+(rnd()-0.5)*10,40,95),puissance:clamp(40+rnd()*55+(rnd()-0.5)*14,35,96),vision:clamp(45+rnd()*50+(rnd()-0.5)*12,35,97),finition:clamp(40+rnd()*55+(rnd()-0.5)*16,30,99),defense:clamp(40+rnd()*55+(rnd()-0.5)*16,30,98)};const legends=[« Zinedine Zidane », »Michel Platini », »Thierry Henry », »Paolo Maldini », »Franco Baresi », »Roberto Baggio », »Francesco Totti », »Andrea Pirlo », »Gianluigi Buffon »];if(legends.includes(name)){base.technique=clamp(base.technique+8,35,99);base.vision=clamp(base.vision+7,35,99)}const ovr=Math.round(0.18*base.technique+0.16*base.vitesse+0.14*base.endurance+0.14*base.puissance+0.14*base.vision+0.12*base.finition+0.12*base.defense);return {name,seed,…Object.fromEntries(Object.entries(base).map(([k,v])=>[k,toPct(v)])),ovr}} function statBar(label,value){return ‘
    ‘+label+’‘+value+’
    ‘} function boot(){ const root=document.getElementById(‘duel-it-fr’); if(!root) return; const selIT=document.getElementById(‘select-it’); const selFR=document.getElementById(‘select-fr’); italians.forEach(n=>{const o=document.createElement(‘option’);o.value=n;o.textContent=n;selIT.appendChild(o)}); french.forEach(n=>{const o=document.createElement(‘option’);o.value=n;o.textContent=n;selFR.appendChild(o)}); const nameIT=document.getElementById(‘name-it’),nameFR=document.getElementById(‘name-fr’); const statsIT=document.getElementById(‘stats-it’),statsFR=document.getElementById(‘stats-fr’); const ovrIT=document.getElementById(‘ovr-it’),ovrFR=document.getElementById(‘ovr-fr’); const tbody=document.getElementById(‘tbody-compare’); const eventsEl=document.getElementById(‘events’),scoreEl=document.getElementById(‘score’),bilanEl=document.getElementById(‘bilan’),seedEl=document.getElementById(‘seed’); let P1=null,P2=null; function renderPlayers(){ if(!P1||!P2) return; nameIT.textContent=P1.name; nameFR.textContent=P2.name; ovrIT.textContent=’OVR ‘+P1.ovr; ovrFR.textContent=’OVR ‘+P2.ovr; statsIT.innerHTML=statBar(‘Vitesse’,P1.vitesse)+statBar(‘Technique’,P1.technique)+statBar(‘Endurance’,P1.endurance)+statBar(‘Puissance’,P1.puissance)+statBar(‘Vision’,P1.vision)+statBar(‘Finition’,P1.finition)+statBar(‘DĂ©fense’,P1.defense); statsFR.innerHTML=statBar(‘Vitesse’,P2.vitesse)+statBar(‘Technique’,P2.technique)+statBar(‘Endurance’,P2.endurance)+statBar(‘Puissance’,P2.puissance)+statBar(‘Vision’,P2.vision)+statBar(‘Finition’,P2.finition)+statBar(‘DĂ©fense’,P2.defense); const rows=[[‘Vitesse’,P1.vitesse,P2.vitesse],[‘Technique’,P1.technique,P2.technique],[‘Endurance’,P1.endurance,P2.endurance],[‘Puissance’,P1.puissance,P2.puissance],[‘Vision’,P1.vision,P2.vision],[‘Finition’,P1.finition,P2.finition],[‘DĂ©fense’,P1.defense,P2.defense],[‘OVR’,P1.ovr,P2.ovr]]; tbody.innerHTML=rows.map((r,i)=>{const style=’padding:10px 12px;border-bottom:1px solid #e5e7eb;’;const last=i===rows.length-1;return ‘‘+r[0]+’‘+r[1]+’‘+r[2]+’‘}).join( »); } function clearMatch(){ eventsEl.innerHTML= »; scoreEl.textContent=’Score : —’; bilanEl.textContent=’Lance un match pour voir les temps forts.’; } function drawRandom(){ const nowSeed=String(Date.now()); const r=mulberry32(xmur3(nowSeed)()); const nIT=selIT.value||pick(italians,r); const nFR=selFR.value||pick(french,r); P1=genStatsForName(nIT); P2=genStatsForName(nFR); renderPlayers(); clearMatch(); seedEl.textContent=’Seed : ‘+nowSeed; } function simulate(){ if(!P1||!P2){drawRandom()} const seedBase=P1.seed^P2.seed; const rnd=mulberry32(seedBase); const w=rnd(); const meteo=w<.25?'pluie fine':w<.5?'sec':w<.75?'venteux':'lourd et orageux'; const meteoMod=w<.25?-2:w<.5?0:w<.75?-1:-3; const atk1=0.45*P1.technique+0.25*P1.vitesse+0.15*P1.finition+0.15*P1.vision; const def1=0.4*P1.defense+0.3*P1.endurance+0.3*P1.puissance; const atk2=0.45*P2.technique+0.25*P2.vitesse+0.15*P2.finition+0.15*P2.vision; const def2=0.4*P2.defense+0.3*P2.endurance+0.3*P2.puissance; let g1=0,g2=0; let minutes=[6,14,23,31,44,52,61,73,81,89]; let lines=['Coup d\\u2019envoi. Conditions : '+meteo+'.']; minutes.forEach(m=>{ const chance1=(atk1-0.85*def2+(rnd()*20-10)+meteoMod)/100; const chance2=(atk2-0.85*def1+(rnd()*20-10)+meteoMod)/100; const pOcc1=Math.max(0.05,Math.min(0.6,0.22+chance1)); const pOcc2=Math.max(0.05,Math.min(0.6,0.22+chance2)); const who=rnd(); if(who<0.5 && rnd()=0.5 && rnd()g2?(‘Victoire italienne de ‘+P1.name+’ âś…’):g2>g1?(‘Victoire française de ‘+P2.name+’ âś…’):(‘Match nul entre ‘+P1.name+’ et ‘+P2.name+’ 🤝’); document.getElementById(‘bilan’).textContent=verdict; document.getElementById(‘seed’).textContent=’Seed : ‘+seedBase+’ • mĂ©tĂ©o: ‘+meteo; document.getElementById(‘events’).innerHTML=lines.map(li=>’
  • ‘+li+’
  • ‘).join( »); } document.getElementById(‘btn-random’).addEventListener(‘click’,drawRandom); document.getElementById(‘btn-sim’).addEventListener(‘click’,simulate); document.getElementById(‘btn-reset’).addEventListener(‘click’,function(){ selIT.value= »; selFR.value= »; P1=null; P2=null; nameIT.textContent=’—’; nameFR.textContent=’—’; statsIT.innerHTML= »; statsFR.innerHTML= »; ovrIT.textContent=’GÉNÉRER’; ovrFR.textContent=’GÉNÉRER’; document.getElementById(‘tbody-compare’).innerHTML= »; document.getElementById(‘events’).innerHTML= »; document.getElementById(‘score’).textContent=’Score : —’; document.getElementById(‘bilan’).textContent=’Lance un match pour voir les temps forts.’; document.getElementById(‘seed’).textContent=’Seed : —’; }); // Tirage initial drawRandom(); } if(document.readyState===’loading’){document.addEventListener(‘DOMContentLoaded’,boot);} else {boot();} })(); JS; wp_add_inline_script(‘duel-it-fr-empty’, $js); return $html; }); });
    Scroll to Top