130:00 🕒🎉
💰 ¥0
🎚️賞金アップレバー:
🎯 ミッション: 残り90分まで!
🔧 レバー数: 0
💴 賞金単価: ¥100
💴 賞金単価: ¥100
🏁 ミッション終了 🏁
💎 賞金単価をアップせよ!
```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>逃走中タイマー風アプリ</title> <style> @keyframes bounce { 0%, 20%, 50%, 80%, 100% { transform: translateY(0); } 40% { transform: translateY(-20px); } 60% { transform: translateY(-10px); } } @keyframes flash { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .animate-bounce { animation: bounce 2s infinite; } .animate-flash { animation: flash 1s infinite; } @keyframes shake { 0% { transform: rotate(0deg); } 25% { transform: rotate(5deg); } 50% { transform: rotate(0deg); } 75% { transform: rotate(-5deg); } 100% { transform: rotate(0deg); } } .animate-shake { animation: shake 0.5s; } </style> </head> <body> <div id="timer" style="font-size:32px; text-align:center; margin-top:20px;">130:00 🕒🎉</div> <div id="reward" style="font-size:24px; text-align:center; margin-top:10px;">💰 ¥0</div> <div id="controls" style="text-align:center; margin-top:20px;"> <button id="start" style="font-size:16px; margin:5px;">🏁スタート</button> <button id="stop" style="font-size:16px; margin:5px;">⏹️ストップ</button> <button id="fast" style="font-size:16px; margin:5px;">⏩早送り</button> <button id="rewind" style="font-size:16px; margin:5px;">⏪巻き戻し</button> <button id="reset" style="font-size:16px; margin:5px;">🔄リセット</button> </div> <div id="lever-section" style="text-align:center; margin-top:20px; display:none;"> <span>🎚️賞金アップレバー:</span> <button class="lever" style="font-size:20px; margin:5px;">🔧</button> <button class="lever" style="font-size:20px; margin:5px;">🔧</button> <button class="lever" style="font-size:20px; margin:5px;">🔧</button> </div> <div id="mission" style="text-align:center; margin-top:10px; display:none;"> 🎯 ミッション: 残り90分まで! </div> <div id="status" style="position:absolute; top:10px; right:10px; text-align:right; display:none;"> 🔧 レバー数: <span id="lever-count">0</span><br> 💴 賞金単価: ¥<span id="unit">100</span> </div> <div id="end-message" style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); font-size:24px; display:none;"> 🏁 ミッション終了 🏁 </div> <div id="upgrade-message" style="position:absolute; top:70px; right:10px; font-size:16px; display:none;"> 💎 賞金単価をアップせよ! </div> <script> let totalSeconds = 130 * 60; let reward = 0; let timerInterval; let unit = 100; let leverCount = 0; let missionActive = false; const timerElement = document.getElementById('timer'); const rewardElement = document.getElementById('reward'); const startBtn = document.getElementById('start'); const stopBtn = document.getElementById('stop'); const fastBtn = document.getElementById('fast'); const rewindBtn = document.getElementById('rewind'); const resetBtn = document.getElementById('reset'); const leverSection = document.getElementById('lever-section'); const levers = document.querySelectorAll('.lever'); const statusSection = document.getElementById('status'); const leverCountElement = document.getElementById('lever-count'); const unitElement = document.getElementById('unit'); const missionElement = document.getElementById('mission'); const endMessage = document.getElementById('end-message'); const upgradeMessage = document.getElementById('upgrade-message'); let oneMinuteAudio = new Audio('data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAESsAACJWAAACABAAZGF0YRAAAAAA'); // Silent audio function updateDisplay() { let minutes = Math.floor(totalSeconds / 60); let seconds = totalSeconds % 60; timerElement.textContent = `${String(minutes).padStart(2,'0')}:${String(seconds).padStart(2,'0')} 🕒🎉`; rewardElement.textContent = `💰 ¥${reward.toLocaleString()}`; leverCountElement.textContent = leverCount; unitElement.textContent = unit; } function startTimer() { if (timerInterval) return; timerInterval = setInterval(() => { if (totalSeconds > 0) { totalSeconds--; reward += unit; updateDisplay(); if (totalSeconds === 1) { oneMinuteAudio.play(); } if (totalSeconds === 100 * 60 && !missionActive) { missionActive = true; missionElement.style.display = 'block'; leverSection.style.display = 'block'; upgradeMessage.style.display = 'block'; statusSection.style.display = 'block'; } if (totalSeconds === 90 * 60) { endMission(); } } else { clearInterval(timerInterval); } }, 1000); } function stopTimer() { clearInterval(timerInterval); timerInterval = null; } function fastForward() { if (totalSeconds > 60) { totalSeconds -= 60; reward += 60 * unit; updateDisplay(); } } function rewind() { totalSeconds += 60; reward -= 60 * unit; if (reward < 0) reward = 0; updateDisplay(); } function resetTimer() { stopTimer(); totalSeconds = 130 * 60; reward = 0; unit = 100; leverCount = 0; missionActive = false; leverSection.style.display = 'none'; missionElement.style.display = 'none'; statusSection.style.display = 'none'; upgradeMessage.style.display = 'none'; endMessage.style.display = 'none'; updateDisplay(); } function endMission() { stopTimer(); endMessage.style.display = 'block'; setTimeout(() => { endMessage.style.display = 'none'; }, 10000); upgradeMessage.style.display = 'none'; missionElement.style.display = 'none'; } startBtn.addEventListener('click', () => { startBtn.classList.add('animate-bounce'); setTimeout(() => { startBtn.classList.remove('animate-bounce'); }, 1000); startTimer(); }); stopBtn.addEventListener('click', () => { stopBtn.classList.add('animate-flash'); setTimeout(() => { stopBtn.classList.remove('animate-flash'); }, 1000); stopTimer(); }); fastBtn.addEventListener('click', () => { fastBtn.classList.add('animate-shake'); setTimeout(() => { fastBtn.classList.remove('animate-shake'); }, 500); fastForward(); }); rewindBtn.addEventListener('click', () => { rewindBtn.classList.add('animate-shake'); setTimeout(() => { rewindBtn.classList.remove('animate-shake'); }, 500); rewind(); }); resetBtn.addEventListener('click', () => { resetBtn.classList.add('animate-flash'); setTimeout(() => { resetBtn.classList.remove('animate-flash'); }, 1000); resetTimer(); }); levers.forEach((lever) => { lever.addEventListener('click', () => { if (missionActive && totalSeconds <= 100 * 60 && totalSeconds > 90 * 60 && leverCount < 3) { lever.classList.add('animate-shake'); setTimeout(() => { lever.classList.remove('animate-shake'); }, 500); leverCount++; unit += 100; upgradeMessage.textContent = `🔼 賞金単価をアップしました!`; updateDisplay(); if (leverCount === 3) { leverSection.style.display = 'none'; } } }); }); updateDisplay(); </script> </body> </html> ```