Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ Déclaration de toutes les variables
lignes est un nombre
colonnes est un nombre
tailleCase est un nombre
sommeCible est un nombre
cx est un nombre
cy est un nombre
direction est un nombre
pos est un nombre
valA est un nombre
valB est un nombre
px est un nombre
py est un nombre
choixMode est un nombre
estSurChemin est un booléen
programmeEnCours est un booléen
menuActif est un booléen
partieEnCours est un booléen
clicX est un nombre
clicY est un nombre
caseX est un nombre
caseY est un nombre
grilleChemin est un tableau
nombresA est un tableau
nombresB est un tableau
maToile est une toile
txtA est un texte
txtB est un texte
largeurA est un nombre
largeurB est un nombre
posXA est un nombre
posXB est un nombre
@ Initialisation des paramètres fixes
lignes vaut 9
colonnes vaut 8
tailleCase vaut 45
programmeEnCours vaut vrai
@ Boucle principale du programme
tant que programmeEnCours = vrai
@ 1. Préparation d'un nouveau labyrinthe
sommeCible vaut hasard(6, 12)
vide grilleChemin
vide nombresA
vide nombresB
pour i de 0 à (lignes * colonnes) - 1
grilleChemin ajoute faux
nombresA ajoute 0
nombresB ajoute 0
fin pour
@ 2. Génération du bon chemin
cx vaut 0
cy vaut 0
grilleChemin[0] vaut vrai
tant que (cx < colonnes - 1) ou (cy < lignes - 1)
si cx = colonnes - 1 alors
cy vaut cy + 1
sinon si cy = lignes - 1 alors
cx vaut cx + 1
sinon
direction vaut hasard(0, 1)
si direction = 0 alors
cx vaut cx + 1
sinon
cy vaut cy + 1
fin si
fin si
pos vaut cy * colonnes + cx
grilleChemin[pos] vaut vrai
fin tant que
@ 3. Génération des valeurs
pour y de 0 à lignes - 1
pour x de 0 à colonnes - 1
pos vaut y * colonnes + x
estSurChemin vaut grilleChemin[pos]
si estSurChemin = vrai alors
valA vaut hasard(0, sommeCible)
valB vaut sommeCible - valA
sinon
valA vaut hasard(0, 20)
valB vaut hasard(0, 20)
tant que valA + valB = sommeCible
valA vaut hasard(0, 20)
valB vaut hasard(0, 20)
fin tant que
fin si
nombresA[pos] vaut valA
nombresB[pos] vaut valB
fin pour
fin pour
@ 4. Dessin de la toile initiale
dimension(maToile, colonnes * tailleCase + 2, lignes * tailleCase + 2)
remplir(maToile, #FFFFFF)
contour(maToile, #000000, 1)
pour y de 0 à lignes - 1
pour x de 0 à colonnes - 1
pos vaut y * colonnes + x
px vaut x * tailleCase + 1
py vaut y * tailleCase + 1
si pos = 0 alors
rectangle(maToile, px, py, tailleCase, tailleCase, #AAFFDD)
sinon si pos = (lignes * colonnes) - 1 alors
rectangle(maToile, px, py, tailleCase, tailleCase, #BAE6FD)
sinon
rectangle(maToile, px, py, tailleCase, tailleCase, #FFFFFF)
fin si
txtA vaut convertir_texte(nombresA[pos])
txtB vaut "+ " + convertir_texte(nombresB[pos])
largeurA vaut label_largeur(txtA, 12)
largeurB vaut label_largeur(txtB, 12)
posXA vaut px + (tailleCase - largeurA) / 2
posXB vaut px + (tailleCase - largeurB) / 2
label(maToile, posXA, py + 18, txtA, #000000, 12)
label(maToile, posXB, py + 36, txtB, #000000, 12)
fin pour
fin pour
contour(maToile, #0)
affiche maToile
@ 5. Boucle interactive de jeu (Clics & Détection de victoire)
partieEnCours vaut vrai
tant que partieEnCours = vrai
cliquer maToile dans clicX, clicY
@ Correction : arrondi_inferieur garantit un index entier exact
caseX vaut arrondi_inferieur(clicX / tailleCase)
caseY vaut arrondi_inferieur(clicY / tailleCase)
si (caseX >= 0) et (caseX < colonnes) et (caseY >= 0) et (caseY < lignes) alors
pos vaut caseY * colonnes + caseX
px vaut caseX * tailleCase + 1
py vaut caseY * tailleCase + 1
si grilleChemin[pos] = vrai alors
si pos = (lignes * colonnes) - 1 alors
rectangle(maToile, px, py, tailleCase, tailleCase, #BAE6FD)
sinon si pos = 0 alors
rectangle(maToile, px, py, tailleCase, tailleCase, #AAFFDD)
sinon
rectangle(maToile, px, py, tailleCase, tailleCase, #FFEE55)
fin si
txtA vaut convertir_texte(nombresA[pos])
txtB vaut "+ " + convertir_texte(nombresB[pos])
largeurA vaut label_largeur(txtA, 12)
largeurB vaut label_largeur(txtB, 12)
posXA vaut px + (tailleCase - largeurA) / 2
posXB vaut px + (tailleCase - largeurB) / 2
label(maToile, posXA, py + 18, txtA, #000000, 12)
label(maToile, posXB, py + 36, txtB, #000000, 12)
affiche maToile
si pos = (lignes * colonnes) - 1 alors
affiche "Victoire ! Vous avez atteint l'arrivée !"
partieEnCours vaut faux
fin si
sinon
affiche "Mauvaise case ! Ce n'est pas le bon chemin."
fin si
fin si
fin tant que
@ 6. Boucle du menu d'actions après une partie
menuActif vaut vrai
tant que menuActif = vrai
choisir ["Générer un nouveau labyrinthe", "Quitter"] dans choixMode
si choixMode = 1 alors
menuActif vaut faux
sinon
programmeEnCours vaut faux
menuActif vaut faux
terminer
fin si
fin tant que
fin tant que