犯人を見つけろ!
ゲームを始めてください。
<!DOCTYPE html>
<html>
<head>
<title>犯人を見つけろ!</title>
</head>
<body>
<div id="game">
<h1>犯人を見つけろ!</h1>
<p id="status">ゲームを始めてください。</p>
<button onclick="startGame()">ゲームを始める</button>
</div>
<script>
function startGame() {
// プレイヤーの名前を入力する
var playerName = prompt("プレイヤーの名前を入力してください。");
if (playerName == null || playerName == "") {
playerName = "Player";
}
// プレイヤーの人数を入力する
var numPlayers = prompt("プレイヤーの人数を入力してください。");
if (numPlayers == null || numPlayers == "" || numPlayers < 5) {
alert("5人以上でプレイしてください。");
return;
}
// 犯人をランダムに選択する
var criminalIndex = Math.floor(Math.random() * numPlayers);
// プレイヤーのリストを作成する
var players = [];
for (var i = 0; i < numPlayers; i++) {
if (i == criminalIndex) {
players.push({name: "犯人", isCriminal: true});
} else {
players.push({name: "プレイヤー" + (i+1), isCriminal: false});
}
}
// ゲーム画面を表示する
var gameDiv = document.getElementById("game");
gameDiv.innerHTML = "";
var h1 = document.createElement("h1");
h1.innerHTML = "犯人を見つけろ!";
gameDiv.appendChild(h1);
var p = document.createElement("p");
p.innerHTML = playerName + "さん、あなたは" + players[0].name + "です。";
gameDiv.appendChild(p);
// ゲームを開始する
var currentPlayerIndex = 0;
var currentQuestionIndex = 0;
var currentSuspectIndex = -1;
var numQuestions = 3;
var numGuesses = 3;
updateStatus();
function updateStatus() {
// ステータスを更新する
var status = document.getElementById("status");
status.innerHTML = "";
var p1 = document.createElement("p");
p1.innerHTML = "質問数: " + currentQuestionIndex + "/" + numQuestions;
status.appendChild(p1);
var p2 = document.createElement("p");
if (currentSuspectIndex == -1) {
p2.innerHTML = "疑うプレイヤーを選んでください。";
} else {
p2.innerHTML = "疑うプレイヤー: " + players[currentSuspectIndex].name;
}
status.appendChild(p2);
}
function askQuestion() {
// 質問を聞く
var question = prompt("質問を入力してください。");
if (question == null || question == "") {
alert("質問を入力してください。");
return;
}
currentQuestionIndex++;
if (currentQuestionIndex > numQuestions) {
endGame("質問回数が上限に達しました。");
return;
}
var answer = players[currentSuspectIndex].isCriminal ? "はい" : "いいえ";
var reply = confirm(question + ":" + answer);
if (reply) {
// 疑いを深める
numGuesses--;
if (numGuesses == 0) {
endGame("3回誤ったため、あなたは失格となりました。");
return;
}
} else {
// 次のプレイヤーに移動する
var numPlayersChecked = 0;
do {
currentPlayerIndex++;
if (currentPlayerIndex >= numPlayers) {
currentPlayerIndex = 0;
}
if (!players[currentPlayerIndex].isCriminal) {
numPlayersChecked++;
}
} while (numPlayersChecked < numPlayers-1);
currentSuspectIndex = currentPlayerIndex;
numGuesses = 3;
}
updateStatus();
}
function accuse() {
// 犯人を指摘する
var suspect = prompt("疑うプレイヤーの名前を入力してください。");
if (suspect == null || suspect == "") {
alert("プレイヤーの名前を入力してください。");
return;
}
var suspectIndex = -1;
for (var i = 0; i < players.length; i++) {
if (players[i].name == suspect) {
suspectIndex = i;
break;
}
}
if (suspectIndex == -1) {
alert("その名前のプレイヤーはいません。");
return;
}
if (players[suspectIndex].isCriminal) {
endGame("正解! " + suspect + "さんが犯人でした。");
} else {
numGuesses--;
if (numGuesses == 0) {
endGame("3回誤ったため、あなたは失格となりました。");
} else {
alert("残念! " + suspect + "さんは犯人ではありませんでした。");
}
}
}
function endGame(message) {
// ゲームを終了する
var gameDiv = document.getElementById("game");
gameDiv.innerHTML = "";
var h1 = document.createElement("h1");
h1.innerHTML = "犯人を見つけろ!";
gameDiv.appendChild(h1);
var p = document.createElement("p");
p.innerHTML = message;
gameDiv.appendChild(p);
var button = document.createElement("button");
button.innerHTML = "もう一度プレイする";
button.onclick = function() {
showToast("再読み込みしてください");
}
gameDiv.appendChild(button);
}
askQuestion();
}
</script>
</body>
</html>