11.11. The Multiple-Choice Quiz, Take 3In Example 9-10, we revised the multiple-choice quiz from Example 1-1. At that time, we improved the quiz code by creating reusable, centralized functions. Now that we've studied arrays, we can return to the quiz to make a few more improvements. This time, we'll see how to use arrays to store both the user's answers and the correct answers for each question, making our code more succinct, legible, and easier to extend if we want to add new questions. All the changes we need to make to the quiz this time take place on the scripts layer of frame 1, where our main quiz code is located. Both the previous version and this updated version of the quiz can be found in the online Code Depot. To see what improvements we'll make this time around, read through the code in Example 11-7, paying special attention to the comments. Example 11-7. A Multiple-Choice Quiz, Version 3stop( ); // *** Init main timeline variables var displayTotal; // Text field for displaying user's final score var numQuestions = 2; // Number of questions in the quiz var totalCorrect = 0; // Number of correct answers var userAnswers = new Array( ); // Array containing user's guesses var correctAnswers = [3, 2]; // Array containing each question's correct answer // Notice that we no longer need to maintain two long lists of variables // named q1answer, q2answer, etc., and correctAnswer1, correctAnswer2, etc. // We now store that information conveniently in an array. // *** Function to register the user's answers function answer (choice) { // Since we can now check how many answers have been given via the // length property of userAnswers, we no longer need to manually track // that information with the answer.currentAnswer property. Note also // that we have done away with the unwieldy set statement that previously // assigned the user's answer to a dynamically named variable. // Tack the user's answer onto our array userAnswers.push(choice); // Do a little navigation, baby if ((userAnswers.length) == numQuestions) { gotoAndStop ("quizEnd"); } else { gotoAndStop ("q"+ (userAnswers.length + 1)); } } // *** Function to tally the user's score function gradeUser( ) { // Count how many questions were answered correctly. Our // userAnswer/correctAnswer element comparison is much cleaner than the // snake pit of eval( ) functions we used to do the same job in the previous version. for (var i = 0; i < userAnswers.length; i++) { if (userAnswers[i] == correctAnswers[i]) { totalCorrect++; } } // Show the user's score in a dynamic text field displayTotal = totalCorrect; } Reader Exercise: Try generalizing our array-based version of the quiz by using correctAnswers.length in place of the variable numQuestions. Copyright © 2002 O'Reilly & Associates. All rights reserved. |
|