```html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ZAKOS Patrol Game</title> <style> @keyframes shake { 0% { transform: translate(1px, 1px) rotate(0deg); } 10% { transform: translate(-1px, -2px) rotate(-1deg); } 20% { transform: translate(-3px, 0px) rotate(1deg); } 30% { transform: translate(3px, 2px) rotate(0deg); } 40% { transform: translate(1px, -1px) rotate(1deg); } 50% { transform: translate(-1px, 2px) rotate(-1deg); } 60% { transform: translate(-3px, 1px) rotate(0deg); } 70% { transform: translate(3px, 1px) rotate(-1deg); } 80% { transform: translate(-1px, -1px) rotate(1deg); } 90% { transform: translate(1px, 2px) rotate(0deg); } 100% { transform: translate(1px, -2px) rotate(-1deg); } } .shake { animation: shake 0.5s; animation-iteration-count: infinite; } </style> </head> <body> <div id="app" style="width: 400px; height: 400px; margin: auto; text-align: center; overflow: hidden; position: relative;"> <div id="zako-list" style="margin-top: 10px;"></div> <div id="actions" style="margin-top: 10px;"></div> <button onclick="nextTurn()" style="margin-top: 20px; padding: 10px; background-color: #FF69B4; border: none; border-radius: 5px; box-shadow: 2px 2px #333;">▶️ 次のターン</button> </div> <script> const names = ["アカリ", "リナ", "マミ", "ユイ", "カナ", "サラ", "ナナ", "ミカ", "エマ", "アヤ"]; const personalities = ['元気', '優しい', '積極的', '内気', '厳しい']; const locations = ["武器庫", "指揮所", "倉庫", "駐屯地"]; const deathSentences = [ "ぎゃん!…目の前が真っ暗になった。", "ふぐぅ…彼女の目から光が消えた。", "あぁ…もう動けない…", "キャッ…力が抜けていく…" ]; const deathDetails = [ "顔は美しいまま、横たわる彼女。", "髪型は整えられたままで、強張った表情。", "剥き出しの胸が傷付けられた。", "息絶えた姿が哀れに見えた。" ]; const patrols = [ "哨戒中: 敵の足跡を見つけた。", "哨戒中: 付近は異常無し。", "哨戒中: 通信が途絶えた。", "哨戒中: 妙な気配がする…。" ]; const conversations = [ "みんな、気を付けてね!", "ここは危ない場所ね。", "私たちの任務、しっかり果たそう。", "この先はどうなっているのかな…。" ]; const reportMessages = [ "警備報告書: 本日の任務は特に問題なし。", "警備報告書: 敵の動きに注意が必要。", "警備報告書: 頻繁に敵の気配を感じる。", "警備報告書: 更なる警戒が必要。" ]; let zakos = []; let turnCount = 0; function getRandomElement(array) { return array[Math.floor(Math.random() * array.length)]; } function createZako() { const name = getRandomElement(names); const age = Math.floor(Math.random() * 10) + 15; const personality = getRandomElement(personalities); const color = Math.floor(Math.random() * 16777215).toString(16); return { name, age, personality, color, location: getRandomElement(locations), health: 1 }; } function initializeZakos() { zakos = [createZako(), createZako(), createZako()]; renderZakos(); } function renderZakos() { const zakoList = document.getElementById('zako-list'); zakoList.innerHTML = zakos.map(zako => ` <div style="margin: 5px; padding: 10px; border: 2px solid #${zako.color};"> <div style="font-size: 20px;">✨ ${zako.name}(年齢: ${zako.age}歳 性格: ${zako.personality})✨</div> <div>${zako.location}</div> <div>🫀 体力: ${zako.health}</div> </div> `).join(''); } function nextTurn() { turnCount++; const encounterChance = Math.random() < 0.2; let actions = zakos.map(zako => { if (zako.health <= 0) { zao = createZako(); } else if (encounterChance) { zako.health = 0; return `💥エンカウンターが${zako.name}に接触した!💥<br> ${getRandomElement(deathSentences)}<br>${getRandomElement(deathDetails)}`; } else { return `🎮 ${getRandomElement(patrols)}<br>💬${getRandomElement(conversations)}`; } }); document.getElementById('actions').innerHTML = actions.join('<br><br>'); if (turnCount % 10 === 0) { alert(getRandomElement(reportMessages)); } renderZakos(); } setInterval(nextTurn, 20000); initializeZakos(); </script> </body> </html> ```