Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
@ Reglages
ordre est un nombre
ordre vaut 5 // ordre de la courbe (5 -> grille 32x32, 1024 cases)
cote est un nombre
cote vaut 2 ^ ordre // nombre de cases par cote (2^ordre)
marge est un nombre
marge vaut 20
largCarte est un nombre
hautCarte est un nombre
largCarte vaut 360
hautCarte vaut 360
// taille d'une case a l'ecran
ecart est un nombre
ecart vaut (largCarte - 2 * marge) / (cote - 1)
@ --- Conversion index - > coordonnees (algorithme d2xy de Hilbert) ---
// Pour une distance d le long de la courbe (0 a cote*cote - 1),
// renvoie la position (x, y) dans la grille. Que des entiers.
// On stocke le resultat dans deux variables globales hx, hy.
hx est un nombre
hy est un nombre
procedure hilbert_d2xy(d)
// rx, ry = bits courants ; t = distance restante
rx est un nombre
ry est un nombre
treste est un nombre
s est un nombre
tmp est un nombre
hx vaut 0
hy vaut 0
treste vaut d
s vaut 1
tant que s < cote
// rx = bit de poids faible de (treste / 2)
rx vaut arrondi_inferieur(treste / 2) mod 2
// ry = XOR entre le bit0 de treste et rx.
// XOR sur un seul bit = (a + b) mod 2 (aucun operateur binaire en CoddyRun)
ry vaut ((treste mod 2) + rx) mod 2
// rotation du quadrant si necessaire
si ry = 0 alors
si rx = 1 alors
hx vaut s - 1 - hx
hy vaut s - 1 - hy
fin si
// echanger hx et hy
tmp vaut hx
hx vaut hy
hy vaut tmp
fin si
// ajouter la contribution de ce niveau
hx vaut hx + s * rx
hy vaut hy + s * ry
// passer au niveau suivant
treste vaut arrondi_inferieur(treste / 4)
s vaut s * 2
fin tant que
fin procedure
@ fonction : couleur arc - en - ciel selon une progression p entre 0 et 1
fonction couleurArc(p)
r est un nombre
v est un nombre
b est un nombre
h est un nombre
h vaut 240 - p * 240
si h < 60 alors
r vaut 255
v vaut arrondi(h / 60 * 255)
b vaut 0
sinon si h < 120 alors
r vaut arrondi((120 - h) / 60 * 255)
v vaut 255
b vaut 0
sinon si h < 180 alors
r vaut 0
v vaut 255
b vaut arrondi((h - 120) / 60 * 255)
sinon
r vaut 0
v vaut arrondi((240 - h) / 60 * 255)
b vaut 255
fin si
retourne rgb(r, v, b)
fin fonction
@ Pre - calcul de tous les points de la courbe
ptsX est un tableau
ptsY est un tableau
total est un nombre
total vaut cote * cote
d est un nombre
pour d de 0 a total - 1
appelle hilbert_d2xy(d)
ptsX ajoute marge + hx * ecart
ptsY ajoute marge + hy * ecart
fin pour
@ Animation : on ajoute un segment de plus a chaque image
// (a cet ordre il y a beaucoup de segments : on en trace plusieurs
// par image pour garder une animation fluide et pas trop longue)
images est un tableau
frame est une toile
dimension(frame, largCarte, hautCarte)
segParImage est un nombre
segParImage vaut 15 // nombre de segments ajoutes a chaque image
nbSeg est un nombre
nbSeg vaut total - 1
cible est un nombre // jusqu'ou tracer a l'image courante
j est un nombre
prog est un nombre
coul est un texte
finJ est un nombre
cible vaut segParImage
tant que cible <= nbSeg + segParImage
effacer(frame)
remplir(frame, #0B1020)
// tracer tous les segments de 0 a min(cible, nbSeg)
finJ vaut minimum(cible, nbSeg)
pour j de 0 a finJ - 1
prog vaut j / nbSeg
coul vaut couleurArc(prog)
ligne(frame, ptsX[j], ptsY[j], ptsX[j + 1], ptsY[j + 1], coul, 2)
fin pour
images ajoute frame
cible vaut cible + segParImage
fin tant que
@ Lancement de l'animation
animation(images, 160, 0)