/************************************************************************************* * @author Maria A. Zamora * @company Digitec Interactive Inc. * @version 0.1 * @date 12/23/2010 * * This is the Question class for the CEE application * CS5 version of com.digitec.cee.Question * * An example of the XML used is displayed it at the end of this file ******************************************************************************************/ package com.digitec.cee { import flash.display.MovieClip; import flash.display.Sprite; public class Question { private var question_str:String; private var correctAnswer_str:String; private var correctFeedback_str:String; private var incorrectFeedback_str:String; private var incorrectAnswers_arr:Array; private var allAnswers_arr:Array; private var posCorrectAnswer:int; private var answersRandom:Boolean; private var num_answers:int; private var num_incorrect_answers:int; private var questionId:String; private var correctAnswerId:String; private var incorrectAnswersId_arr:Array = new Array(); //private var allAnswersId_arr:Array; public function Question( _xml:XML, maxAnswers:int ) { // trace(_xml); // WANT ANSWERS IN RANDOM ORDER? if( _xml.random_answers.toString() == "true" || _xml.random_answers.toString() == "yes" ) { answersRandom = true; } else{ answersRandom = false; } //GET THE QUESTION FROM XML PIECE question_str = _xml.question.toString(); questionId = _xml.question.@id; //////////////////////////////////////// trace( "_xml.question.@id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"+ _xml.question.@id); //GET CORRECT ANSWER AND FEEDBACK STRINGS FROM XML PIECE correctAnswer_str = _xml.correct_answer.toString(); correctAnswerId = _xml.correct_answer.@id; /////////////////////////////////////////////// trace( "_xml.correct_answer.@id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"+ _xml.correct_answer.@id); correctFeedback_str = _xml.correct_question_fb.toString(); incorrectFeedback_str = _xml.incorrect_question_fb.toString(); //GET THE ANSWERS FOR THE answer NODES IN THE XML //INCORRECT + 1 (CORRECT) HAVE TO BE <= ANSWER DISPLAY OBJECTS num_incorrect_answers = _xml.elements("answer").length(); //SET INCORRECT ANSWERS TO A MAX OF 4 if( num_incorrect_answers > maxAnswers - 1) { num_incorrect_answers = maxAnswers - 1; } //CREATE AN ARRAY WITH THE INCORRECT ANSWERS //trace("incorrectAnswers_arr[i] = " + incorrectAnswers_arr[i] ); incorrectAnswers_arr = new Array(); for( var i:int=0; i < num_incorrect_answers; i++ ) { //trace(_xml.answer[i].@id.toString()); incorrectAnswers_arr[i] = _xml.answer[i].toString(); incorrectAnswersId_arr[i] = _xml.answer[i].@id; ///////////////////////////////////// trace( "" ); //incorrectAnswers_arr[i].push(_xml.answer[i].toString()); //incorrectAnswersId_arr[i].push(_xml.answer[i].@id); } //CREATE AN ARRAY WITH CORRECT & INCORRECT ANSWERS allAnswers_arr = createAllAnswerArray(); } /******************************************************************* * SET FUNCTIONS *******************************************************************/ public function set correctAnswer( correctAnswer:String ):void{ correctAnswer_str = correctAnswer; } public function set incorrectAnswers( incorrectAnswers:Array ):void { incorrectAnswers_arr =incorrectAnswers; } public function set correctFeedback( correct:String ):void { correctFeedback_str =correct; } public function set incorrectFeedback( incorrect:String ):void { incorrectFeedback_str =incorrect; } /******************************************************************* * GET FUNCTIONS *******************************************************************/ public function get question():String{ return question_str; } public function get thequestionId():String{ return questionId; } public function get correctAnswer():String{ return correctAnswer_str; } public function get correctFeedback():String { return correctFeedback_str; } public function get incorrectFeedback():String { return incorrectFeedback_str; } public function get incorrectAnswers():Array { return incorrectAnswers_arr; } //for(var i:int = 0; i< allAnswers_arr.length; i++){trace("allAnswers_arr = " + allAnswers_arr[i]);} public function get answers():Array { return allAnswers_arr; } public function get correctAnswerPosition():int { return posCorrectAnswer; } /******************************************************************* * FUNCTIONCREATE AN ARRAY WITH CORRECT & INCORRECT ANSWERS * AND RETURN THE POSITION OF THE CORRECT ANSWER *******************************************************************/ private function createAllAnswerArray():Array { //CREATE ANSWER ARRAY PUSHING CORRECT ANSWER //IN LAST ARRAY POSITION allAnswers_arr = new Array(); for(var i:int=0; i < incorrectAnswers_arr.length; i++) { allAnswers_arr.push( {Answer:incorrectAnswers_arr[i].toString(), AnswerId:incorrectAnswersId_arr[i].toString() } ); //allAnswersId_arr.push( incorrectAnswersId_arr[i] );///////////////////////////////////////////////////////////// } //allAnswers_arr = incorrectAnswers_arr; //allAnswersId_arr = incorrectAnswersId_arr; ///////////////////////////////////////////////////////////// allAnswers_arr.push({ Answer:correctAnswer_str.toString(), AnswerId:correctAnswerId.toString() }); //allAnswersId_arr.push(correctAnswerId_str.toString()); posCorrectAnswer = allAnswers_arr.length - 1; //IF WANT ANSWERS IN RANDOM ORDER if(answersRandom == true) { allAnswers_arr = randomAnswers( allAnswers_arr ); } //else { posCorrectAnswer = allAnswers_arr.length - 1; } return allAnswers_arr; } /******************************************************************* * FUNCTION RETURNS ALL ANSWERS ARRAY & PLACE * CORRECT ANSWER IN RANDOM POSITION *******************************************************************/ private function randomAnswers( answers_arr:Array):Array { if(allAnswers_arr != null) { //var randomInt:int = Math.floor(Math.random()*(allAnswers_arr.length+1)); var randomInt:int = Math.floor(Math.random()*(allAnswers_arr.length)); var temp:Object = allAnswers_arr[randomInt]; //put correct answer in random pos allAnswers_arr[randomInt] = allAnswers_arr[posCorrectAnswer]; //put temp in old correct position allAnswers_arr[posCorrectAnswer] = temp; //new array position of correct answer posCorrectAnswer = randomInt; } return allAnswers_arr; } } // Main class } //end package /******************************************************************* * PART OF XML FILE EXAMPLE *******************************************************************/ /***************************************************************************************************** <random_answers>yes</random_answers> <!--tag is used to display the answers randonly = true, or not = false--> <question_exercise> <question>Question number 1. Multiline text field and are loaded from a XML</question> <correct_answer>Correct Answer 1 This answer will display randonly</correct_answer> <answer>Answer 2 </answer> <answer>Answer 3 </answer> <answer>Answer 4 </answer> <answer>Answer 5 </answer> <answer>Answer more </answer> </question_exercise> ******************************************************************************************/