◆ Portail Antalaha

Annuaire › Code ouvert

Quiz Antalaha et Madagascar

tutorial · Voir le site ↗
Connectez-vous pour copier ce site

Code publié par son auteur, en lecture seule. « Copier dans mon espace » crée un nouveau site à vous (non publié) que vous pouvez modifier librement.

js/main.js · 2.7 Ko

/* ============================================================
   Fichier : js/main.js
   Rôle    : le CHEF D'ORCHESTRE. Il relie les trois autres couches :
             données (data/questions.js), logique (Quiz), affichage (UI)
             et sons (Sons). Il ne contient presque aucune règle : il
             dit seulement « quand ceci arrive, fais cela ».
   Dépend de : Quiz (js/quiz.js), UI (js/ui.js), Sons (js/sons.js).
               Doit donc être chargé EN DERNIER.
   ------------------------------------------------------------
   Schéma du flux :
     clic de l'utilisateur -> UI -> (actions ci-dessous) -> Quiz
     Quiz change son état  -> notifie -> (abonnement ci-dessous) -> UI + Sons
   ============================================================ */

(function () {
  "use strict";

  /* ----------------------------------------------------------
     1. DU QUIZ VERS L'ÉCRAN ET LES SONS
     Chaque fois que le Quiz signale un événement, on redessine
     l'écran, puis on joue le son qui correspond.
     ---------------------------------------------------------- */
  Quiz.abonner(function (evenement, state) {
    UI.afficher(evenement, state);

    switch (evenement) {
      case "question":
        Sons.jouer("pop");
        break;
      case "reponse":
        // Un son différent selon que la réponse est bonne ou non
        Sons.jouer(state.correct ? "succes" : "erreur");
        break;
      case "fin":
        // Fanfare si la moitié des réponses au moins sont bonnes
        if (state.bonnes * 2 >= state.questions.length) { Sons.jouer("victoire"); }
        break;
    }
  });

  /* ----------------------------------------------------------
     2. DE L'UTILISATEUR VERS LE QUIZ
     UI nous donne ces fonctions à appeler quand l'utilisateur agit.
     Les sons déclenchés ici le sont juste après un clic : c'est ce
     qui les rend autorisés par le navigateur (règle anti-autoplay).
     ---------------------------------------------------------- */
  UI.init({
    surDemarrer: function (niveau) {
      Sons.jouer("clic");
      Quiz.demarrer(niveau);
    },
    surChoix: function (position) {
      Quiz.repondre(position);
    },
    surSuivante: function () {
      Quiz.suivante();
    },
    surAbandon: function () {
      Sons.jouer("clic");
      Quiz.retourAccueil();
    },
    surSon: function (actif) {
      Sons.activer(actif);
      if (actif) { Sons.jouer("clic"); } // petit retour sonore à l'activation
    }
  });

  /* ----------------------------------------------------------
     3. DÉMARRAGE : le Quiz charge les records et annonce l'accueil
     ---------------------------------------------------------- */
  Quiz.init();
})();