Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ CONFIGURATION
ecran est une toile
dimension(ecran, 640, 520)
DUREE est un nombre
// 60 secondes de jeu (une image toutes les 60 ms)
DUREE vaut 1000
HERBE est un texte
HERBE vaut #7CC576
trouX est un tableau
trouY est un tableau
kt est un nombre
pour kt de 0 à 8
trouX ajoute 140 + (kt mod 3) * 180
trouY ajoute 210 + arrondi_inferieur(kt / 3) * 105
fin pour
@ CE QUI SORT DES TROUS
// sorte : 1 taupe, 2 taupe casquee, 3 taupe en or, 4 bombe, 5 horloge, 6 etoile
// phase : 0 vide, 1 monte, 2 dehors, 3 descend, 4 assommee, 5 explose
sorteT est un tableau
phase est un tableau
hauteur est un tableau
chron est un tableau
casque est un tableau
pour kt de 0 à 8
sorteT ajoute 0
phase ajoute 0
hauteur ajoute 0
chron ajoute 0
casque ajoute faux
fin pour
pointsSorte est un tableau
pointsSorte vaut [0, 10, 25, 50, 0, 0, 0]
@ EFFETS
popTxt, popX, popY, popT, popC est un tableau
paX, paY, paVX, paVY, paT, paC est un tableau
@ ETAT DU JEU
// etat : 0 titre, 1 jeu, 2 fin
etat est un nombre
etat vaut 0
appActif est un booléen
appActif vaut vrai
score, record, tempsRestant, niveau, combo, meilleurCombo, tapees, ratees est un nombre
attente, doubleT, secousse, flashRouge, marteauX, marteauY, marteauT, tic, banniereT est un nombre
banniere est un texte
action, ptX, ptY est un nombre
nouveauRecord est un booléen
tic vaut 0
essayer
record vaut parametre('tape_taupe', 'record')
attraper
record vaut 0
fin essayer
@ OUTILS
procédure ajouterPop(txt, x, y, coul)
popTxt ajoute txt
popX ajoute x
popY ajoute y
popT ajoute 18
popC ajoute coul
fin procédure
procédure exploser(x, y, coul, nb)
ke est un nombre
pour ke de 1 à nb
si longueur(paT) < 140 alors
paX ajoute x
paY ajoute y
paVX ajoute hasard(-7, 7)
paVY ajoute hasard(-10, -2)
paT ajoute hasard(10, 20)
paC ajoute coul
fin si
fin pour
fin procédure
procédure centrer(txt, cx, ty, coul, taillePolice)
label(ecran, cx - label_largeur(txt, taillePolice) / 2, ty, txt, coul, taillePolice)
fin procédure
fonction multiplicateur()
m est un nombre
m vaut 1 + arrondi_inferieur(combo / 5) * 0.5
retourne minimum(m, 3)
fin fonction
@ UNE PARTIE
procédure nouvellePartie()
kz est un nombre
pour kz de 0 à 8
sorteT[kz] vaut 0
phase[kz] vaut 0
hauteur[kz] vaut 0
chron[kz] vaut 0
casque[kz] vaut faux
fin pour
vide popTxt
vide popX
vide popY
vide popT
vide popC
vide paX
vide paY
vide paVX
vide paVY
vide paT
vide paC
score vaut 0
tempsRestant vaut DUREE
niveau vaut 1
combo vaut 0
meilleurCombo vaut 0
tapees vaut 0
ratees vaut 0
attente vaut 15
doubleT vaut 0
secousse vaut 0
flashRouge vaut 0
marteauT vaut 0
banniere vaut "C'EST PARTI !"
banniereT vaut 25
nouveauRecord vaut faux
fin procédure
// quelque chose sort d'un trou libre
procédure fairesortir()
libres est un tableau
kz est un nombre
pour kz de 0 à 8
si phase[kz] = 0 alors
libres ajoute kz
fin si
fin pour
si longueur(libres) > 0 alors
kt est un nombre
kt vaut libres[hasard(0, longueur(libres) - 1)]
r est un nombre
r vaut hasard(0, 99)
sorte est un nombre
// plus le niveau monte, plus il y a de bombes
si r < 10 + niveau * 3 alors
sorte vaut 4
sinon si r < 26 + niveau * 3 alors
sorte vaut 2
sinon si r < 33 + niveau * 3 alors
sorte vaut 3
sinon si r < 37 + niveau * 3 alors
sorte vaut 5
sinon si r < 41 + niveau * 3 alors
sorte vaut 6
sinon
sorte vaut 1
fin si
sorteT[kt] vaut sorte
casque[kt] vaut sorte = 2
phase[kt] vaut 1
hauteur[kt] vaut 0
// le temps passe dehors : de plus en plus court (et l'or est tres rapide !)
chron[kt] vaut maximum(12, 34 - niveau * 5)
si sorte = 3 alors
chron[kt] vaut maximum(8, 18 - niveau * 2)
fin si
fin si
fin procédure
// le joueur tape sur un trou
procédure taper(kt)
marteauX vaut trouX[kt]
marteauY vaut trouY[kt] - 50
marteauT vaut 6
si (phase[kt] = 1 ou phase[kt] = 2) et hauteur[kt] > 0.35 alors
sorte est un nombre
sorte vaut sorteT[kt]
si sorte = 4 alors
// BOUM !
score vaut maximum(0, score - 30)
combo vaut 0
secousse vaut 10
flashRouge vaut 6
phase[kt] vaut 5
chron[kt] vaut 10
appelle exploser(trouX[kt], trouY[kt] - 40, #FF7043, 20)
appelle exploser(trouX[kt], trouY[kt] - 40, #212121, 10)
appelle ajouterPop("BOUM ! -30", trouX[kt] - 45, trouY[kt] - 90, #FF5252)
sinon si casque[kt] alors
// le casque s'envole, il faut retaper
casque[kt] vaut faux
chron[kt] vaut chron[kt] + 6
secousse vaut 3
appelle exploser(trouX[kt], trouY[kt] - 80, #B0BEC5, 8)
appelle ajouterPop("CLANG !", trouX[kt] - 30, trouY[kt] - 100, #ECEFF1)
sinon
combo ajoute 1
meilleurCombo vaut maximum(meilleurCombo, combo)
tapees ajoute 1
gain est un nombre
gain vaut arrondi(pointsSorte[sorte] * multiplicateur())
si doubleT > 0 alors
gain vaut gain * 2
fin si
score vaut score + gain
phase[kt] vaut 4
chron[kt] vaut 9
si sorte = 5 alors
tempsRestant vaut minimum(tempsRestant + 83, DUREE)
appelle ajouterPop("+5 s !", trouX[kt] - 25, trouY[kt] - 100, #80D8FF)
sinon si sorte = 6 alors
doubleT vaut 100
appelle ajouterPop("POINTS x2 !", trouX[kt] - 45, trouY[kt] - 100, #FFD740)
sinon
appelle ajouterPop("+" + convertir_texte(gain), trouX[kt] - 20, trouY[kt] - 100, sialors(sorte = 3, #FFD740, #FFFFFF))
fin si
si sorte = 3 alors
appelle exploser(trouX[kt], trouY[kt] - 50, #FFD740, 16)
sinon
appelle exploser(trouX[kt], trouY[kt] - 50, #FFFFFF, 6)
fin si
si combo > 0 et combo mod 10 = 0 alors
banniere vaut "COMBO x" + convertir_texte(combo) + " !"
banniereT vaut 20
fin si
fin si
sinon
// rate !
ratees ajoute 1
si combo >= 5 alors
appelle ajouterPop("Combo perdu...", trouX[kt] - 50, trouY[kt] - 60, #FFAB91)
sinon
appelle ajouterPop("Raté !", trouX[kt] - 25, trouY[kt] - 60, #FFAB91)
fin si
combo vaut 0
fin si
fin procédure
@ UNE IMAGE DE JEU (appelee par le processus)
procédure mettreAJour()
tempsRestant soustrait 1
// le niveau monte toutes les 15 secondes
nouveauNiv est un nombre
nouveauNiv vaut minimum(4, 1 + arrondi_inferieur((DUREE - tempsRestant) / 250))
si nouveauNiv > niveau alors
niveau vaut nouveauNiv
banniere vaut "NIVEAU " + convertir_texte(niveau) + " : ÇA ACCÉLÈRE !"
banniereT vaut 25
fin si
// de nouvelles choses sortent des trous
attente soustrait 1
si attente <= 0 alors
appelle fairesortir()
si niveau >= 3 et hasard(0, 2) = 0 alors
appelle fairesortir()
fin si
attente vaut maximum(6, 20 - niveau * 3) + hasard(0, 6)
fin si
// chaque trou vit sa vie
kz est un nombre
pour kz de 0 à 8
si phase[kz] = 1 alors
hauteur[kz] vaut minimum(1, hauteur[kz] + 0.25)
si hauteur[kz] >= 1 alors
phase[kz] vaut 2
fin si
sinon si phase[kz] = 2 alors
chron[kz] vaut chron[kz] - 1
si chron[kz] <= 0 alors
phase[kz] vaut 3
// une taupe qui s'echappe casse le combo
si sorteT[kz] <= 3 et combo > 0 alors
appelle ajouterPop("Trop lent !", trouX[kz] - 40, trouY[kz] - 60, #FFCC80)
combo vaut 0
fin si
fin si
sinon si phase[kz] = 3 alors
hauteur[kz] vaut maximum(0, hauteur[kz] - 0.2)
si hauteur[kz] <= 0 alors
phase[kz] vaut 0
fin si
sinon si phase[kz] = 4 ou phase[kz] = 5 alors
chron[kz] vaut chron[kz] - 1
si chron[kz] <= 0 alors
phase[kz] vaut 3
si phase[kz] = 5 alors
hauteur[kz] vaut 0
fin si
fin si
fin si
fin pour
// les minuteries et les effets
si doubleT > 0 alors
doubleT soustrait 1
fin si
si secousse > 0 alors
secousse soustrait 1
fin si
si flashRouge > 0 alors
flashRouge soustrait 1
fin si
si marteauT > 0 alors
marteauT soustrait 1
fin si
si banniereT > 0 alors
banniereT soustrait 1
fin si
nbE est un nombre
nbE vaut longueur(popT)
si nbE > 0 alors
pour kz de nbE - 1 à 0 pas -1
popT[kz] vaut popT[kz] - 1
popY[kz] vaut popY[kz] - 2
si popT[kz] <= 0 alors
popTxt supprime kz
popX supprime kz
popY supprime kz
popT supprime kz
popC supprime kz
fin si
fin pour
fin si
nbE vaut longueur(paT)
si nbE > 0 alors
pour kz de nbE - 1 à 0 pas -1
paX[kz] vaut paX[kz] + paVX[kz]
paY[kz] vaut paY[kz] + paVY[kz]
paVY[kz] vaut paVY[kz] + 1
paT[kz] vaut paT[kz] - 1
si paT[kz] <= 0 alors
paX supprime kz
paY supprime kz
paVX supprime kz
paVY supprime kz
paT supprime kz
paC supprime kz
fin si
fin pour
fin si
// fin de la partie
si tempsRestant <= 0 alors
tempsRestant vaut 0
si score > record alors
record vaut score
nouveauRecord vaut vrai
parametre('tape_taupe', 'record', record)
fin si
etat vaut 2
fin si
fin procédure
@ DESSIN
// une taupe (ou un objet) qui depasse du trou de "h" (0 a 1)
procédure dessinerOccupant(x, y, kz)
sorte est un nombre
sorte vaut sorteT[kz]
h est un nombre
h vaut hauteur[kz]
base est un nombre
base vaut y - h * 70
si sorte = 4 alors
// BOMBE
cercle(ecran, x, base + 10, 26, #263238)
cercle(ecran, x - 9, base + 1, 7, rgba(255, 255, 255, 0.25))
rectangle(ecran, x - 6, base - 20, 12, 8, #546E7A)
ligne(ecran, x, base - 20, x + 10, base - 32, #A1887F, 3)
si tic mod 4 < 2 alors
cercle(ecran, x + 11, base - 34, 6, #FF9100)
sinon
cercle(ecran, x + 11, base - 34, 4, #FFEA00)
fin si
label(ecran, x - 9, base + 18, "☠", #FFFFFF, 18)
sinon si sorte = 5 alors
// HORLOGE
cercle(ecran, x - 18, base - 14, 8, #E53935)
cercle(ecran, x + 18, base - 14, 8, #E53935)
cercle(ecran, x, base + 8, 26, #E53935)
cercle(ecran, x, base + 8, 20, #FFFFFF)
ligne(ecran, x, base + 8, x, base - 6, #212121, 3)
ligne(ecran, x, base + 8, x + 10, base + 12, #212121, 3)
label(ecran, x - 10, base - 22, "+5", #E53935, 12)
sinon si sorte = 6 alors
// ETOILE qui tourne
ang est un nombre
ang vaut tic * 8
pts est un tableau
ke est un nombre
pour ke de 0 à 9
rayonE est un nombre
rayonE vaut sialors(ke mod 2 = 0, 30, 13)
pts ajoute x + cosinus(radians(ang + ke * 36 - 90)) * rayonE
pts ajoute base + 8 + sinus(radians(ang + ke * 36 - 90)) * rayonE
fin pour
polygone(ecran, pts, #FFD740)
label(ecran, x - 10, base + 14, "x2", #E65100, 13)
sinon
// UNE TAUPE (normale, casquee ou en or)
corps est un texte
visage est un texte
si sorte = 3 alors
corps vaut #FFC107
visage vaut #FFE082
sinon
corps vaut #795548
visage vaut #BCAAA4
fin si
rectangle_arrondi(ecran, x - 32, base - 26, 64, 90, 30, corps)
ellipse(ecran, x, base + 6, 22, 24, visage)
// les yeux : normaux, ou en spirale quand elle est assommee
si phase[kz] = 4 alors
ligne(ecran, x - 15, base - 12, x - 5, base - 2, #3E2723, 3)
ligne(ecran, x - 5, base - 12, x - 15, base - 2, #3E2723, 3)
ligne(ecran, x + 5, base - 12, x + 15, base - 2, #3E2723, 3)
ligne(ecran, x + 15, base - 12, x + 5, base - 2, #3E2723, 3)
// des etoiles tournent autour de sa tete
kq est un nombre
pour kq de 0 à 2
aq est un nombre
aq vaut radians(tic * 25 + kq * 120)
label(ecran, x + cosinus(aq) * 30 - 6, base - 34 + sinus(aq) * 8, "★", #FFEB3B, 14)
fin pour
sinon
cercle(ecran, x - 10, base - 7, 6, #FFFFFF)
cercle(ecran, x + 10, base - 7, 6, #FFFFFF)
cercle(ecran, x - 9, base - 6, 3, #212121)
cercle(ecran, x + 11, base - 6, 3, #212121)
fin si
ellipse(ecran, x, base + 6, 8, 6, #F06292)
rectangle(ecran, x - 5, base + 13, 4, 7, #FFFFFF)
rectangle(ecran, x + 1, base + 13, 4, 7, #FFFFFF)
ligne(ecran, x - 12, base + 6, x - 30, base + 2, #4E342E, 1)
ligne(ecran, x - 12, base + 10, x - 30, base + 12, #4E342E, 1)
ligne(ecran, x + 12, base + 6, x + 30, base + 2, #4E342E, 1)
ligne(ecran, x + 12, base + 10, x + 30, base + 12, #4E342E, 1)
// les pattes posees au bord du trou
ellipse(ecran, x - 24, base + 40, 10, 7, visage)
ellipse(ecran, x + 24, base + 40, 10, 7, visage)
si casque[kz] alors
ellipse(ecran, x, base - 22, 34, 18, #90A4AE)
rectangle(ecran, x - 36, base - 22, 72, 6, #78909C)
ellipse(ecran, x - 10, base - 30, 10, 4, rgba(255, 255, 255, 0.5))
fin si
si sorte = 3 et tic mod 6 < 3 alors
label(ecran, x + 22, base - 30, "✦", #FFFFFF, 14)
fin si
fin si
fin procédure
procédure dessinerTerrain(sx, sy)
remplir(ecran, HERBE)
// le ciel et les collines au fond
rectangle(ecran, 0, 0, 640, 110, #81D4FA)
ellipse(ecran, 120, 115, 200, 50, #66BB6A)
ellipse(ecran, 500, 120, 230, 55, #5CB860)
cercle(ecran, 580, 45, 26, #FFEE58)
nx est un nombre
nx vaut (tic * 0.6) mod 760 - 60
ellipse(ecran, nx, 40, 40, 12, rgba(255, 255, 255, 0.8))
ellipse(ecran, nx + 26, 32, 26, 10, rgba(255, 255, 255, 0.8))
// des fleurs dans l'herbe
kf est un nombre
pour kf de 0 à 9
fx est un nombre
fx vaut 30 + kf * 64
cercle(ecran, fx + sx, 140 + (kf mod 3) * 4 + sy, 4, sialors(kf mod 2 = 0, #FFF176, #F48FB1))
fin pour
// les neuf trous
kz est un nombre
pour kz de 0 à 8
x est un nombre
x vaut trouX[kz] + sx
y est un nombre
y vaut trouY[kz] + sy
// le fond du trou
ellipse(ecran, x, y, 56, 20, #3E2723)
ellipse(ecran, x, y + 2, 46, 14, #1B0F0A)
// ce qui depasse
si phase[kz] > 0 et phase[kz] <> 5 alors
appelle dessinerOccupant(x, y, kz)
fin si
// on cache le bas de la taupe avec de l'herbe, puis le bord du trou
rectangle(ecran, x - 70, y + 2, 140, 64, HERBE)
ellipse(ecran, x, y + 8, 62, 14, #8D6E63)
ellipse(ecran, x, y + 6, 56, 10, #A1887F)
// le numero du trou (pave numerique)
label(ecran, x + 50, y + 30, sialors(kz < 3, convertir_texte(kz + 7), sialors(kz < 6, convertir_texte(kz + 1), convertir_texte(kz - 5))), rgba(0, 0, 0, 0.25), 12)
fin pour
fin procédure
procédure dessinerMarteau()
si marteauT > 0 alors
// le marteau frappe : manche incline puis droit
angle est un nombre
angle vaut sialors(marteauT > 3, -40, 10)
mx est un nombre
mx vaut marteauX + 40
my est un nombre
my vaut marteauY - 10
tx est un nombre
tx vaut mx + cosinus(radians(angle + 200)) * 60
ty est un nombre
ty vaut my + sinus(radians(angle + 200)) * 60
ligne(ecran, mx, my, tx, ty, #8D6E63, 8)
rectangle_arrondi(ecran, tx - 26, ty - 16, 52, 32, 8, #E53935)
rectangle(ecran, tx - 26, ty - 4, 52, 6, #FFCDD2)
si marteauT <= 3 alors
label(ecran, marteauX - 30, marteauY + 4, "POC !", #FFFFFF, 16)
fin si
fin si
fin procédure
procédure dessinerJeu()
effacer(ecran)
contour(ecran, #0)
sx est un nombre
sx vaut 0
sy est un nombre
sy vaut 0
si secousse > 0 alors
sx vaut hasard(-secousse, secousse)
sy vaut hasard(-secousse, secousse)
fin si
appelle dessinerTerrain(sx, sy)
appelle dessinerMarteau()
// effets
kp est un nombre
si longueur(paT) > 0 alors
pour kp de 0 à longueur(paT) - 1
cercle(ecran, paX[kp], paY[kp], 4, paC[kp])
fin pour
fin si
si longueur(popT) > 0 alors
pour kp de 0 à longueur(popT) - 1
label(ecran, popX[kp] + 2, popY[kp] + 2, popTxt[kp], rgba(0, 0, 0, 0.4), 20)
label(ecran, popX[kp], popY[kp], popTxt[kp], popC[kp], 20)
fin pour
fin si
si flashRouge > 0 alors
rectangle(ecran, 0, 0, 640, 520, rgba(255, 23, 68, 0.05 * flashRouge))
fin si
// la barre du haut
rectangle_arrondi(ecran, 10, 8, 150, 42, 14, rgba(0, 0, 0, 0.35))
label(ecran, 22, 37, "SCORE " + convertir_texte(score), #FFFFFF, 18)
// le temps
rectangle_arrondi(ecran, 180, 16, 280, 26, 13, rgba(0, 0, 0, 0.35))
coulT est un texte
coulT vaut sialors(tempsRestant < 167, #FF5252, #69F0AE)
si tempsRestant > 0 alors
rectangle_arrondi(ecran, 180, 16, 280 * tempsRestant / DUREE, 26, 13, coulT)
fin si
appelle centrer(convertir_texte(arrondi_inferieur(tempsRestant * 0.06) + 1) + " s", 320, 35, #FFFFFF, 15)
rectangle_arrondi(ecran, 480, 8, 150, 42, 14, rgba(0, 0, 0, 0.35))
label(ecran, 492, 26, "Niveau " + convertir_texte(niveau), #FFFFFF, 12)
label(ecran, 492, 43, "Record " + convertir_texte(record), #FFE082, 12)
// le combo
si combo >= 2 alors
rectangle_arrondi(ecran, 10, 56, 150, 30, 12, rgba(255, 145, 0, 0.85))
label(ecran, 20, 77, "Combo " + convertir_texte(combo) + " (x" + convertir_texte(multiplicateur()) + ")", #FFFFFF, 14)
fin si
si doubleT > 0 alors
rectangle_arrondi(ecran, 480, 56, 150, 30, 12, rgba(255, 215, 64, 0.9))
label(ecran, 492, 77, "POINTS x2 : " + convertir_texte(arrondi_inferieur(doubleT * 0.06) + 1) + " s", #5D4037, 13)
fin si
// la banniere
si banniereT > 0 alors
largB est un nombre
largB vaut label_largeur(banniere, 26) + 50
rectangle_arrondi(ecran, 320 - largB / 2, 112, largB, 46, 20, rgba(255, 255, 255, 0.92))
appelle centrer(banniere, 320, 145, #E65100, 26)
fin si
fin procédure
procédure dessinerTitre()
effacer(ecran)
contour(ecran, #0)
// une taupe fait coucou dans le trou du milieu
sorteT[4] vaut 1
phase[4] vaut 2
casque[4] vaut faux
hauteur[4] vaut 0.6 + sinus(radians(tic * 6)) * 0.4
appelle dessinerTerrain(0, 0)
phase[4] vaut 0
rectangle_arrondi(ecran, 120, 20, 400, 150, 20, rgba(255, 255, 255, 0.92))
appelle centrer("TAPE-TAUPE", 320, 76, #6D4C41, 44)
appelle centrer("PARTY !", 320, 116, #E65100, 32)
appelle centrer("Clique ou ESPACE pour jouer - X : quitter", 320, 150, #8D6E63, 13)
rectangle_arrondi(ecran, 60, 440, 520, 70, 14, rgba(255, 255, 255, 0.88))
label(ecran, 76, 462, "Taupe +10 Casquée : 2 coups +25 En or +50 Horloge +5 s Étoile x2", #5D4037, 12)
label(ecran, 76, 482, "Évite les BOMBES ! Enchaîne les coups pour le combo (jusqu'à x3).", #C62828, 12)
label(ecran, 76, 500, "Souris, ou pavé numérique : 7 8 9 / 4 5 6 / 1 2 3", #8D6E63, 11)
si record > 0 alors
rectangle_arrondi(ecran, 250, 176, 140, 26, 13, rgba(0, 0, 0, 0.35))
appelle centrer("Record : " + convertir_texte(record), 320, 194, #FFE082, 14)
fin si
fin procédure
procédure dessinerFin()
appelle dessinerJeu()
rectangle(ecran, 0, 0, 640, 520, rgba(0, 0, 0, 0.45))
rectangle_arrondi(ecran, 130, 110, 380, 300, 20, #FFF8E1)
appelle centrer("TEMPS ÉCOULÉ !", 320, 155, #6D4C41, 30)
appelle centrer(convertir_texte(score) + " points", 320, 205, #E65100, 36)
// les etoiles
etoiles est un nombre
etoiles vaut 0
si score >= 400 alors
etoiles vaut 1
fin si
si score >= 800 alors
etoiles vaut 2
fin si
si score >= 1300 alors
etoiles vaut 3
fin si
ke est un nombre
pour ke de 0 à 2
si ke < etoiles alors
appelle centrer("★", 270 + ke * 50, 258, #FFC107, 40)
sinon
appelle centrer("★", 270 + ke * 50, 258, #E0E0E0, 40)
fin si
fin pour
precision est un nombre
precision vaut 0
si tapees + ratees > 0 alors
precision vaut arrondi(tapees * 100 / (tapees + ratees))
fin si
appelle centrer("Taupes tapées : " + convertir_texte(tapees) + " Précision : " + convertir_texte(precision) + " %", 320, 296, #6D4C41, 14)
appelle centrer("Meilleur combo : " + convertir_texte(meilleurCombo), 320, 320, #6D4C41, 14)
si nouveauRecord alors
appelle centrer("NOUVEAU RECORD !", 320, 352, #43A047, 18)
sinon
appelle centrer("Record : " + convertir_texte(record), 320, 352, #8D6E63, 14)
fin si
appelle centrer("ESPACE : rejouer X : menu", 320, 390, #E65100, 15)
fin procédure
@ LE PROCESSUS : la fete bat son plein
processus Fete()
tant que appActif
tic ajoute 1
si etat = 1 alors
appelle mettreAJour()
si etat = 1 alors
appelle dessinerJeu()
fin si
sinon si etat = 0 alors
appelle dessinerTitre()
sinon si etat = 2 alors
appelle dessinerFin()
fin si
affiche ecran
pause 60
fin tant que
fin processus
@ DEMARRAGE
Fete()
tant que appActif
si etat = 0 alors
interagir ecran, [" ", "x"] dans action, ptX, ptY
si action = 2 alors
appActif vaut faux
sinon
etat vaut 9
appelle nouvellePartie()
etat vaut 1
fin si
sinon si etat = 1 alors
// le pave numerique dans l'ordre des trous : 7 8 9 / 4 5 6 / 1 2 3
interagir ecran, ["7", "8", "9", "4", "5", "6", "1", "2", "3", "x"] dans action, ptX, ptY
si etat = 1 alors
si action >= 1 et action <= 9 alors
appelle taper(action - 1)
sinon si action = 10 alors
etat vaut 0
sinon si action = 0 alors
// un clic : sur quel trou ?
cible est un nombre
cible vaut -1
kz est un nombre
pour kz de 0 à 8
si absolue(ptX - trouX[kz]) < 62 et ptY > trouY[kz] - 100 et ptY < trouY[kz] + 30 alors
cible vaut kz
fin si
fin pour
si cible >= 0 alors
appelle taper(cible)
fin si
fin si
fin si
sinon si etat = 2 alors
interagir ecran, [" ", "x"] dans action, ptX, ptY
si action = 2 alors
etat vaut 0
sinon
etat vaut 9
appelle nouvellePartie()
etat vaut 1
fin si
fin si
fin tant que
effacer(ecran)
remplir(ecran, HERBE)
label(ecran, 320 - label_largeur("À bientôt, champion du marteau !", 26) / 2, 270, "À bientôt, champion du marteau !", #FFFFFF, 26)
affiche ecran