<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد حسین صادقی زاده</title>
        <link>https://virgool.io/feed/@m_83681521</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 17:06:58</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>محمد حسین صادقی زاده</title>
            <link>https://virgool.io/@m_83681521</link>
        </image>

                    <item>
                <title>بازی زوبا</title>
                <link>https://virgool.io/@m_83681521/%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B2%D9%88%D8%A8%D8%A7-w9jk3vtfpxxm</link>
                <description>&lt;!DOCTYPE html&gt;&lt;html lang=&quot;fa&quot; dir=&quot;rtl&quot;&gt;&lt;head&gt;    &lt;meta charset=&quot;UTF-8&quot;&gt;    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover&quot;&gt;    &lt;title&gt;🐾 زوبا ایرانی | نبرد قهرمانان | تمام لمسی&lt;/title&gt;    &lt;style&gt;        *{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}        body{            background:#0a0f08;            display:flex;justify-content:center;align-items:center;            height:100vh;overflow:hidden;            font-family:&#039;Segoe UI&#039;,Tahoma,sans-serif;            touch-action:manipulation;            user-select:none;-webkit-user-select:none;            position:fixed;width:100%;        }        #game-wrapper{            position:relative;            width:100%;max-width:450px;            aspect-ratio:9/16;max-height:100vh;            border:3px solid #ffb020;            border-radius:20px;overflow:hidden;            box-shadow:0 0 50px rgba(255,140,0,0.5);            background:#2d5a1e;        }        canvas{display:block;width:100%;height:100%;}                #ui-layer{            position:absolute;top:8px;left:8px;right:8px;            display:flex;justify-content:space-between;            pointer-events:none;z-index:10;gap:6px;        }        .ui-box{            background:rgba(0,0,0,0.7);border:2px solid #e6a817;            border-radius:12px;padding:5px 10px;color:#ffd966;            font-weight:bold;font-size:13px;backdrop-filter:blur(4px);            text-align:center;min-width:65px;        }        .hp-outer{width:100%;height:6px;background:#331111;border-radius:8px;margin-top:3px;overflow:hidden;border:1px solid #a33;}        .hp-inner{height:100%;width:100%;background:linear-gradient(90deg,#f22,#f77);border-radius:8px;transition:width 0.2s;}                #hero-select{            position:absolute;top:0;left:0;width:100%;height:100%;            background:rgba(0,0,0,0.93);z-index:50;            display:flex;flex-direction:column;align-items:center;            justify-content:center;color:#ffcc44;overflow-y:auto;padding:20px;        }        #hero-select h2{font-size:22px;margin-bottom:4px;text-shadow:0 0 20px #ff8800;}        .hero-grid{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;max-width:380px;margin-top:8px;}        .hero-card{            width:110px;height:140px;background:rgba(20,20,20,0.85);            border:3px solid #5a4a2a;border-radius:20px;            display:flex;flex-direction:column;align-items:center;            justify-content:center;cursor:pointer;transition:all 0.2s;            color:#ddd;font-weight:bold;font-size:12px;gap:5px;        }        .hero-card.selected{border-color:#ffcc00;box-shadow:0 0 30px #ffaa00;background:rgba(40,30,10,0.9);transform:scale(1.05);}        .hero-emoji{font-size:38px;}        .hero-stats{font-size:8px;color:#aaa;line-height:1.3;text-align:center;}        #start-btn{            margin-top:15px;padding:10px 40px;font-size:17px;            background:#ffaa00;border:none;border-radius:30px;            color:#0a0a0a;font-weight:bold;cursor:pointer;            box-shadow:0 0 25px #ff8800;        }                #mobile-controls{            position:absolute;bottom:20px;left:0;right:0;            z-index:20;display:flex;justify-content:space-between;            padding:0 15px;pointer-events:none;        }        #joystick-container{            width:90px;height:90px;pointer-events:auto;            position:relative;        }        #joystick-base{            width:90px;height:90px;border-radius:50%;            background:rgba(255,255,255,0.2);border:3px solid #ffbb44;            position:relative;backdrop-filter:blur(5px);        }        #joystick-thumb{            width:40px;height:40px;border-radius:50%;            background:rgba(255,200,80,0.8);            position:absolute;top:25px;left:25px;            transition:0.05s;pointer-events:none;        }        #right-buttons{            display:flex;flex-direction:column;gap:12px;pointer-events:auto;align-items:center;        }        #btn-special{            width:60px;height:60px;border-radius:50%;            background:rgba(138,43,226,0.5);border:3px solid #bb88ff;            font-size:26px;display:flex;align-items:center;justify-content:center;            backdrop-filter:blur(5px);color:white;        }        #btn-shoot{            width:70px;height:70px;border-radius:50%;            background:rgba(255,80,20,0.5);border:3px solid #ff8844;            font-size:30px;display:flex;align-items:center;justify-content:center;            backdrop-filter:blur(5px);color:white;        }        .cooldown-indicator{            position:absolute;font-size:20px;color:#fff;text-shadow:0 0 10px #000;            pointer-events:none;        }                #gameover-screen{            position:absolute;top:0;left:0;width:100%;height:100%;            background:rgba(0,0,0,0.85);z-index:40;            display:none;flex-direction:column;align-items:center;            justify-content:center;color:#ffd966;font-size:24px;font-weight:bold;        }        #gameover-screen button{            margin-top:18px;padding:10px 30px;font-size:17px;            background:#ffaa00;border:none;border-radius:30px;            font-weight:bold;cursor:pointer;        }    &lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;div id=&quot;game-wrapper&quot;&gt;    &lt;canvas id=&quot;gameCanvas&quot;&gt;&lt;/canvas&gt;        &lt;div id=&quot;ui-layer&quot;&gt;        &lt;div class=&quot;ui-box&quot;&gt;⭐ &lt;span id=&quot;scoreDisp&quot;&gt;0&lt;/span&gt;&lt;br&gt;💀 &lt;span id=&quot;killDisp&quot;&gt;0&lt;/span&gt;&lt;/div&gt;        &lt;div class=&quot;ui-box&quot; style=&quot;width:115px;&quot;&gt;❤️ &lt;span id=&quot;hpText&quot;&gt;120&lt;/span&gt;            &lt;div class=&quot;hp-outer&quot;&gt;&lt;div class=&quot;hp-inner&quot; id=&quot;hpFill&quot;&gt;&lt;/div&gt;&lt;/div&gt;        &lt;/div&gt;        &lt;div class=&quot;ui-box&quot;&gt;⚡ &lt;span id=&quot;specialDisp&quot;&gt;آماده&lt;/span&gt;&lt;/div&gt;    &lt;/div&gt;    &lt;div id=&quot;hero-select&quot;&gt;        &lt;h2&gt;🐾 قهرمانت رو انتخاب کن&lt;/h2&gt;        &lt;div style=&quot;font-size:11px;color:#cca;margin-bottom:6px;&quot;&gt;هر قهرمان قدرت منحصربهفرد داره&lt;/div&gt;        &lt;div class=&quot;hero-grid&quot; id=&quot;heroGrid&quot;&gt;&lt;/div&gt;        &lt;button id=&quot;start-btn&quot;&gt;🎮 شروع نبرد!&lt;/button&gt;    &lt;/div&gt;    &lt;div id=&quot;mobile-controls&quot;&gt;        &lt;div id=&quot;joystick-container&quot;&gt;            &lt;div id=&quot;joystick-base&quot;&gt;                &lt;div id=&quot;joystick-thumb&quot;&gt;&lt;/div&gt;            &lt;/div&gt;        &lt;/div&gt;        &lt;div id=&quot;right-buttons&quot;&gt;            &lt;div id=&quot;btn-special&quot;&gt;⚡&lt;/div&gt;            &lt;div id=&quot;btn-shoot&quot;&gt;🔫&lt;/div&gt;        &lt;/div&gt;    &lt;/div&gt;    &lt;div id=&quot;gameover-screen&quot;&gt;        &lt;span&gt;💔 شکست خوردی!&lt;/span&gt;        &lt;span style=&quot;font-size:14px;margin-top:5px;&quot; id=&quot;finalScore&quot;&gt;&lt;/span&gt;        &lt;button id=&quot;restartBtn&quot;&gt;🔄 دوباره&lt;/button&gt;    &lt;/div&gt;&lt;/div&gt;(function(){    const canvas=document.getElementById(&#039;gameCanvas&#039;);    const ctx=canvas.getContext(&#039;2d&#039;);    const W=450,H=800;    canvas.width=W;canvas.height=H;    const scoreDisp=document.getElementById(&#039;scoreDisp&#039;);    const killDisp=document.getElementById(&#039;killDisp&#039;);    const hpFill=document.getElementById(&#039;hpFill&#039;);    const hpText=document.getElementById(&#039;hpText&#039;);    const specialDisp=document.getElementById(&#039;specialDisp&#039;);    const heroSelectDiv=document.getElementById(&#039;hero-select&#039;);    const heroGrid=document.getElementById(&#039;heroGrid&#039;);    const startBtn=document.getElementById(&#039;start-btn&#039;);    const gameoverScreen=document.getElementById(&#039;gameover-screen&#039;);    const finalScoreSpan=document.getElementById(&#039;finalScore&#039;);    const restartBtn=document.getElementById(&#039;restartBtn&#039;);    const joyThumb=document.getElementById(&#039;joystick-thumb&#039;);    const joyBase=document.getElementById(&#039;joystick-base&#039;);    const btnSpecial=document.getElementById(&#039;btn-special&#039;);    const btnShoot=document.getElementById(&#039;btn-shoot&#039;);    let gameRunning=false,gameOver=false;    let score=0,kills=0;    let player,enemies=[],bullets=[],enemyBullets=[];    let enemySpawnTimer=0;    const MAP_W=2000,MAP_H=2000;    let bushes=[],walls=[],waters=[];    // Generate map    for(let i=0;i&lt;120;i++) bushes.push({x:Math.random()*MAP_W,y:Math.random()*MAP_H,r:25+Math.random()*35});    for(let i=0;i&lt;50;i++) walls.push({x:Math.random()*MAP_W,y:Math.random()*MAP_H,w:50+Math.random()*80,h:25+Math.random()*35});    for(let i=0;i&lt;15;i++) waters.push({x:Math.random()*MAP_W,y:Math.random()*MAP_H,r:60+Math.random()*90});    const ALL_HEROES={        lion:{name:&#039;شیر&#039;,emoji:&#039;🦁&#039;,hp:130,speed:3.5,fireRate:15,damage:20,color:&#039;#e6a817&#039;,              special:&#039;غرش&#039;,specialCD:180,specialDesc:&#039;دشمنان نزدیک میلرزند و کند میشوند&#039;},        cheetah:{name:&#039;یوزپلنگ&#039;,emoji:&#039;🐆&#039;,hp:90,speed:6.2,fireRate:10,damage:14,color:&#039;#e6b800&#039;,                special:&#039;دوی سریع&#039;,specialCD:120,specialDesc:&#039;سرعت ۲ برابر برای ۳ ثانیه&#039;},        fox:{name:&#039;روباه&#039;,emoji:&#039;🦊&#039;,hp:100,speed:5.0,fireRate:9,damage:13,color:&#039;#ff8844&#039;,             special:&#039;فریب&#039;,specialCD:150,specialDesc:&#039;دشمنان ۲ ثانیه گیج میشوند&#039;},        turtle:{name:&#039;لاکپشت&#039;,emoji:&#039;🐢&#039;,hp:200,speed:2.0,fireRate:20,damage:25,color:&#039;#66aa44&#039;,                special:&#039;سپر لاکی&#039;,specialCD:200,specialDesc:&#039;۳ ثانیه آسیب نمیبینی&#039;},        monkey:{name:&#039;میمون&#039;,emoji:&#039;🐵&#039;,hp:95,speed:5.5,fireRate:8,damage:12,color:&#039;#cc8844&#039;,                special:&#039;موز پرتاب&#039;,specialCD:100,specialDesc:&#039;پرتاب ۳ موز انفجاری&#039;},        deer:{name:&#039;گوزن&#039;,emoji:&#039;🦌&#039;,hp:110,speed:4.8,fireRate:11,damage:16,color:&#039;#bb7733&#039;,              special:&#039;ضربه شاخ&#039;,specialCD:140,specialDesc:&#039;پرتاب دشمنان نزدیک به عقب&#039;},        eagle:{name:&#039;عقاب&#039;,emoji:&#039;🦅&#039;,hp:85,speed:5.8,fireRate:10,damage:18,color:&#039;#ddcc88&#039;,               special:&#039;پرواز&#039;,specialCD:160,specialDesc:&#039;از روی موانع میپری&#039;},        croc:{name:&#039;تمساح&#039;,emoji:&#039;🐊&#039;,hp:150,speed:3.0,fireRate:16,damage:28,color:&#039;#558844&#039;,              special:&#039;آرواره مرگ&#039;,specialCD:190,specialDesc:&#039;گاز مرگبار به نزدیکترین دشمن&#039;},        gorilla:{name:&#039;گوریل&#039;,emoji:&#039;🦍&#039;,hp:140,speed:3.8,fireRate:14,damage:22,color:&#039;#776655&#039;,                 special:&#039;مشت زمین&#039;,specialCD:170,specialDesc:&#039;ضربه به همه دشمنان اطراف&#039;}    };    let selectedHero=&#039;lion&#039;;    let heroData=ALL_HEROES[selectedHero];    let specialCooldown=0;    function buildHeroCards(){        heroGrid=&#039;&#039;;        Object.entries(ALL_HEROES).forEach(([key,h])=&gt;{            const card=document.createElement(&#039;div&#039;);            card.className=&#039;hero-card&#039;+(key===selectedHero?&#039; selected&#039;:&#039;&#039;);            card=`&lt;div class=&quot;hero-emoji&quot;&gt;${h.emoji}&lt;/div&gt;&lt;div&gt;${h.name}&lt;/div&gt;            &lt;div class=&quot;hero-stats&quot;&gt;❤️${h.hp} ⚡${h.speed} 💥${h.damage}&lt;br&gt;✨${h.special}&lt;/div&gt;`;            card.addEventListener(&#039;click&#039;,()=&gt;{                document.querySelectorAll(&#039;.hero-card&#039;).forEach(c=&gt;c.classList.remove(&#039;selected&#039;));                card.classList.add(&#039;selected&#039;);                selectedHero=key;                heroData=ALL_HEROES[key];            });            heroGrid(card);        });    }    buildHeroCards();    // Joystick handling    let joystick={dx:0,dy:0,active:false};    let joyId=null;    joyBase.addEventListener(&#039;touchstart&#039;,(e)=&gt;{        e.preventDefault();joyId=e.changedTouches[0].identifier;joystick.active=true;    });    joyBase.addEventListener(&#039;touchmove&#039;,(e)=&gt;{        e.preventDefault();        for(let t of e.changedTouches){            if(t.identifier===joyId){                const rect=joyBase.getBoundingClientRect();                const cx=rect.left+rect.width/2,cy=rect.top+rect.height/2;                let dx=t.clientX-cx,dy=t.clientY-cy;                const dist=Math.sqrt(dx*dx+dy*dy);                const maxDist=35;                if(dist&gt;maxDist){dx=dx/dist*maxDist;dy=dy/dist*maxDist;}                joystick.dx=dx/maxDist;joystick.dy=dy/maxDist;                joyThumb.style.left=(25+dx)+&#039;px&#039;;joyThumb.style.top=(25+dy)+&#039;px&#039;;            }        }    });    joyBase.addEventListener(&#039;touchend&#039;,(e)=&gt;{        for(let t of e.changedTouches){            if(t.identifier===joyId){joystick.active=false;joystick.dx=0;joystick.dy=0;                joyThumb.style.left=&#039;25px&#039;;joyThumb.style.top=&#039;25px&#039;;joyId=null;}        }    });    let shootDown=false;    btnShoot.addEventListener(&#039;touchstart&#039;,(e)=&gt;{e.preventDefault();shootDown=true;});    btnShoot.addEventListener(&#039;touchend&#039;,()=&gt;shootDown=false);    btnShoot.addEventListener(&#039;touchcancel&#039;,()=&gt;shootDown=false);    btnSpecial.addEventListener(&#039;touchstart&#039;,(e)=&gt;{        e.preventDefault();        if(specialCooldown&lt;=0 &amp;&amp; gameRunning &amp;&amp; !gameOver) activateSpecial();    });    function activateSpecial(){        specialCooldown=heroData.specialCD;        const p=player;        switch(selectedHero){            case &#039;lion&#039;: // غرش - کند کردن دشمنان نزدیک                enemies.forEach(e=&gt;{                    const d=Math.hypot(e.x-p.x,e.y-p.y);                    if(d&lt;180){e.slowed=60;e.speed*=0.4;}                });                break;            case &#039;cheetah&#039;: // دوی سریع                p.speedBoost=60;p.speed*=2.2;                break;            case &#039;fox&#039;: // فریب - گیج کردن                enemies.forEach(e=&gt;{                    if(Math.hypot(e.x-p.x,e.y-p.y)&lt;200)e.confused=60;                });                break;            case &#039;turtle&#039;: // سپر                p.shield=90;                break;            case &#039;monkey&#039;: // موز انفجاری                for(let i=0;i&lt;3;i++){                    setTimeout&#40;(&#41;=&gt;{                        const t=enemies[Math.floor(Math.random()*enemies.length)];                        if(t){t.hp-=25;if(t.hp&lt;=0)killEnemy(t);}                    },i*150);                }                break;            case &#039;deer&#039;: // پرتاب                enemies.forEach(e=&gt;{                    if(Math.hypot(e.x-p.x,e.y-p.y)&lt;150){                        const a=Math.atan2(e.y-p.y,e.x-p.x);                        e.x+=Math.cos(a)*120;e.y+=Math.sin(a)*120;                        e.hp-=15;if(e.hp&lt;=0)killEnemy(e);                    }                });                break;            case &#039;eagle&#039;: // پرش                p.zJump=30;p.zVel=-8;                break;            case &#039;croc&#039;:                const closest=enemies.reduce((a,b)=&gt;Math.hypot(a.x-p.x,a.y-p.y)&lt;Math.hypot(b.x-p.x,b.y-p.y)?a:b,enemies[0]);                if(closest&amp;&amp;Math.hypot(closest.x-p.x,closest.y-p.y)&lt;130){closest.hp-=40;if(closest.hp&lt;=0)killEnemy(closest);}                break;            case &#039;gorilla&#039;:                enemies.forEach(e=&gt;{if(Math.hypot(e.x-p.x,e.y-p.y)&lt;170){e.hp-=20;if(e.hp&lt;=0)killEnemy(e);}});                break;        }    }    function initGame(){        heroData=ALL_HEROES[selectedHero];        player={            x:MAP_W/2,y:MAP_H/2,radius:18,            hp:heroData.hp,maxHp:heroData.hp,            speed:heroData.speed,fireRate:heroData.fireRate,            damage:heroData.damage,fireCooldown:0,            speedBoost:0,shield:0,zJump:0,zVel:0        };        enemies=[];bullets=[];enemyBullets=[];        score=0;kills=0;specialCooldown=0;        enemySpawnTimer=0;gameOver=false;gameRunning=true;        gameoverScreen.style.display=&#039;none&#039;;heroSelectDiv.style.display=&#039;none&#039;;        updateUI();    }    function spawnEnemy(){        const a=Math.random()*Math.PI*2,d=450+Math.random()*350;        let ex=player.x+Math.cos(a)*d,ey=player.y+Math.sin(a)*d;        ex=Math.max(40,Math.min(MAP_W-40,ex));        ey=Math.max(40,Math.min(MAP_H-40,ey));        const types=[&#039;gorilla&#039;,&#039;croc&#039;,&#039;fox_bot&#039;,&#039;deer_bot&#039;];        const t=types[Math.floor(Math.random()*types.length)];        const stats={gorilla:{hp:70,sp:1.5,dmg:12,rad:18},croc:{hp:55,sp:2.2,dmg:9,rad:16},                     fox_bot:{hp:45,sp:2.8,dmg:7,rad:15},deer_bot:{hp:50,sp:2.5,dmg:8,rad:17}};        enemies.push({            x:ex,y:ey,radius:stats[t].rad,hp:stats[t].hp,maxHp:stats[t].hp,            speed:stats[t].sp,damage:stats[t].dmg,type:t,fireCooldown:0,            slowed:0,confused:0        });    }    function killEnemy(e){        const idx=enemies.indexOf(e);        if(idx&gt;-1)enemies.splice(idx,1);        kills++;score+=10;    }    function updateUI(){        scoreDisp.textContent=score;killDisp.textContent=kills;        hpFill.style.width=(player.hp/player.maxHp*100)+&#039;%&#039;;        hpText.textContent=Math.ceil(player.hp);        specialDisp.textContent=specialCooldown&gt;0?Math.ceil(specialCooldown/60)+&#039;s&#039;:&#039;⚡آماده&#039;;    }    function update(){        if(!gameRunning||gameOver)return;        // Player movement        let mx=joystick.dx*heroData.speed*(player.speedBoost&gt;0?2.2:1);        let my=joystick.dy*heroData.speed*(player.speedBoost&gt;0?2.2:1);        if(player.zJump&gt;0){my-=4;player.zJump--;}        player.x=Math.max(20,Math.min(MAP_W-20,player.x+mx));        player.y=Math.max(20,Math.min(MAP_H-20,player.y+my));        if(player.speedBoost&gt;0)player.speedBoost--;        if(player.shield&gt;0)player.shield--;        if(specialCooldown&gt;0)specialCooldown--;        // Auto-target nearest enemy for shooting        let nearestEnemy=null,nearestDist=250;        enemies.forEach(e=&gt;{            const d=Math.hypot(e.x-player.x,e.y-player.y);            if(d&lt;nearestDist){nearestDist=d;nearestEnemy=e;}        });        // Shooting        if(player.fireCooldown&gt;0)player.fireCooldown--;        if(shootDown &amp;&amp; player.fireCooldown&lt;=0 &amp;&amp; nearestEnemy){            const a=Math.atan2(nearestEnemy.y-player.y,nearestEnemy.x-player.x);            bullets.push({x:player.x,y:player.y,vx:Math.cos(a)*9,vy:Math.sin(a)*9,damage:heroData.damage});            player.fireCooldown=heroData.fireRate;        }        // Bullets        bullets.forEach(b=&gt;{b.x+=b.vx;b.y+=b.vy;});        bullets=bullets.filter(b=&gt;b.x&gt;0&amp;&amp;b.x&lt;MAP_W&amp;&amp;b.y&gt;0&amp;&amp;b.y&lt;MAP_H);        enemyBullets.forEach(b=&gt;{b.x+=b.vx;b.y+=b.vy;});        enemyBullets=enemyBullets.filter(b=&gt;b.x&gt;0&amp;&amp;b.x&lt;MAP_W&amp;&amp;b.y&gt;0&amp;&amp;b.y&lt;MAP_H);        // Bullet-enemy collision        bullets.forEach(b=&gt;{            enemies.forEach(e=&gt;{                if(Math.hypot(b.x-e.x,b.y-e.y)&lt;e.radius+5){                    e.hp-=b.damage;b.hit=true;                    if(e.hp&lt;=0)killEnemy(e);                }            });        });        bullets=bullets.filter(b=&gt;!b.hit);        // Enemy bullet-player collision        enemyBullets.forEach(b=&gt;{            if(Math.hypot(b.x-player.x,b.y-player.y)&lt;player.radius+5){                if(player.shield&lt;=0)player.hp-=b.damage||8;                b.hit=true;            }        });        enemyBullets=enemyBullets.filter(b=&gt;!b.hit);        // Enemy AI        enemies.forEach(e=&gt;{            if(e.slowed&gt;0){e.slowed--;if(e.slowed===0)e.speed*=2.5;}            if(e.confused&gt;0){e.confused--;return;}            const dx=player.x-e.x,dy=player.y-e.y,dist=Math.hypot(dx,dy);            if(dist&gt;5){e.x+=dx/dist*e.speed;e.y+=dy/dist*e.speed;}            if(e.fireCooldown&gt;0)e.fireCooldown--;            if(dist&lt;300 &amp;&amp; e.fireCooldown&lt;=0 &amp;&amp; Math.random()&lt;0.02){                const a=Math.atan2(player.y-e.y,player.x-e.x);                enemyBullets.push({x:e.x,y:e.y,vx:Math.cos(a)*7,vy:Math.sin(a)*7,damage:e.damage});                e.fireCooldown=25;            }        });        // Spawn        enemySpawnTimer--;        if(enemySpawnTimer&lt;=0 &amp;&amp; enemies.length&lt;12){            spawnEnemy();enemySpawnTimer=70+Math.random()*50;        }        if(player.hp&lt;=0){gameOver=true;gameRunning=false;gameoverScreen.style.display=&#039;flex&#039;;            finalScoreSpan.textContent=&#039;⭐ &#039;+score+&#039;  💀 &#039;+kills;}        updateUI();    }    function draw(){        ctx.clearRect(0,0,W,H);        const camX=player.x-W/2,camY=player.y-H/2;        ctx.save();ctx.translate(-camX,-camY);        // Grass bg        ctx.fillStyle=&#039;#4a8c3f&#039;;ctx.fillRect(0,0,MAP_W,MAP_H);        // Grid        ctx.strokeStyle=&#039;#3a7030&#039;;ctx.lineWidth=1;        for(let i=0;i&lt;MAP_W;i+=80){ctx.beginPath();ctx.moveTo(i,0);ctx.lineTo(i,MAP_H);ctx.stroke();}        for(let i=0;i&lt;MAP_H;i</description>
                <category>محمد حسین صادقی زاده</category>
                <author>محمد حسین صادقی زاده</author>
                <pubDate>Sun, 03 May 2026 15:20:32 +0330</pubDate>
            </item>
            </channel>
</rss>