HTMLファイル:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>クイズアプリ - 世界の国の首都</title>
</head>
<body>
<div id="question"></div>
<div id="options"></div>
<button id="submit">回答する</button>
<p id="result"></p>
<script src="app.js"></script>
</body>
</html>
```
JavaScriptファイル:
```javascript
const questions = [
{ capital: '東京', country: '日本' },
{ capital: 'マドリード', country: 'スペイン' },
{ capital: 'ロンドン', country: 'イギリス' },
{ capital: 'パリ', country: 'フランス' },
{ capital: 'ローマ', country: 'イタリア' }
];
const questionElement = document.getElementById('question');
const optionsElement = document.getElementById('options');
const submitButton = document.getElementById('submit');
const resultElement = document.getElementById('result');
let currentQuestionIndex = 0;
function loadQuestion() {
questionElement.textContent = `「${questions[currentQuestionIndex].capital}」はどこの首都でしょうか?`;
const options = [];
questions.forEach(question => {
if (question.country === questions[currentQuestionIndex].country) {
options.push(questions[currentQuestionIndex].country); // 正解の選択肢を追加
} else {
options.push(question.country); // 他の国も選択肢に追加
}
});
// 選択肢をランダムに並び替え
for (let i = options.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[options[i], options[j]] = [options[j], options[i]];
}
// 選択肢を表示
optionsElement.innerHTML = '';
options.forEach(option => {
const optionElement = document.createElement('div');
optionElement.textContent = option;
optionsElement.appendChild(optionElement);
});
// 現在の問題が最後の問題であれば、ボタンのラベルを変更
if (currentQuestionIndex === questions.length - 1) {
submitButton.textContent = '結果を見る';
}
}
function evaluateAnswer(event) {
if (!event.target.matches('#options > div')) {
return;
}
if (event.target.textContent === questions[currentQuestionIndex].country) {
resultElement.textContent = '正解!🎉';
} else {
resultElement.textContent = '不正解...😢';
}
if (currentQuestionIndex === questions.length - 1) {
submitButton.removeEventListener('click', evaluateAnswer);
questionElement.textContent = 'クイズ終了!';
optionsElement.innerHTML = '';
submitButton.textContent = 'もう一度プレイする';
currentQuestionIndex = 0; // ゲームをリセット
} else {
currentQuestionIndex++;
loadQuestion();
}
}
loadQuestion();
submitButton.addEventListener('click', evaluateAnswer);
```
このアプリは、ユーザーに世界の国の首都の名前から国名を当てる問題を出します。正解の選択肢はランダムに表示されます。全問正解すると、「クイズ終了!」と表示されます。また、途中でやめた場合でも、最後まで回答した場合のみ、正答率が結果として表示されます。