<html> <head> <title>シスター対宇宙アメーバ</title> </head> <body> <script> // シスターの設定 const sister = { name: ["美緒", "葵", "恵子", "菜々子", "結衣", "まりか"], age: [13, 16, 18, 21, 26, 30], looks: ["美しい", "可愛らしい", "清楚な", "魅惑的な", "凛とした", "色っぽい"], bodyType: ["スリムな", "引き締まった", "健康的な", "豊満な", "華奢な", "逞しい"], attireAndWeapon: ["黒いレオタードを着用し、頭にウインプルを載せている。火器を携帯している。", "黒色のスーツを着用し、頭に帽子を被っている。剣を携帯している。", "白いドレスを着用し、帽子を被っている。杖を携帯している。", "赤いワンピースを着用し、ウサギの耳をつけている。鞭を携帯している。", "青いセーラー服を着用し、バンダナを頭に巻いている。銃を携帯している。", "緑の制服を着用し、細い眼鏡をかけている。鎖鎌を携帯している。"], health: [6, 8, 9, 10, 13, 15] }; // アメーバの設定 const amoeba = { health: 100, attack: Math.floor(Math.random() * 5) + 4 // 4~8の乱数 }; // シスターの遭遇セリフ const sisterEncounterPhrases = ["道に迷ったのかしら?", "どこに行くのですか?", "教会のことですか?", "何かお困りですか?", "お手伝いしましょうか?", "神のお加護がありますように"]; // シスターの攻撃セリフ const sisterAttackPhrases = ["祈りなさい!", "邪悪な者よ、退散なさい!", "神の光を浴びなさい!", "祈りに導かれし勇者よ、立ち上がれ!", "悪魔よ、裁く時が来た!", "神の名において、貴様を許すまじ!"]; // シスターの体力が少ない時のセリフ const sisterLowHealthPhrases = ["なんとか……耐えてみせる!", "神よ、私に力を与えてください……", "体力が限界……でも私はあきらめません!", "まだ終わらせるとは思わないでください!", "神のお告げによれば、私が勝つ運命です!", "信仰を強く持つ私には負けませんよ!"]; // シスターの喘ぎ声 const sisterMoanPhrases = ["あぁ……!", "っふぅ……!", "もっと……!", "た、たすけてぇ!", "あぁ、もう……耐えられない!", "神に……感謝します……!"]; // 吸収されるシスターの情報 const absorbedSisterInfo = { moans: ["あぁ……!", "っふぅ……!", "もっと……!", "た、たすけてぇ!", "あぁ、もう……耐えられない!", "神に……感謝します……!"], underwear: ["白いパンツ", "黒いランジェリー", "ピンクのショーツ", "赤いビキニ", "レースのショーツ"], bodyFeatures: ["美しい胸", "華奢なウエスト", "しなやかな腰", "すらりとした脚", "美麗なお尻"], absorptionDescription: ["アメーバの触手がシスターの体をなぞっていく……", "快感が全身を駆け巡り、シスターは身をよじる……", "アメーバの触手がシスターを包み込む……", "快感に悶えるシスターの姿が目に浮かぶ……", "アメーバの粘液がシスターの肌を舐める……"] }; // シスターの勝利回数 let victoryCount = 0; function createSister() { const sisterIndex = Math.floor(Math.random() * 6); const sisterName = sister.name[sisterIndex]; const sisterAge = sister.age[sisterIndex]; const sisterLooks = sister.looks[Math.floor(Math.random() * 6)]; const sisterBodyType = sister.bodyType[Math.floor(Math.random() * 6)]; const attireAndWeapon = sister.attireAndWeapon[Math.floor(Math.random() * 6)]; const sisterHealth = Math.floor(sisterAge / 2); return { name: sisterName, age: sisterAge, looks: sisterLooks, bodyType: sisterBodyType, attireAndWeapon: attireAndWeapon, health: sisterHealth }; } function startEncounter() { const encounterChance = Math.random(); const encounterText = document.getElementById("encounterText"); const sisterInfo = createSister(); if (encounterChance <= 0.3) { encounterText.innerHTML = "シスター「" + sisterEncounterPhrases[Math.floor(Math.random() * 6)] + "」"; document.getElementById("battleStartButton").style.display = "block"; } else { encounterText.innerHTML = "シスター「" + sister.name[Math.floor(Math.random() * 6)] + "……この方は信者の方ではないようですね」"; } // TODO: シスターの情報を表示する } function startBattle() { const encounterText = document.getElementById("encounterText"); encounterText.innerHTML = ""; const battleText = document.getElementById("battleText"); battleText.innerHTML = "-------バトル開始-------"; document.getElementById("battleContinueButton").style.display = "block"; document.getElementById("battleStartButton").style.display = "none"; } function calculateSisterAttackDamage() { const attackPower = Math.floor(Math.random() * 5) + 1; // 1~5の攻撃力 return attackPower; } function calculateAmoebaAttackSuccess() { const attackChance = Math.random(); return attackChance <= 0.6; } function calculateSisterDefenseSuccess() { const defenseChance = Math.random(); return defenseChance <= 0.3; } function calculateAbsorptionSuccess() { const absorptionChance = Math.random(); return absorptionChance <= 0.3; } function performSisterAttack() { const sisterAttackPower = calculateSisterAttackDamage(); const battleText = document.getElementById("battleText"); battleText.innerHTML += "<br>シスターの攻撃!"; // TODO: シスターの攻撃メッセージを表示する amoeba.health -= sisterAttackPower; battleText.innerHTML += "<br>アメーバに" + sisterAttackPower + "ダメージ与えた!"; if (amoeba.health <= 0) { victoryCount++; battleText.innerHTML += "<br>シスター達の勝利!"; battleText.innerHTML += "<br>アメーバに吸収されたシスターの数:" + victoryCount; document.getElementById("battleContinueButton").style.display = "none"; document.getElementById("restartButton").style.display = "block"; return; } setTimeout(performAmoebaAttack, 10000); // 次のターンまで10秒待つ } function performAmoebaAttack() { const isAttackSuccessful = calculateAmoebaAttackSuccess(); const battleText = document.getElementById("battleText"); if (isAttackSuccessful) { battleText.innerHTML += "<br>アメーバの攻撃!"; // TODO: アメーバの攻撃メッセージを表示する if (calculateSisterDefenseSuccess()) { battleText.innerHTML += "<br>シスターが攻撃を防いだ!"; } else { const sisterHealthPhrases = sisterLowHealthPhrases[Math.floor(Math.random() * 6)]; const sisterMoanPhrase = sisterMoanPhrases[Math.floor(Math.random() * 6)]; battleText.innerHTML += "<br>シスターが" + amoeba.attack + "ダメージを受けた!" + sisterHealthPhrases; // TODO: シスターの喘ぎ声を表示する if (calculateAbsorptionSuccess()) { battleText.innerHTML += "<br>麻痺性の粘液によりシスターは身動きが取れなくなった!"; // TODO: アメーバに