drawRoad(); drawObstacles(); drawCar(); if(checkCollision()){ running = false; gameOver = true; showOverlay('ゲームオーバー\nスコア: '+score+'', true); return; } requestAnimationFrame(loop); } // 入力 window.addEventListener('keydown', e => { if(gameOver) return; if(e.key === 'ArrowLeft' || e.key === 'a' || e.key === 'A') car.lane = Math.max(0, car.lane-1); if(e.key === 'ArrowRight' || e.key === 'd' || e.key === 'D') car.lane = Math.min(lanes-1, car.lane+1); if(e.key === 'p' || e.key === 'P') togglePause(); }); leftBtn.addEventListener('pointerdown', ()=>{ if(!gameOver) car.lane = Math.max(0, car.lane-1); }); rightBtn.addEventListener('pointerdown', ()=>{ if(!gameOver) car.lane = Math.min(lanes-1, car.lane+1); }); // タッチスライドで操作 let startX = null; canvas.addEventListener('pointerdown', e => { startX = e.clientX; }); canvas.addEventListener('pointerup', e => { if(startX === null) return; const dx = e.clientX - startX; if(Math.abs(dx) > 20){ if(dx < 0) car.lane = Math.max(0, car.lane-1); else car.lane = Math.min(lanes-1, car.lane+1); } startX = null; }); // ポーズ pauseBtn.addEventListener('click', ()=>{ togglePause(); }); function togglePause(){ if(gameOver) return; running = !running; if(running) { hideOverlay(); loop(); } else { showOverlay('一時停止', false); } } function showOverlay(text, showRestart){ overlay.style.display='flex'; panel.innerHTML = '