home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


Book HomeActionScript: The Definitive GuideSearch this book

11.11. The Multiple-Choice Quiz, Take 3

In 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 3

stop( );
//  *** 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.



Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.