Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
// --- Map Generator : Diamond-Square Algorithm ---
tailleGrille est un nombre
tailleGrille vaut 257
carte est un tableau
// Initialisation du tableau 2D
pour i de 0 à tailleGrille - 1
ligneTableau est un tableau
pour j de 0 à tailleGrille - 1
ligneTableau ajoute 0
fin pour
carte ajoute ligneTableau
fin pour
// --- Initialisation des 4 coins ---
rugosite est un nombre
rugosite vaut 1,0
carte[0][0] vaut hasard(0, 50)
carte[0][tailleGrille - 1] vaut hasard(0, 50)
carte[tailleGrille - 1][0] vaut hasard(0, 50)
carte[tailleGrille - 1][tailleGrille - 1] vaut hasard(0, 50)
pasCourant est un nombre
pasCourant vaut tailleGrille - 1
// --- Algorithme Diamond-Square ---
tant que pasCourant > 1
demiPas est un nombre
demiPas vaut pasCourant / 2
// --- Phase Diamond ---
pour y de demiPas à tailleGrille - 1 pas pasCourant
pour x de demiPas à tailleGrille - 1 pas pasCourant
sommeCoins est un nombre
sommeCoins vaut carte[y - demiPas][x - demiPas] + carte[y - demiPas][x + demiPas] + carte[y + demiPas][x - demiPas] + carte[y + demiPas][x + demiPas]
moyenneCoins est un nombre
moyenneCoins vaut sommeCoins / 4
randFloat est un nombre
randFloat vaut (hasard(0, 200) / 100) - 1,0
decalage est un nombre
decalage vaut randFloat * rugosite * 50
carte[y][x] vaut moyenneCoins + decalage
fin pour
fin pour
// --- Phase Square ---
pour y de 0 à tailleGrille - 1 pas demiPas
decalageX est un nombre
si (y mod pasCourant) = 0 alors
decalageX vaut demiPas
sinon
decalageX vaut 0
fin si
pour x de decalageX à tailleGrille - 1 pas pasCourant
compte est un nombre
compte vaut 0
valTotal est un nombre
valTotal vaut 0,0
si y >= demiPas alors
valTotal vaut valTotal + carte[y - demiPas][x]
compte ajoute 1
fin si
si y + demiPas < tailleGrille alors
valTotal vaut valTotal + carte[y + demiPas][x]
compte ajoute 1
fin si
si x >= demiPas alors
valTotal vaut valTotal + carte[y][x - demiPas]
compte ajoute 1
fin si
si x + demiPas < tailleGrille alors
valTotal vaut valTotal + carte[y][x + demiPas]
compte ajoute 1
fin si
moyenneVoisins est un nombre
moyenneVoisins vaut valTotal / compte
randFloatSq est un nombre
randFloatSq vaut (hasard(0, 200) / 100) - 1
decalageSquare est un nombre
decalageSquare vaut randFloatSq * rugosite * 50
carte[y][x] vaut moyenneVoisins + decalageSquare
fin pour
fin pour
rugosite vaut rugosite * 0,55
pasCourant vaut demiPas
fin tant que
// --- Normalisation des hauteurs ---
minVal est un nombre
minVal vaut carte[0][0]
maxVal est un nombre
maxVal vaut carte[0][0]
pour i de 0 à tailleGrille - 1
pour j de 0 à tailleGrille - 1
si carte[i][j] < minVal alors
minVal vaut carte[i][j]
fin si
si carte[i][j] > maxVal alors
maxVal vaut carte[i][j]
fin si
fin pour
fin pour
etendue est un nombre
etendue vaut maxVal - minVal
si etendue = 0 alors
etendue vaut 1,0
fin si
pour i de 0 à tailleGrille - 1
pour j de 0 à tailleGrille - 1
normalise est un nombre
normalise vaut ((carte[i][j] - minVal) / etendue) * 100
carte[i][j] vaut normalise
fin pour
fin pour
// --- Rendu graphique sur une toile (Taille 450x450 sans lignes) ---
tailleEcran est un nombre
tailleEcran vaut 450
toileCarte est une toile
dimension(toileCarte, tailleEcran, tailleEcran)
remplir(toileCarte, #031634)
// Désactive les bordures appliquées aux rectangles
contour(toileCarte, #0)
tailleCellule est un nombre
tailleCellule vaut tailleEcran / (tailleGrille - 1)
pour i de 0 à tailleGrille - 2
pour j de 0 à tailleGrille - 2
h est un nombre
h vaut carte[i][j]
couleurCase est un texte
couleurCase vaut #000080
si h < 20 alors
couleurCase vaut #0044bb
sinon si h < 35 alors
couleurCase vaut #33ccff
sinon si h < 42 alors
couleurCase vaut #ffeb60
sinon si h < 60 alors
couleurCase vaut #2bb24c
sinon si h < 75 alors
couleurCase vaut #996633
sinon si h < 88 alors
couleurCase vaut #777777
sinon
couleurCase vaut #ffffff
fin si
posX est un nombre
posX vaut j * tailleCellule
posY est un nombre
posY vaut i * tailleCellule
// On dessine avec un très léger chevauchement pour annuler le lissage SVG
rectangle(toileCarte, posX, posY, tailleCellule + 1.5, tailleCellule + 1.5, couleurCase)
fin pour
fin pour
affiche toileCarte