Mini projet fait à la suite de cette vidéo : Créer un quiz en Javascript (POO). Le but était de fait un QCM en javascript.
Petit projet qui en soit ne devrait pas m'apprendre grand chose, donc c'est surtout par plaisir que je le fais.
Le projet n'étant pas complexe à la base, j'ai pu constater que le code était entièrement dans un seul fichier. J'ai donc décidé de le développer avec segmentant le code pour plus de clarté.
Les premières difficultés sont survenus lié à la portée des variables. La variable qui était vraiment génante était la variable quiz
. Afin de rendre son utilisation plus simple, j'ai pris la décision de stocker son contenu dans l'objet display.
Ainsi, je n'avais qu'à stocker au début du programme et y faire appel tout du long du projet !
Lors du développement du projet, la méthode employée dans le projet était de stocker les questions directement dans le code.
Après quelques recherches, je suis tombé sur Open Trivia Database, un site générant des json contenant des questions.
Il était aussi possible de choisir différents paramètres tel que le nombre de questions, la catégorie de question (dans mon projet, j'ai choisit les films, mais il est très facilement possible de changer cela), la difficulté (j'ai choisit facile, rien de tel pour une bonne génération de dopamine !) et le type de question (QCM ou Binaire, ici seul QCM nous intéresse).
Afin que le programme ne continue pas à s'exécuter le temps du chargement des questions, il a été nécessaire de mettre en place une Promesse, ce qui m'a pas mal compliqué la tache car le code mis en place n'était pas prévu pour attendre une promesse de questions, mais un tableau.
Voici ce que cela donne au final :
Les questions envoyées par l'API n'étant pas dans le format que l'on utilisait, il a été nécessaire de les formater. De plus, les bonnes réponses étaient toujours à la même position, il fallait donc ne pas oublier à mélanger les réponses !
Et son utilisation :
Une fois les questions chargées, on crée un nouveau Quiz que l'on stock dans display.quiz, comme précisé plus haut, pas question de simplicité. Et enfin, on lance le quiz.
Comme les 2 systèmes, questions en local et questions chargées à travers une API externe, n'avaient pas la meme structure, il a donc fallu uniformiser tout cela.
Pour cela, j'ai imbriqué les questions locales dans une promesse :
Au passage, j'ai réutilisé ma fonction pour mélanger les questions et les réponses, histoire que ce ne soit pas trop simple non plus (RIP la dopamine).
Afin de rendre facile le changement de source (via le code), je charge donc les questions de la source souhaitée en fonction de la variable local
.
Pour revenir à ce que je viens de dire, il serait possible de rajouter un formulaire pour choisir la source. Rien de bien compliqué en soit.
L'utilisateur pourrait lui-même choisir la catégorie de question, la quantité ainsi que leur complexité directement par un autre formulaire. Rien de bien compliqué non plus.
Beaucoup plus lourd à mettre en place, mais il serait aussi possible de faire des classements en fonction des catégories et du nombre de questions répondues.
Il faudrait mettre en place une base de données pour rendre cela possible.