Réaliser un QCM Imprimer

Il est vrai que réaliser un QCM en Flash n'est pas la meilleure solution, il est tout de même préférable de le réaliser en HTML classique, mais dans le cas où vous auriez besoin de le faire au sein d'un SWF, voici une proposition.

 

I. Structure du fichier XML

 

Vous n'êtes pas obligé d'avoir 3 réponses par question, vous pouvez en avoir tant que vous voulez (au moins 2). En attendant, voici un exemple de la structure attendue par le fichier .fla.

 

<questions>

    <question>
        <intitule>A quelle couleur correspond le code FFFF00 ?</intitule>
        <reponse val="0">Rouge.</reponse>
        <reponse val="0">Vert.</reponse>
        <reponse val="1">Jaune.</reponse>
    </question>
   
    <question>
        <intitule>Qu'est-ce qu'une hampe ?</intitule>
        <reponse val="0">Le bord d'une rivière.</reponse>
        <reponse val="1">Le long trait vertical d'un caractère.</reponse>
        <reponse val="0">La résultat du calcul d'un interlettrage.</reponse>
    </question>
   
    <question>
        <intitule>Où se trouve l'Erythrée ?</intitule>
        <reponse val="0">En Asie.</reponse>
        <reponse val="0">Au sud de l'Espagne.</reponse>
        <reponse val="1">En Afrique.</reponse>
    </question>
   
    <question>
        <intitule>Combien de pays y a-t-il dans le monde ?</intitule>
        <reponse val="0">Un peu moins de 150</reponse>
        <reponse val="0">Plus de 300</reponse>
        <reponse val="1">Un peu plus de 200</reponse>
    </question>

</questions>

 

Remarque : La bonne réponse et sa valeur doivent être spécifiés dans la balise <reponse>, il s'agit de la valeur de l'attribut val.

 

II. Contenu des 3 images clé de l'animation

 

Ouvrez le fichier Flash disponible au téléchargement via le lien ci-dessous pour analyser les éléments placés sur la scène. Ouvrez également le Symbole Reponse pour découvrir le nom d'instance des occurrences qu'il contient.

Télécharger l'archive contenant le fichier .xml et le fichier Flash .fla.

 

III. Code du fichier Flash

 

Sur l'image 1

 

 stop();

var scoreGlobal:Number=0
var nombreQuestions:Number

// Bouton Commencer

btSuite.buttonMode = true;
btSuite.alpha = 0.5;
btSuite.mouseEnabled = false;
btSuite.addEventListener(MouseEvent.MOUSE_DOWN,ecranSuivant);
function ecranSuivant(evt:MouseEvent) {
    nextFrame();
}

// Chargement du XML

var adresse = new URLRequest('qcm.xml');
var arbo:XML;
var chargeur=new URLLoader();
chargeur.load(adresse);

chargeur.addEventListener(Event.COMPLETE,donneesChargees);
function donneesChargees(evt:Event) {
    arbo = new XML(chargeur.data);
    nombreQuestions = arbo.question.length()
    btSuite.alpha = 1;
    btSuite.mouseEnabled = true;
}

 

Sur l'image 2

 

var numeroQuestion = 0;// Compteur de questions
var nombreReponses:Number;// Variable pour mémoriser le nombre de réponses par question
var reponse:Reponse; // Reponse est le nom de classe du symbole Eponyme
var serieReponses:Array = new Array();
var valeurReponseCliquee:Number = 0;


// Préparer une zone pour placer les réponses
var reponses = new Sprite();
addChild(reponses);

// Créer une première série de réponses

creerEcran();

// Désactiver le bouton "Question Suivante"

btQuestionSuivante.buttonMode = true;// Afficher le doigt (lorsque mouseEnabled sera sur true)
btQuestionSuivante.alpha = 0.3;
btQuestionSuivante.mouseEnabled = false;


// Programmation bouton "Question Suivante"

btQuestionSuivante.addEventListener(MouseEvent.MOUSE_DOWN,afficherQuestionSuivante);
function afficherQuestionSuivante(evt:MouseEvent) {
    scoreGlobal +=  valeurReponseCliquee;
    valeurReponseCliquee = 0;
    serieReponses = new Array();
    numeroQuestion++;
    if (numeroQuestion >= nombreQuestions) {
        removeChild(reponses);
        gotoAndStop(3);
    } else {
        creerEcran();
    }
}

function creerEcran() {

    // Effacer les réponses précédentes

    removeChild(reponses);
    reponses = new Sprite();
    addChild(reponses);
    // Afficher la question suivante
    question_txt.text = arbo.question[numeroQuestion].intitule;

    // Compter le nombre de réponses à afficher
    nombreReponses = arbo.question[numeroQuestion].reponse.length();

    // Afficher les reponses
    for (var i=0; i<nombreReponses; i++) {
        reponse = new Reponse();
        serieReponses.push(reponse);
        reponses.addChild(reponse);
        reponse.x = 50;
        reponse.y = 150+(i*60);
        reponse.text = arbo.question[numeroQuestion].reponse[i];
        reponse.etiquette_txt.text = arbo.question[numeroQuestion].reponse[i];
        reponse.btRadio.buttonMode = true;
        reponse.btRadio.addEventListener(MouseEvent.MOUSE_DOWN,clicBoutonRadio);
        reponse.btRadio.mouseChildren = false;
        reponse.btRadio.valeurReponse = arbo.question[numeroQuestion].reponse[i].@val;
    }

}

function clicBoutonRadio(evt:MouseEvent) {
    //Réactiver le bouton "Question Suivante"
    btQuestionSuivante.alpha = 1;
    btQuestionSuivante.mouseEnabled = true;
    valeurReponseCliquee = evt.target.valeurReponse;

    for each (var rep in serieReponses) {
        rep.btRadio.gotoAndStop(1);
    }

    MovieClip(evt.target).gotoAndStop(2);
}

 

Sur l'image 3

 

if (scoreGlobal <= 1) {
    resultat_txt.text = scoreGlobal.toString() + " bonne réponse";
} else {
    resultat_txt.text = scoreGlobal.toString() + " bonnes réponses";
}

 

 

 

 

Mise à jour le Dimanche, 04 Juillet 2010 23:46