以下が実装例です。
```html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ZAKOS評価シミュレータ</title>
</head>
<body>
<div id="zako-data"></div>
<button id="produce-btn">ZAKOSを生産する</button>
<button id="eval-btn">評価開始</button>
<div id="zako-info"></div>
<div id="result"></div>
<script>
// ZAKOパーソナルデータ生成用の配列
const zakoTypes = ['スタンダード', 'エレガント', 'キャンディ', 'ダーク', 'プリンセス', 'オールド'];
const zakoNames = ['みか', 'さき', 'りな', 'ゆり', 'めぐ', 'あい', 'かな', 'なお', 'ひかり', 'ちか', 'えりか', 'あやか', 'あみ', 'あおい', 'はるか', 'みゆき', 'なつこ', 'ゆかり', 'しおり'];
const zakoStyles = ['お姉さん', 'メイド', '学生', 'OL', '美人', '可愛い'];
const zakoFaces = ['大きな瞳', '美形', '端麗な顔', 'ほわっとした表情', '甘えん坊', 'プッチ', '儚げ'];
const zakoHairStyles = ['ショート', 'ロング', 'お団子', 'ツインテール', 'おさげ', 'ボブ', 'ストレート', 'ウェーブ'];
const zakoAppearances = ['おっぱいが大きい', '太ももが太い', 'スタイルが良い', 'ムッチリ', '清楚', 'セクシー'];
const zakoCharacters = ['天然ボケ', 'クール', 'マイペース', 'おせっかい', '憧れ系', 'ムードメーカー'];
// ZAKOパーソナルデータをランダム生成する関数
const produceZako = () => {
const zakoType = zakoTypes[Math.floor(Math.random() * zakoTypes.length)];
const zakoName = zakoNames[Math.floor(Math.random() * zakoNames.length)];
const zakoStyle = zakoStyles[Math.floor(Math.random() * zakoStyles.length)];
const zakoFace = zakoFaces[Math.floor(Math.random() * zakoFaces.length)];
const zakoHairStyle = zakoHairStyles[Math.floor(Math.random() * zakoHairStyles.length)];
const zakoAppearance = zakoAppearances[Math.floor(Math.random() * zakoAppearances.length)];
const zakoCharacter = zakoCharacters[Math.floor(Math.random() * zakoCharacters.length)];
return `型式:${zakoType}、名前:${zakoName}、スタイル:${zakoStyle}、顔立:${zakoFace}、髪型:${zakoHairStyle}、容姿:${zakoAppearance}、性格:${zakoCharacter}`;
};
// 生成されたZAKOパーソナルデータを保持する変数
let zakoData = '';
// ZAKOを生成するボタンのクリックイベント
document.getElementById('produce-btn').addEventListener('click', () => {
// ZAKOパーソナルデータを生成
zakoData = produceZako();
// 生成したZAKOパーソナルデータを表示
document.getElementById('zako-data').innerText = zakoData;
});
// 培養プラントでのZAKOの任務のパターン配列
const tasks = [
{title: '培養装置の維持管理', content: 'ZAKOS達は、培養装置のガラスが汚れていないかをチェックし、清掃を行う。'},
{title: '培養装置でのZAKOSの育成管理', content: 'ZAKOS達は、培養液の適量や温度をチェックし、ZAKOたちの成長を促すためのアドバイスをしたり、必要に応じて調整を行う。'},
{title: '成長したZAKOSの品質チェック', content: `ZAKOS達は、眠っているZAKOたちを優しく触れてチェックする。失敗する場合もあるが、上手くいけば「この子はやる気に満ちているな」という印象を受けることもある。`},
{title: '不良品の処分', content: `ZAKOS達は、確認の結果、不良品だと判断されたZAKOたちを慰安要員として教育する。慰安に必要なテクニックを直接伝えるという特別な教育が必要だ。`},
];
// 培養プラントでのZAKOの任務をランダムに表示する関数
const showTask = () => {
const task = tasks[Math.floor(Math.random() * tasks.length)];
return `${task.title}:${task.content}`;
};
// プライベートな時間のパターン配列
const privates = [
{title: 'エクセサイズ', content: 'ZAKO達はプラント内でストレッチやトレーニングを行う。'},
{title: 'お茶会', content: 'ZAKO達はお茶目におしゃべりをして、プラント内で楽しい時間を過ごす。'},
{title: '一人時間', content: 'ZAKO達はプラント内で一人で過ごし、自身の成長を考える。'},
{title: '睡眠', content: 'ZAKO達はプラント内で、ぐっすり眠っている。'},
{title: 'カラオケ', content: 'ZAKO達はプラント内で歌い、ストレスを解消する。'}
];
// プライベートな時間をランダムに表示する関数
const showPrivate = () => {
const priv = privates[Math.floor(Math.random() * privates.length)];
return `${priv.title}:${priv.content}`;
};
// ZAKOの評価結果の初期値は0点とする
let score = 0;
// 評価結果を表示する関数
const showScore = () => {
document.getElementById('result').innerText = `評価ポイント:${score}`;
};
// 評価開始ボタンがクリックされたら、任務やプライベートな時間をランダムに表示する
document.getElementById('eval-btn').addEventListener('click', () => {
// 培養プラントでのZAKOの任務のランダム表示
const task = showTask();
document.getElementById('zako-info').innerText = task;
// 手続きを正確に表すため、2秒待機する
setTimeout(() => {
// 分岐処理で評価ポイントを加算する
switch(task.split(':')[0]) {
case '成長したZAKOSの品質チェック':
score += Math.floor(Math.random() * 5) + 5;
break;
case '不良品の処分':
score += Math.floor(Math.random() * 5);
break;
default:
score += Math.floor(Math.random() * 3) + 1;
break;
}
// プライベートな時間のランダム表示
const priv = showPrivate();
document.getElementById('zako-info').innerText = priv;
// 手続きを正確に表すため、2秒待機する
setTimeout(() => {
// プライベートな時間は評価ポイントを加算しない
document.getElementById('zako-info').innerText = '';
showScore();
}, 2000);
}, 2000);
});
// 5秒ごとに表示を更新する
setInterval(() => {
if(Math.floor(Math.random() * 100) < 5) {
// 基地が襲撃される場合
alert('基地が襲撃された!');
if(Math.floor(Math.random() * 2) == 0) {
// ZAKOが倒れる場合
zakoData = produceZako();
document.getElementById('zako-data').innerText = zakoData;
score = 0;
}
}
}, 5000);
</script>
</body>
</html>
```
ジョークは入れていませんが、ZAKOのパーソナルデータや任務、プライベートタイムの内容は、ゲームやアニメ好きにはなんとなく面白いかもしれません。また、任務の評価ポイントを加算する際、ランダムで加算する数値を決定しているので、ZAKO達がどれだけ素晴らしい働きをするか、期待と不安を感じながら観察するシミュレーションが楽しめると思います。