Quiz | XML-Datei auslesen | Randomize

RaKo

Grünschnabel
Hallo,

bin noch relativ neu mit Flash, habs aber mit diversen Tipps bereits geschafft ein Texteingabe-Quiz zu erstellen, welches aus XML-Datei Frage und Antwort holt.

Nun hätte ich aber gerne, dass die Fragen zufällig ausgelesen werden, aber nicht doppelt und zudem immer nur 10 von X (und nicht wie bisher, eben JEDE Frage).

Wäre nett, wenn mir jmd. weiterhelfen könnte ;-)

Danke,
 
Dazu wäre es ganz hilfreich, die Dokumentstruktur deiner *.xml zu kennen - eine solche Quizdatei kann man sicher unterschiedlich aufbauen. :)

Als Anhang wäre das nicht schlecht...

Geist
 
Geht klar :-)

Aber nicht lachen, wegen dem sehr einfachen Aufbau (denke, txt.datei hätte es zwar bestimmt auch getan, aber xml wirkt eben nach mehr ;-) )

Danke schon mal
 

Anhänge

Zunächst solltest du die *.xml reparieren, in Zeile 2 solltest du den Wert des Attributes "antwort" komplett "verstringen", indem du auch öffnende Anführungszeichen einfügst. :)

Und kannst du uns noch näherbringen, warum du nicht überall das Attribut "antwort" verwendest, sondern auch mal "antwort2" und "antwort3"? :)

Wie es weitergeht, schau ich mir mal noch an, kann aber nicht versprechen, dass die Antwort heute noch kommt.

'ne Kurzbeschreibung wäre schonmal:
  • XML-Dokument in ein XML-Objekt des Players einladen (an onLoad-Handler denken!)
  • Eigenschaft "fragen" erstellen, die den numerischen Wert der Anzahl der Fragen beinhaltet - rauszukriegen über this.firstChild.childNodes.length
  • for-Schleife so oft loopen lassen, wie du Zufallsfragen möchtest
  • innerhalb der Schleife über Math.floor(Math.random()*this.fragen) eine Zufallszahl erstellen, die von 0 - Anzahl der Fragen gehen kann
  • über das Array this.firstChild.childNodes und den Zugriffsoperator samt Zufallszahl auf ein Frage-Element zugreifen
  • Frage-Element danach löschen bzw. auf den Wert null setzen, damit es später nicht nochmal auftaucht
  • ...
hth,
Geist - der jetzt schnell wegmuss
 
Hallo,

ich habe gerade genau das selbe Problem, kann aber leider mit der Kurzbeschreibung nichts anfangen. Kann mir das jemand genauer erklären?

Noch einamal mein Problem:

(Ich habe es geschafft mit Hilfe von diversen Tutorials ein Multiplechoice Quiz mit Flash MX zu erstellen, welches sich die Fragen und Antworten aus einer XML-Datei holt.

Nun mein Problem, ich möchte gerne, das die Fragen zufällig aus der XML-Datei ausgelsen werden und sich dabei nicht wiederholen, zudem immer 10 aus einer Anzahl x (also nicht wie jetzt immer jede Frage nacheinander).)

Wer kann mir da helfen? Und vorallem verraten, wie ich es dann einbauen kann, da dies voraussichtlich mein nächstes Problem ist?

Bin für jeden Rat dankbar, da ich schon verzweifelt nach einer Lösung suche. Für mich ist das alles noch Neuland.



Das Scipt:
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++;
    }
    gotoAndPlay(_currentFrame+1); 
}

var quizItems=new Array();
var myData=new XML();
myData.ignoreWhite=true;
myData.onLoad=onQuizData;
myData.load("quiz.xml");
stop();
 
Zuletzt bearbeitet:
Zurück