<!DOCTYPE html>
<html>
<head>
<title>時雨の任務</title>
<style>
#game-section {
display: flex;
flex-direction: column;
align-items: center;
margin: 50px;
}
#game-section button {
margin-top: 10px;
padding: 10px 20px;
font-size: 16px;
}
</style>
</head>
<body>
<div id="game-section">
<h1>時雨の任務</h1>
<p id="mission-text"></p>
<button id="start-btn">任務を始める</button>
</div>
<script>
// ラウンド1
const startBtn = document.getElementById('start-btn');
const missionText = document.getElementById('mission-text');
startBtn.addEventListener('click', () => {
missionText.textContent = '雲雀城への潜入任務が開始されました。';
showNinja();
});
function showNinja() {
missionText.textContent = '忍者が現れました。';
showNinjaInfo();
}
// ラウンド2
function showNinjaInfo() {
const infoArr = [
{
name: 'あやめ',
leotard: '紫色',
hair: 'お団子ヘアー',
face: '美形',
body: 'スレンダー',
personality: 'クールビューティー'
},
{
name: 'えりか',
leotard: '白地に水色ストライプ',
hair: 'ポニーテール',
face: '可愛い',
body: 'ぽっちゃり',
personality: 'おおらか'
},
{
name: 'かおり',
leotard: '黒一色',
hair: 'ショートカット',
face: '端麗',
body: '引き締まっている',
personality: '冷静'
}
// 他にも7人
];
const randomNinja = infoArr[Math.floor(Math.random() * infoArr.length)];
missionText.textContent = `彼女の名前は${randomNinja.name}。レオタードの色は${randomNinja.leotard}、${randomNinja.hair}の髪型が特徴的で、${randomNinja.face}の顔立ちと${randomNinja.body}のスタイルをしています。性格は${randomNinja.personality}とのことです。`;
const okBtn = createOkButton();
missionText.appendChild(okBtn);
}
// ラウンド3
function createOkButton() {
const okBtn = document.createElement('button');
okBtn.textContent = '了解';
okBtn.addEventListener('click', () => {
showVoice();
});
return okBtn;
}
function showVoice() {
const voiceArr = ['ムグッ…?', 'ウムゥ!?', 'ン…!'];
const randomVoice = voiceArr[Math.floor(Math.random() * voiceArr.length)];
missionText.textContent = randomVoice;
showStimulation();
}
function showStimulation() {
missionText.textContent += '\n相手を安心させるため、もう一方の手で相手の身体を刺激しています。';
showResistance();
}
// ラウンド4
function showResistance() {
const resistanceArr = ['強く抵抗している', '苦しそうにしている', '動かなくなっている', '怒りが収まらない', '恍惚の表情を浮かべている', '諦めている', '依然として目を見開いている', '眠そうな感じになってきた', '収まりがち', '呆然としている'];
const randomResistance = resistanceArr[Math.floor(Math.random() * resistanceArr.length)];
missionText.textContent = `相手は${randomResistance}様子です。`;
showChest();
}
function showChest() {
const chestArr = ['揺らいでいる', '荒く揺れている', '誰かに抱かれている', '意図的に揺らしている', '深い呼吸をしている', '鈍い音をたてている', '思わず目をそらしたくなるほど大きい', '力強く鼓動している', '落ち着かない感じがする', 'あまり動かなくなってきた'];
const randomChest = chestArr[Math.floor(Math.random() * chestArr.length)];
missionText.textContent += `\n忍者の胸は${randomChest}様子です。`;
showWaist();
}
function showWaist() {
const waistArr = ['両手を上げたままになっている', '芯から震えている', '紅潮している', '陰部を刺激している', 'しきりに歯を食いしばっている', '身体をこわばらせている', '放心状態に陥っている', 'ゆっくり膨らむ感覚に耐えている', '体育架に拘束されているかのようにピタリとくっついている', '何かに嬲られているような感覚を覚えている'];
const randomWaist = waistArr[Math.floor(Math.random() * waistArr.length)];
missionText.textContent += `\n忍者の腰も${randomWaist}様子です。`;
showMentalState();
}
function showMentalState() {
const mentalStateArr = ['必死に我慢している', '激しく感じている', '口を噤みしめている', '目を閉じて身を任せている', '苦悶の表情を浮かべている', '内心で叫んでいる', '他人に見られていることに恥じらっている', '恍惚とした表情を浮かべている', '引きつった顔つきになってきている', '片目を開けて見つめてきている'];
const randomMentalState = mentalStateArr[Math.floor(Math.random() * mentalStateArr.length)];
missionText.textContent += `\n心情の方も${randomMentalState}ようです。`;
showNextButton();
}
function showNextButton() {
const nextBtn = document.createElement('button');
nextBtn.textContent = '次へ';
let turnCount = 0;
let awakeCount = 20; // ラウンド4で設定
nextBtn.addEventListener('click', () => {
if (awakeCount <= 0) {
showSleep();
return;
}
if (turnCount % 5 === 0) {
showResistance();
showChest();
showWaist();
showMentalState();
awakeCount--;
} else {
missionText.textContent = '';
}
turnCount++;
});
missionText.appendChild(nextBtn);
}
// ラウンド5
function showSleep() {
const sleepSoundArr = ['ズズ…', 'ドサッ', 'グゥ…', 'パタッ', 'シャカシャカ', 'キュッ', 'ガタッ', 'クスン', 'フワッ', 'バタバタ'];
const sleepStateArr = ['翻身もせずに眠る', '寝相が悪くなっている', '口からほんのり涎が垂れている', '顔がむくんで括れも浮き出てきている', '足がくねくね動いている', 'セクシーに見えるように手足を組んでいる', '微かに笑いを漏らしている', '柔らかい唸り声を漏らしている', '体勢が崩れていくにつれて息遣いが荒くなっている', '顔を赤くしながら眠る'];
const randomSleepSound = sleepSoundArr[Math.floor(Math.random() * sleepSoundArr.length)];
const randomSleepState = sleepStateArr[Math.floor(Math.random() * sleepStateArr.length)];
missionText.textContent = `忍者は${randomSleepSound}という音を立て、眠りに落ちました。${randomSleepState}という様子です。`;
countSleepNinja();
}
function countSleepNinja() {
let sleepCount = document.querySelectorAll('.sleep-ninja').length + 1;
if (sleepCount < 5) {
missionText.textContent += '他の忍者を探します。';
showNinja();
} else {
showSuccess();
}
}
// ラウンド6
function showSuccess() {
missionText.textContent = '任務完了。眠った忍者達は、時雨によって広間に運ばれました。';
const sleepNinjas = document.createElement('div');
sleepNinjas.style.display = 'flex';
sleepNinjas.style.justifyContent = 'center';
for (let i = 0; i < 5; i++) {
const ninja = document.createElement('div');
ninja.classList.add('sleep-ninja');
ninja.style.background = `url(https://placekitten.com/200/200?image=${Math.floor(Math.random() * 500)}) no-repeat center center`;
ninja.style.width = '150px';
ninja.style.height = '150px';
ninja.style.margin = '20px';
sleepNinjas.appendChild(ninja);
}
missionText.appendChild(sleepNinjas);
}
</script>
</body>
</html>