No luck!
I'm trying various ways to do this, and have spent two days going through various tutorials, books and the Flash Help section, but if I get one thing right, the other goes wrong - for instance, if I specify how many questions to be shown, the movie doesn't show the questions at all! If I shuffle them, it loads
all the questions... With one attempt I just kept getting 'undefined parameter'. Can I share the code and get help? Here it is:
Code:
function QuizItem(question)
{
this.question=question;
this.answers=new Array();
this.numOfAnswers=0;
this.correctAnswer=0;
this.getQuestion=function()
{
return this.question;
}
this.addAnswer=function(answer, isCorrectAnswer)
{
this.answers[this.numOfAnswers]=answer;
if (isCorrectAnswer)
this.correctAnswer=this.numOfAnswers;
this.numOfAnswers++;
}
this.getAnswer=function(answerNumberToGet)
{
return this.answers[answerNumberToGet];
}
this.getCorrectAnswerNumber=function()
{
return this.correctAnswer;
}
this.checkAnswerNumber=function(userAnswerNumber)
{
if (userAnswerNumber==this.getCorrectAnswerNumber())
gotoAndPlay("Correct");
else
gotoAndPlay("Wrong");
}
}
function onQuizData(success)
{
var quizNode=this.firstChild;
var quizTitleNode=quizNode.firstChild;
title=quizTitleNode.firstChild.nodeValue;
var i=0;
// <items> follows <title>
var itemsNode=quizNode.childNodes[1];
while (itemsNode.childNodes[i])
{
var itemNode=itemsNode.childNodes[i];
// <item> consists of <question> and one or more <answer>
// <question> always comes before <answer>s (node 0 of <item>)
var questionNode=itemNode.childNodes[0];
quizItems[i]=new QuizItem(questionNode.firstChild.nodeValue);
var a=1;
// <answer> follows <question>
var answerNode=itemNode.childNodes[a++];
while (answerNode)
{
var isCorrectAnswer=false;
if (answerNode.attributes.correct=="y")
isCorrectAnswer=true;
quizItems[i].addAnswer(answerNode.firstChild.nodeValue, isCorrectAnswer);
// goto the next <answer>
answerNode=itemNode.childNodes[a++];
}
i++;
}
function randList(max:Number, num:Number, shuffled:Boolean):Array {
var tempArray:Array = [];
for (i = 0; i < max && num > 0; ++i) {
if (Math.floor(Math.random() * (max - i)) < num) {
tempArray.push(i + 1);
num--;
}
}
if (shuffled) {
tempArray.sort(function () {
return Math.floor(Math.random() * 2) ? true : false;
});
}
return (tempArray);
}
gotoAndStop("Start");
}
var quizItems=new Array();
var myData=new XML();
myData.ignoreWhite=true;
myData.onLoad=onQuizData;
myData.load("quiz.xml");
stop();
This code has a shuffle function, and I am supposed to add "var myArr:Array = randList(50, 15, true)" somewhere on the timeline, but when I do, the questions don't load. Without it, everything works smoothly, except the shuffle itself.
Also, on the timeline, this is the code:
Code:
if (currentQuestionNumber>quizItems.length)
gotoAndStop("SummaryScreen");
var currentQuizItem=quizItems[currentQuestionNumber-1];
var hasAnswered=false;
question=currentQuizItem.getQuestion();
for (var i=1; i<=4; i++)
{
_root["answer"+i]=currentQuizItem.getAnswer(i-1);
}
stop();
I'd really appreciate any help in getting this to work. Again, I'd like to have 50 questions, out of which each session of game play would only display 15 random questions.