Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ Programme des Tours de Hanoï animé en CoddyRun (5 disques)
// Déclarations des variables globales
numDisques est un nombre
numDisques vaut 5
mesFrames est un tableau
tourA est un tableau
tourB est un tableau
tourC est un tableau
// Initialisation de la tour source avec 5 disques
pour k de numDisques à 1 pas - 1
tourA ajoute k
fin pour
// Procédure modulaire pour dessiner les disques d'un piquet
procédure dessinerPiquet(uneToile, laTour, centreX)
nbDisques est un nombre
nbDisques vaut longueur(laTour)
si nbDisques > 0 alors
pour idx de 0 à nbDisques - 1
tailleDisque est un nombre
tailleDisque vaut laTour[idx]
// Calcul de la largeur proportionnelle
largeurDisque est un nombre
largeurDisque vaut (tailleDisque * 22) + 20
posX est un nombre
posX vaut centreX - (largeurDisque / 2)
posY est un nombre
posY vaut 250 - ((idx + 1) * 18)
// Couleur dynamique selon le disque
coul est un texte
si tailleDisque mod 5 = 1 alors
coul vaut rgb(231, 76, 60) // Rouge
sinon si tailleDisque mod 5 = 2 alors
coul vaut rgb(52, 152, 219) // Bleu
sinon si tailleDisque mod 5 = 3 alors
coul vaut rgb(46, 204, 113) // Vert
sinon si tailleDisque mod 5 = 4 alors
coul vaut rgb(241, 196, 15) // Jaune
sinon
coul vaut rgb(155, 89, 182) // Violet
fin si
rectangle(uneToile, posX, posY, largeurDisque, 16, coul)
fin pour
fin si
fin procédure
// Procédure pour générer chaque image de l'animation
procédure dessinerEtat()
uneToile est une toile
dimension(uneToile, 600, 300)
remplir(uneToile, #F0F4F8)
// Socle et piquets
rectangle(uneToile, 20, 250, 560, 15, #333333)
rectangle(uneToile, 95, 70, 10, 180, #777777)
rectangle(uneToile, 295, 70, 10, 180, #777777)
rectangle(uneToile, 495, 70, 10, 180, #777777)
// Libellés
label(uneToile, 80, 285, "Tour A", #000000,14)
label(uneToile, 280, 285, "Tour B", #000000,14)
label(uneToile, 480, 285, "Tour C", #000000,14)
// Dessin des 3 piquets
appelle dessinerPiquet(uneToile, tourA, 100)
appelle dessinerPiquet(uneToile, tourB, 300)
appelle dessinerPiquet(uneToile, tourC, 500)
mesFrames ajoute uneToile
fin procédure
// Procédure de déplacement d'un disque
procédure bouger(pSource, pDest)
disqueBouge est un nombre
disqueBouge vaut 0
dernierIdx est un nombre
si pSource = 1 alors
dernierIdx vaut longueur(tourA) - 1
disqueBouge vaut tourA[dernierIdx]
tourA supprime dernierIdx
sinon si pSource = 2 alors
dernierIdx vaut longueur(tourB) - 1
disqueBouge vaut tourB[dernierIdx]
tourB supprime dernierIdx
sinon
dernierIdx vaut longueur(tourC) - 1
disqueBouge vaut tourC[dernierIdx]
tourC supprime dernierIdx
fin si
si pDest = 1 alors
tourA ajoute disqueBouge
sinon si pDest = 2 alors
tourB ajoute disqueBouge
sinon
tourC ajoute disqueBouge
fin si
appelle dessinerEtat()
fin procédure
// Algorithme récursif
procédure hanoi(n, dep, arr, aux)
si n = 1 alors
appelle bouger(dep, arr)
sinon
appelle hanoi(n - 1, dep, aux, arr)
appelle bouger(dep, arr)
appelle hanoi(n - 1, aux, arr, dep)
fin si
fin procédure
// Capture de l'état initial
appelle dessinerEtat()
// Résolution pour 5 disques
appelle hanoi(numDisques, 1, 3, 2)
// Animation avec un intervalle de 400 ms (31 mouvements)
animation(mesFrames, 400, 0)