Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
@ Caracteristiques des obstacles
fonction largObstacle(genre)
si genre = 1 alors
retourne 22
sinon si genre = 2 alors
retourne 30
sinon si genre = 3 alors
retourne 40
sinon
retourne 40
fin si
fin fonction
fonction hautObstacle(genre)
si genre = 1 alors
retourne 38
sinon si genre = 2 alors
retourne 56
sinon si genre = 3 alors
retourne 48
sinon si genre = 4 alors
retourne 28
sinon
retourne 24
fin si
fin fonction
fonction basObstacle(genre)
si genre = 4 alors
retourne 4
sinon si genre = 5 alors
retourne 32
sinon
retourne 0
fin si
fin fonction
@ toile et variables partagees
ecran est une toile
dimension(ecran, 640, 360)
solY, dinoX est un nombre
dinoY, vy, accroupi est un nombre
vitesse, distance, score, meilleur est un nombre
ecartRestant, tirage est un nombre
enLair, nuit, enJeu est un booleen
verdict est un texte
fond, trait, nuageTeinte est un texte
i, k, px, py, ox, oy, haut, larg, decal, demi est un nombre
action, ptX, ptY est un nombre
solY vaut 270
dinoX vaut 90
dinoY vaut 0
vy vaut 0
accroupi vaut 0
vitesse vaut 13
distance vaut 0
score vaut 0
ecartRestant vaut 420
enLair vaut faux
nuit vaut faux
enJeu vaut vrai
verdict vaut ""
essayer
meilleur vaut parametre('trexrunner', 'record')
attraper
meilleur vaut 0
parametre('trexrunner', 'record', meilleur)
fin essayer
@ Reservoirs d'obstacles, nuages et etoiles
obsActif est un tableau
obsGenre est un tableau
obsPos est un tableau
pour k de 0 à 5
obsActif ajoute 0
obsGenre ajoute 1
obsPos ajoute 0
fin pour
nuagePosX est un tableau
nuagePosY est un tableau
pour k de 0 à 3
nuagePosX ajoute 160 + k * 170
nuagePosY ajoute 45 + k * 22
fin pour
etoilesX est un tableau
etoilesY est un tableau
pour k de 0 à 9
etoilesX ajoute 30 + k * 62
etoilesY ajoute 20 + hasard(65)
fin pour
@ Moteur du jeu (processus parallele)
processus MoteurJeu()
tant que enJeu
// ---------- 1. Vitesse, distance, cycle jour / nuit ----------
vitesse vaut limiter(13 + arrondi_inferieur(distance / 1100), 13, 22)
distance ajoute vitesse
score vaut arrondi_inferieur(distance / 10)
si arrondi_inferieur(distance / 3000) mod 2 = 1 alors
nuit vaut vrai
sinon
nuit vaut faux
fin si
si nuit alors
fond vaut rgb(32, 33, 36)
trait vaut rgb(232, 234, 237)
nuageTeinte vaut rgb(70, 75, 80)
sinon
fond vaut rgb(247, 247, 247)
trait vaut rgb(83, 83, 83)
nuageTeinte vaut rgb(215, 215, 215)
fin si
// ---------- 2. Gravite ----------
si enLair alors
dinoY ajoute vy
vy soustrait 4
si dinoY <= 0 alors
dinoY vaut 0
vy vaut 0
enLair vaut faux
fin si
fin si
si accroupi > 0 alors
accroupi soustrait 1
fin si
// ---------- 3. Defilement et apparition des obstacles ----------
pour i de 0 à 5
si obsActif[i] = 1 alors
obsPos[i] vaut obsPos[i] - vitesse
si obsPos[i] < -80 alors
obsActif[i] vaut 0
fin si
fin si
fin pour
ecartRestant soustrait vitesse
si ecartRestant <= 0 alors
px vaut - 1
pour i de 0 à 5
si obsActif[i] = 0 alors
px vaut i
arrête
fin si
fin pour
si px >= 0 alors
tirage vaut hasard(9)
si distance < 4000 alors
si tirage <= 3 alors
obsGenre[px] vaut 1
sinon si tirage <= 6 alors
obsGenre[px] vaut 2
sinon
obsGenre[px] vaut 3
fin si
sinon
si tirage <= 2 alors
obsGenre[px] vaut 1
sinon si tirage <= 4 alors
obsGenre[px] vaut 2
sinon si tirage <= 6 alors
obsGenre[px] vaut 3
sinon si tirage <= 8 alors
obsGenre[px] vaut 4
sinon
obsGenre[px] vaut 5
fin si
fin si
obsActif[px] vaut 1
obsPos[px] vaut 700
fin si
ecartRestant vaut 17 * vitesse + hasard(220)
fin si
// ---------- 4. Collisions ----------
pour i de 0 à 5
si obsActif[i] = 1 alors
demi vaut largObstacle(obsGenre[i]) / 2
haut vaut sialors(accroupi > 0 et non enLair, 28, 52)
si obsPos[i] + demi > dinoX - 17 et obsPos[i] - demi < dinoX + 17 alors
si dinoY < basObstacle(obsGenre[i]) + hautObstacle(obsGenre[i]) et dinoY + haut > basObstacle(obsGenre[i]) alors
verdict vaut "GAME OVER"
enJeu vaut faux
fin si
fin si
fin si
fin pour
// ---------- 5. Decor ----------
effacer(ecran)
remplir(ecran, fond)
// Ciel nocturne (etoiles & lune)
si nuit alors
pour k de 0 à 9
cercle(ecran, etoilesX[k], etoilesY[k], 1, trait)
fin pour
cercle(ecran, 550, 48, 14, trait)
cercle(ecran, 555, 42, 12, fond)
fin si
// Nuages arrondis
pour k de 0 à 3
nuagePosX[k] vaut nuagePosX[k] - arrondi(vitesse / 4)
si nuagePosX[k] < -90 alors
nuagePosX[k] vaut 700 + hasard(180)
nuagePosY[k] vaut 35 + hasard(55)
fin si
ox vaut nuagePosX[k]
oy vaut nuagePosY[k]
cercle(ecran, ox, oy, 9, nuageTeinte)
cercle(ecran, ox + 12, oy - 4, 13, nuageTeinte)
cercle(ecran, ox + 26, oy, 9, nuageTeinte)
rectangle(ecran, ox, oy - 2, 26, 11, nuageTeinte)
fin pour
// Sol avec texture et petits reliefs
ligne(ecran, 0, solY, 640, solY, trait, 2)
decal vaut distance mod 100
pour k de 0 à 7
ox vaut k * 100 - decal
cercle(ecran, ox + 15, solY + 6, 2, trait)
cercle(ecran, ox + 18, solY + 7, 1, trait)
ligne(ecran, ox + 42, solY + 5, ox + 58, solY + 5, trait, 1)
cercle(ecran, ox + 82, solY + 10, 2, trait)
fin pour
// ---------- 6. Obstacles ----------
pour i de 0 à 5
si obsActif[i] = 1 et obsPos[i] < 710 et obsPos[i] > -80 alors
ox vaut obsPos[i]
si obsGenre[i] = 1 alors
// --- Petit cactus arrondi ---
rectangle_arrondi(ecran, ox - 5, solY - 38, 10, 38, 3, trait)
rectangle(ecran, ox - 14, solY - 24, 10, 5, trait)
rectangle_arrondi(ecran, ox - 14, solY - 34, 5, 15, 2, trait)
rectangle(ecran, ox + 4, solY - 18, 9, 5, trait)
rectangle_arrondi(ecran, ox + 8, solY - 26, 5, 13, 2, trait)
sinon si obsGenre[i] = 2 alors
// --- Grand cactus arrondi ---
rectangle_arrondi(ecran, ox - 6, solY - 56, 12, 56, 4, trait)
rectangle(ecran, ox - 17, solY - 36, 12, 6, trait)
rectangle_arrondi(ecran, ox - 17, solY - 48, 6, 18, 2, trait)
rectangle(ecran, ox + 5, solY - 28, 12, 6, trait)
rectangle_arrondi(ecran, ox + 11, solY - 40, 6, 18, 2, trait)
sinon si obsGenre[i] = 3 alors
// --- Groupe de trois cactus ---
rectangle_arrondi(ecran, ox - 20, solY - 34, 9, 34, 3, trait)
rectangle_arrondi(ecran, ox - 5, solY - 48, 11, 48, 4, trait)
rectangle_arrondi(ecran, ox + 10, solY - 38, 9, 38, 3, trait)
rectangle(ecran, ox - 13, solY - 26, 9, 4, trait)
rectangle_arrondi(ecran, ox - 13, solY - 34, 4, 12, 2, trait)
sinon
// --- Pteranodon stylise ---
haut vaut hautObstacle(obsGenre[i])
oy vaut solY - basObstacle(obsGenre[i]) - haut
ellipse(ecran, ox, oy + 14, 13, 7, trait)
triangle(ecran, ox - 10, oy + 10, ox - 28, oy + 14, ox - 10, oy + 18, trait)
cercle(ecran, ox - 10, oy + 12, 4, trait)
cercle(ecran, ox - 12, oy + 11, 1, fond)
triangle(ecran, ox - 6, oy + 8, ox + 6, oy + 4, ox - 2, oy + 12, trait)
triangle(ecran, ox + 12, oy + 12, ox + 24, oy + 15, ox + 12, oy + 18, trait)
si arrondi_inferieur(distance / 60) mod 2 = 0 alors
triangle(ecran, ox - 6, oy + 12, ox + 8, oy + 12, ox + 2, oy - 14, trait)
sinon
triangle(ecran, ox - 6, oy + 14, ox + 8, oy + 14, ox + 2, oy + 32, trait)
fin si
fin si
fin si
fin pour
// ---------- 7. Le Dinosaure ----------
py vaut solY - dinoY
si accroupi > 0 et non enLair alors
// Dino accroupi
triangle(ecran, dinoX - 22, py - 20, dinoX - 42, py - 26, dinoX - 22, py - 12, trait)
rectangle_arrondi(ecran, dinoX - 24, py - 24, 48, 16, 3, trait)
rectangle_arrondi(ecran, dinoX + 12, py - 26, 26, 16, 3, trait)
rectangle(ecran, dinoX + 24, py - 16, 14, 2, fond)
cercle(ecran, dinoX + 28, py - 22, 2, fond)
rectangle(ecran, dinoX + 18, py - 12, 6, 3, trait)
si arrondi_inferieur(distance / 40) mod 2 = 0 alors
rectangle(ecran, dinoX - 16, py - 8, 8, 8, trait)
rectangle(ecran, dinoX - 4, py - 8, 8, 5, trait)
sinon
rectangle(ecran, dinoX - 16, py - 8, 8, 5, trait)
rectangle(ecran, dinoX - 4, py - 8, 8, 8, trait)
fin si
sinon
// Dino debout / saut
rectangle_arrondi(ecran, dinoX + 4, py - 52, 28, 22, 3, trait)
rectangle(ecran, dinoX + 16, py - 38, 16, 3, fond)
si enJeu alors
cercle(ecran, dinoX + 22, py - 46, 2, fond)
sinon
ligne(ecran, dinoX + 20, py - 48, dinoX + 24, py - 44, fond, 2)
ligne(ecran, dinoX + 20, py - 44, dinoX + 24, py - 48, fond, 2)
fin si
rectangle(ecran, dinoX + 2, py - 40, 16, 16, trait)
rectangle_arrondi(ecran, dinoX - 22, py - 34, 32, 24, 4, trait)
rectangle(ecran, dinoX + 6, py - 26, 8, 4, trait)
rectangle(ecran, dinoX + 12, py - 24, 3, 5, trait)
triangle(ecran, dinoX - 22, py - 30, dinoX - 40, py - 42, dinoX - 22, py - 18, trait)
// Animation des jambes
si enLair alors
rectangle(ecran, dinoX - 16, py - 10, 8, 8, trait)
rectangle(ecran, dinoX - 4, py - 10, 8, 8, trait)
sinon si arrondi_inferieur(distance / 40) mod 2 = 0 alors
rectangle(ecran, dinoX - 18, py - 10, 8, 10, trait)
rectangle(ecran, dinoX - 18, py, 12, 3, trait)
rectangle(ecran, dinoX - 4, py - 10, 8, 5, trait)
sinon
rectangle(ecran, dinoX - 18, py - 10, 8, 5, trait)
rectangle(ecran, dinoX - 4, py - 10, 8, 10, trait)
rectangle(ecran, dinoX - 4, py, 12, 3, trait)
fin si
fin si
// ---------- 8. UI & Score ----------
label(ecran, 440, 32, "HI " + convertir_texte(meilleur), trait, 16)
label(ecran, 570, 32, convertir_texte(score), trait, 18)
// Fenetre Game Over stylisee
si non enJeu alors
contour(ecran, trait, 2)
rectangle_arrondi(ecran, 170, 90, 300, 110, 8, fond)
contour(ecran, #0)
label(ecran, 320 - label_largeur(verdict, 26) / 2, 125, verdict, trait, 26)
label(ecran, 320 - label_largeur("Score : " + convertir_texte(score), 16) / 2, 160, "Score : " + convertir_texte(score), trait, 16)
fin si
affiche ecran
pause 60
fin tant que
fin processus
@ Programme principal : titre, lancement, commandes
remplir(ecran, #F7F7F7)
ligne(ecran, 0, 270, 640, 270, #535353, 2)
// Dinosaure ecran d'accueil
rectangle_arrondi(ecran, 94, 218, 28, 22, 3, #535353)
rectangle(ecran, 106, 232, 16, 3, #F7F7F7)
cercle(ecran, 112, 224, 2, #F7F7F7)
rectangle(ecran, 92, 230, 16, 16, #535353)
rectangle_arrondi(ecran, 68, 236, 32, 24, 4, #535353)
rectangle(ecran, 96, 244, 8, 4, #535353)
triangle(ecran, 68, 240, 50, 228, 68, 252, #535353)
rectangle(ecran, 72, 260, 8, 10, #535353)
rectangle(ecran, 72, 270, 12, 3, #535353)
rectangle(ecran, 86, 260, 8, 5, #535353)
label(ecran, 320 - label_largeur("T-REX RUNNER", 40) / 2, 108, "T-REX RUNNER", #535353,40)
label(ecran, 320 - label_largeur("z = sauter s = s'accroupir p = quitter", 15) / 2, 146, "z = sauter s = s'accroupir p = quitter", #535353,17)
label(ecran, 320 - label_largeur("Les pteranodons hauts ne se sautent pas : accroupissez-vous", 14) / 2, 174, "Les pteranodons hauts ne se sautent pas : accroupissez-vous", #828282,14)
affiche ecran
pause 2500
MoteurJeu()
tant que enJeu
interagir ecran, ['z', 's', 'p'] dans action, ptX, ptY
si non enJeu alors
arrête
fin si
si action = 0 alors
si ptY < 200 alors
action vaut 1
sinon
action vaut 2
fin si
fin si
si action = 1 alors
si non enLair alors
enLair vaut vrai
vy vaut 28
accroupi vaut 0
fin si
sinon si action = 2 alors
si enLair alors
vy vaut - 32
sinon
accroupi vaut 10
fin si
sinon
verdict vaut "ABANDON"
enJeu vaut faux
arrête
fin si
fin tant que
si score > meilleur alors
meilleur vaut score
parametre('trexrunner', 'record', meilleur)
affiche "Nouveau record : " + convertir_texte(meilleur) + " !"
fin si
affiche "Course terminee - score " + convertir_texte(score)