Проблема в том, что в области действия вашей функции check
нет переменной i
. Если вы хотите сравнить ответ, вы должны знать правильную позицию в массиве.
Один из вариантов - передать i
в check
, что решит вашу непосредственную проблему. Однако было бы даже лучше, если бы вы вместо этого ответили ожидаемым ответом - тогда check
не нужно знать, где хранятся вопросы и ответы. Таким образом, в будущем вы можете представлять данные по-другому с меньшим количеством необходимых изменений:
var quiz = [
["What is Superman's real name?", "Clarke Kent"],
["What is Wonderwoman's real name?", "Dianna Prince"],
["What is Batman's real name?", "Bruce Wayne"]
];
var score = 0 // initialize score
play(quiz);
function play(quiz) {
for (var i = 0, question, answer, max = quiz.length; i < max; i++) {
question = quiz[i][0];
//also extract the answer to the question
expectedAnswer = quiz[i][1];
userAnswer = ask(question);
check(userAnswer, expectedAnswer);
} // end of main game loop gameOver();
}
function ask(question) {
return prompt(question);
}
//the function now takes both the user and the expected answers to check them
function check(userAnswer, expectedAnswer) {
if (userAnswer === expectedAnswer) {
alert("Correct!");
score++;
} else {
alert("Wrong!");
}
}