Atomic Studio
/
スターシューター(テンプレートから)
0部品・0〜数百トークン
↩ 戻す
履歴
複製
💬 ことばで直す
▶ Run
🔗 共有
🚀 デプロイ
⏹
☰
▷ プレビュー
</> コード
🖥 PC
📱 スマホ
↻ 新タブ
atomic.studio/s/3728
📄 index.html
コードを直接編集して「適用」でプレビューに反映
適用 ▷
<!doctype html><html lang="ja"><head><meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"><title>スターシューター</title> <style> html,body{margin:0;height:100%;background:#0e1525;color:#f5f9fc;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif} .wrap{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:16px;box-sizing:border-box} h1{font-size:18px;margin:0;font-weight:700} .hud{font-size:14px;color:#9da9bd} .hint{font-size:12px;color:#6b7689} canvas{background:var(--bg,#11131f);border-radius:14px;box-shadow:0 12px 48px #0008;max-width:96vw;height:auto;touch-action:none} .btn{background:#6366f1;color:#fff;border:0;border-radius:10px;padding:8px 16px;font-size:14px;font-weight:600;cursor:pointer} #board{display:grid;gap:6px} .cell{display:flex;align-items:center;justify-content:center;border-radius:8px;font-weight:700;user-select:none;cursor:pointer} </style></head><body><div class="wrap"> <h1 id="title">スターシューター</h1><div class="hud" id="hud">スコア <span id="sc">0</span></div> <canvas id="cv" width="360" height="520"></canvas> <div class="hint" id="hint">← → 移動 / スペース・タップ で発射</div><button class="btn" id="restart">もう一度</button> </div> <script id="game-data" type="application/json">{"title": "スターシューター", "bg": "#05060f", "ship": "#34d399", "bullet": "#fde047", "enemy": "#f43f5e"}</script> <script> const DATA=JSON.parse(document.getElementById('game-data').textContent); document.getElementById('title').textContent=DATA.title||document.title; if(DATA.bg)document.documentElement.style.setProperty('--bg',DATA.bg); const cv=document.getElementById('cv'),x=cv.getContext('2d');let px,bul,en,sc,alive,t; function reset(){px=cv.width/2;bul=[];en=[];sc=0;alive=1;t=0;document.getElementById('sc').textContent=0;} function fire(){if(alive)bul.push({x:px,y:cv.height-40});} function step(){if(!alive)return;t++;if(t%45===0)en.push({x:Math.random()*(cv.width-30)+15,y:-10}); bul.forEach(b=>b.y-=6);en.forEach(e=>e.y+=1.8); en.forEach(e=>{bul.forEach(b=>{if(Math.abs(b.x-e.x)<16&&Math.abs(b.y-e.y)<16){e.dead=1;b.dead=1;sc+=10;document.getElementById('sc').textContent=sc;}}); if(e.y>cv.height-30&&Math.abs(e.x-px)<20)alive=0;}); bul=bul.filter(b=>!b.dead&&b.y>-10);en=en.filter(e=>!e.dead&&e.y<cv.height+20);} function draw(){x.fillStyle=DATA.bg;x.fillRect(0,0,cv.width,cv.height); x.fillStyle=DATA.enemy;en.forEach(e=>x.fillRect(e.x-12,e.y-12,24,24)); x.fillStyle=DATA.bullet;bul.forEach(b=>x.fillRect(b.x-2,b.y-8,4,12)); x.fillStyle=DATA.ship;x.beginPath();x.moveTo(px,cv.height-40);x.lineTo(px-14,cv.height-16);x.lineTo(px+14,cv.height-16);x.fill(); if(!alive){x.fillStyle='#fff';x.font='24px sans-serif';x.textAlign='center';x.fillText('GAME OVER',cv.width/2,cv.height/2);}} function loop(){step();draw();requestAnimationFrame(loop);} window.addEventListener('keydown',e=>{if(e.key==='ArrowLeft')px=Math.max(14,px-24);if(e.key==='ArrowRight')px=Math.min(cv.width-14,px+24);if(e.key===' ')fire();}); cv.addEventListener('pointerdown',fire); document.getElementById('restart').onclick=reset;reset();requestAnimationFrame(loop); window.__state=()=>({sc,alive,bul:bul.length});window.__input=()=>{fire();step();}; </script></body></html>
▸ コンソール
0部品・0〜数百トークン
✕