Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
@ Initialisation des procédures et structures de questions
procédure ajouterQ(tab, txt, o1, o2, o3, o4, r)
item est un enregistrement
item.enonce vaut txt
item.opt1 vaut o1
item.opt2 vaut o2
item.opt3 vaut o3
item.opt4 vaut o4
item.rep vaut r
tab ajoute item
fin procédure
procédure dessinerBouton(t, x, y, l, h, txt, numOpt, repOpt, choixOpt, valide)
couleurBouton est un texte
couleurBouton vaut #393E46
si valide alors
si numOpt = repOpt alors
couleurBouton vaut #2E7D32 // Vert si bonne réponse
sinon si numOpt = choixOpt alors
couleurBouton vaut #C62828 // Rouge si mauvaise réponse choisie
sinon
couleurBouton vaut #252A34 // Assombri sinon
fin si
fin si
rectangle_arrondi(t, x, y, l, h, 8, couleurBouton)
label(t, x + 20, y + 30, txt, #FFFFFF, 14)
fin procédure
procédure dessinerQuiz(t, q, numQ, totalQ, score, choixUtilisateur, validationAffichee)
effacer(t)
remplir(t, #1A1D24)
// Barre d'en-tête
rectangle(t, 0, 0, 640, 50, #252A34)
label(t, 20, 32, "QUIZ CoddyRun", #00ADB5, 20)
label(t, 210, 32, "Question " + convertir_texte(numQ) + " / " + convertir_texte(totalQ), #EEEEEE, 16)
label(t, 480, 32, "Score : " + convertir_texte(score), #FFD700, 16)
// Barre de progression
rectangle(t, 0, 50, 640, 6, #393E46)
largeurBarre est un nombre
largeurBarre vaut arrondi((numQ / totalQ) * 640)
rectangle(t, 0, 50, largeurBarre, 6, #00ADB5)
// Cadre de l'énoncé
rectangle_arrondi(t, 30, 75, 580, 50, 8, #252A34)
label(t, 45, 106, q.enonce, #FFFFFF, 14)
// Boutons de réponses
appelle dessinerBouton(t, 30, 140, 580, 48, q.opt1, 1, q.rep, choixUtilisateur, validationAffichee)
appelle dessinerBouton(t, 30, 200, 580, 48, q.opt2, 2, q.rep, choixUtilisateur, validationAffichee)
appelle dessinerBouton(t, 30, 260, 580, 48, q.opt3, 3, q.rep, choixUtilisateur, validationAffichee)
appelle dessinerBouton(t, 30, 320, 580, 48, q.opt4, 4, q.rep, choixUtilisateur, validationAffichee)
// Bouton Suivant / Info
si validationAffichee alors
rectangle_arrondi(t, 220, 380, 200, 40, 20, #00ADB5)
label(t, 290, 405, "SUIVANT", #FFFFFF, 14)
sinon
label(t, 200, 405, "Clique sur la bonne réponse...", #AAAAAA, 13)
fin si
affiche t
fin procédure
@ Chargement des 20 questions
questions est un tableau
appelle ajouterQ(questions, "1. Quel est le séparateur décimal en CoddyRun ?", "A) La virgule (,)", "B) Le point (.)", "C) Deux-points (:)", "D) L'espace", 2)
appelle ajouterQ(questions, "2. Comment ferme-t-on une condition si ?", "A) finsi", "B) fin si", "C) fin", "D) }", 2)
appelle ajouterQ(questions, "3. À quel index commence un tableau ?", "A) Index 0", "B) Index 1", "C) Index -1", "D) Index 0.5", 1)
appelle ajouterQ(questions, "4. À quel index commence un texte ?", "A) Index 0", "B) Index 1", "C) Index 2", "D) Index 0.5", 2)
appelle ajouterQ(questions, "5. Quel mot-clé sert à exécuter une procédure ?", "A) lancer", "B) executer", "C) appelle", "D) fonction", 3)
appelle ajouterQ(questions, "6. Écriture correcte d'une couleur hexadécimale ?", "A) '#FF0000'", "B) #FF0000", "C) rouge", "D) rgb(rouge)", 2)
appelle ajouterQ(questions, "7. Déclaration correcte d'un nombre ?", "A) x = 0", "B) x est un nombre", "C) nombre x", "D) var x : nombre", 2)
appelle ajouterQ(questions, "8. Comment affecter une valeur à une variable ?", "A) x = 10", "B) x vaut 10", "C) x est 10", "D) x <- 10", 2)
appelle ajouterQ(questions, "9. Quelle syntaxe crée un dictionnaire vide ?", "A) []", "B) {}", "C) [:]", "D) dict()", 3)
appelle ajouterQ(questions, "10. Quel mot-clé permet de sortir d'une boucle ?", "A) arrete", "B) break", "C) stopper", "D) fin", 1)
appelle ajouterQ(questions, "11. Quelle fonction calcule la racine carrée ?", "A) sqrt(x)", "B) racine(x)", "C) rad(x)", "D) sqr(x)", 2)
appelle ajouterQ(questions, "12. Quel mot-clé arrête le programme ?", "A) stopper", "B) fin", "C) quitter", "D) terminer", 4)
appelle ajouterQ(questions, "13. Comment s'écrit un commentaire d'une ligne ?", "A) //", "B) #", "C) --", "D) /*", 1)
appelle ajouterQ(questions, "14. Fonction pour tester la zone d'un clic ?", "A) cliquer()", "B) clique()", "C) zone()", "D) collision()", 2)
appelle ajouterQ(questions, "15. Comment ajouter un élément à un tableau t ?", "A) t.push(x)", "B) t ajoute x", "C) t + x", "D) t insere x", 2)
appelle ajouterQ(questions, "16. Quel est le type pour une chaîne de caractères ?", "A) string", "B) texte", "C) char", "D) message", 2)
appelle ajouterQ(questions, "17. Comment se termine une boucle tant que ?", "A) fin tant que", "B) fintantque", "C) wend", "D) fin tantque", 1)
appelle ajouterQ(questions, "18. Fonction pour mesurer un temps en ms ?", "A) temps()", "B) horloge()", "C) chrono()", "D) timer()", 3)
appelle ajouterQ(questions, "19. Opérateur pour le reste d'une division ?", "A) %", "B) mod", "C) rem", "D) div", 2)
appelle ajouterQ(questions, "20. Fonction pour effacer le dessin d'une toile ?", "A) nettoyer(t)", "B) effacer(t)", "C) raz(t)", "D) vider(t)", 2)
@ Boucle principale du jeu
maToile est une toile
dimension(maToile, 640, 440)
rejouer est un booléen
rejouer vaut vrai
tant que rejouer
score est un nombre
score vaut 0
i est un nombre
pour i de 0 à 19
actuelle est un enregistrement
actuelle vaut questions[i]
choix est un nombre
choix vaut 0
// 1. Afficher l'énoncé de la question
appelle dessinerQuiz(maToile, actuelle, i + 1, 20, score, 0, faux)
// 2. Attente de la sélection utilisateur
attenteClic est un booléen
attenteClic vaut vrai
clicX, clicY est un nombre
tant que attenteClic
cliquer maToile dans clicX, clicY
si clique(clicX, clicY, 30, 140, 580, 48) alors
choix vaut 1
attenteClic vaut faux
sinon si clique(clicX, clicY, 30, 200, 580, 48) alors
choix vaut 2
attenteClic vaut faux
sinon si clique(clicX, clicY, 30, 260, 580, 48) alors
choix vaut 3
attenteClic vaut faux
sinon si clique(clicX, clicY, 30, 320, 580, 48) alors
choix vaut 4
attenteClic vaut faux
fin si
fin tant que
// Mise à jour du score
si choix = actuelle.rep alors
score ajoute 1
fin si
// 3. Afficher la correction
appelle dessinerQuiz(maToile, actuelle, i + 1, 20, score, choix, vrai)
// 4. Attente du clic sur "SUIVANT"
attenteSuivant est un booléen
attenteSuivant vaut vrai
tant que attenteSuivant
cliquer maToile dans clicX, clicY
si clique(clicX, clicY, 220, 380, 200, 40) alors
attenteSuivant vaut faux
fin si
fin tant que
fin pour
// Écran final de bilan
effacer(maToile)
remplir(maToile, #1A1D24)
rectangle_arrondi(maToile, 70, 40, 500, 360, 12, #252A34)
label(maToile, 220, 90, "QUIZ TERMINÉ !", #00ADB5, 24)
pct est un nombre
pct vaut arrondi(pourcentage(score, 20))
label(maToile, 180, 160, "Votre score : " + convertir_texte(score) + " / 20", #EEEEEE, 20)
label(maToile, 210, 210, "Réussite : " + convertir_texte(pct) + " %", #FFD700, 20)
msg est un texte
si pct >= 80 alors
msg vaut "Excellent ! Vous maîtrisez CoddyRun !"
sinon si pct >= 50 alors
msg vaut "Bon travail ! Encore un petit effort."
sinon
msg vaut "Revoyez la spécification CoddyRun !"
fin si
label(maToile, 140, 270, msg, #FFFFFF, 15)
// Bouton Rejouer
rectangle_arrondi(maToile, 220, 320, 200, 50, 25, #00ADB5)
label(maToile, 275, 352, "REJOUER", #FFFFFF, 16)
affiche maToile
// Attente du clic sur "REJOUER"
attenteRejouer est un booléen
attenteRejouer vaut vrai
tant que attenteRejouer
cliquer maToile dans clicX, clicY
si clique(clicX, clicY, 220, 320, 200, 50) alors
attenteRejouer vaut faux
fin si
fin tant que
fin tant que