Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
@ MOTS MÊLÉS : LE GÉNÉRATEUR
// Jeu de mots mêlés pour CoddyRun.
// Le GÉNÉRATEUR fabrique une grille différente à chaque partie :
// il choisit des mots au hasard dans le thème, les cache dans la grille
// (à l'horizontale, à la verticale, en diagonale... et même à l'envers !)
// puis remplit les trous avec des lettres au hasard.
// Pour trouver un mot : clique sur sa PREMIÈRE lettre, puis sur sa DERNIÈRE.
@ Configuration
LARG est un nombre
LARG vaut 700
HAUT est un nombre
HAUT vaut 500
X0 est un nombre
X0 vaut 30
Y0 est un nombre
Y0 vaut 66
ecran est une toile
dimension(ecran, LARG, HAUT)
@ Les thèmes (les mots sont séparés par des espaces)
themesNoms est un tableau
themesNoms vaut ["Animaux", "Fruits", "Espace", "Sports", "Océan", "Musique"]
themesMots est un tableau
themesMots ajoute "CHAT CHIEN LAPIN TIGRE ZEBRE GIRAFE LION PANDA RENARD HIBOU CASTOR KOALA DAUPHIN ELEPHANT CHEVAL TORTUE SOURIS LOUP OURS CROCODILE PINGOUIN ECUREUIL GORILLE HERISSON"
themesMots ajoute "POMME POIRE BANANE CERISE FRAISE KIWI MANGUE ORANGE CITRON ANANAS MELON PECHE ABRICOT PRUNE RAISIN MYRTILLE FRAMBOISE NOIX FIGUE DATTE PAPAYE LITCHI"
themesMots ajoute "ETOILE PLANETE LUNE SOLEIL COMETE FUSEE GALAXIE ORBITE MARS VENUS SATURNE JUPITER ASTRONAUTE METEORE NEBULEUSE TELESCOPE ECLIPSE CRATERE NEPTUNE URANUS"
themesMots ajoute "FOOTBALL TENNIS RUGBY JUDO KARATE BOXE NATATION VELO SKI GOLF HANDBALL ESCRIME VOILE SURF BASKET BADMINTON ATHLETISME AVIRON ESCALADE PATINAGE"
themesMots ajoute "VAGUE CORAIL REQUIN BALEINE MEDUSE CRABE POULPE ALGUE SABLE PHARE BATEAU ANCRE ILE MAREE HOMARD CREVETTE PLONGEE COQUILLAGE ORQUE RECIF"
themesMots ajoute "PIANO GUITARE VIOLON FLUTE TAMBOUR TROMPETTE HARPE BATTERIE CHANT NOTE RYTHME MELODIE ACCORD ORCHESTRE CONCERT SAXOPHONE CLARINETTE TRIANGLE MICRO SOLFEGE"
@ Les niveaux : taille de la grille, nombre de mots, nombre de sens possibles
nivNom est un tableau
nivNom vaut ["Facile", "Moyen", "Difficile"]
nivTaille est un tableau
nivTaille vaut [10, 12, 14]
nivNb est un tableau
nivNb vaut [8, 10, 12]
nivNbDir est un tableau
nivNbDir vaut [2, 4, 8]
nivDescr est un tableau
nivDescr vaut ["10 x 10 - 2 sens", "12 x 12 - diagonales", "14 x 14 - tous les sens"]
clesRec est un tableau
clesRec vaut ["rec1", "rec2", "rec3"]
// les 8 sens : droite, bas, diagonale descendante, diagonale montante,
// puis les mêmes à l'envers (seulement en Difficile)
dirX est un tableau
dirX vaut [1, 0, 1, 1, -1, 0, -1, -1]
dirY est un tableau
dirY vaut [0, 1, 1, -1, 0, -1, -1, 1]
// lettres de remplissage : les plus courantes en français reviennent plus souvent
remplissage est un texte
remplissage vaut "EEEEEEAAAAIIIISSSSNNNRRRTTTUUULLLOOODDCCMMPPGBVHFQYXJKZ"
// couleurs des mots trouvés
coulMots est un tableau
coulMots ajoute #ffc9c9
coulMots ajoute #ffd8a8
coulMots ajoute #ffec99
coulMots ajoute #b2f2bb
coulMots ajoute #a5d8ff
coulMots ajoute #d0bfff
coulMots ajoute #fcc2d7
coulMots ajoute #99e9f2
@ La grille en cours
grilleL est un tableau
reserve est un tableau
motsListe est un tableau
motsTrouve est un tableau
motsDebut est un tableau
capX1 est un tableau
capY1 est un tableau
capX2 est un tableau
capY2 est un tableau
capCoul est un tableau
@ État du jeu
choixTheme, choixNiv, themeCourant, nCote, cellM, nbDir, nbMots, dernierDebut est un nombre
selA, debutChrono, penalite, tempsFinal, indiceMot, indiceT, flashT, nbImages est un nombre
actif, enPartie, gagne, nouveauRecord, rejouer est un booléen
msgJeu est un texte
recNiv est un tableau
etapeJeu est un nombre
sx, sy est un nombre
choixTheme vaut 0
choixNiv vaut 0
@ Records (meilleur temps par niveau)
procédure chargerRecords()
vide recNiv
kr est un nombre
pour kr de 0 à 2
valR est un nombre
essayer
valR vaut paramètre('mots_meles', clesRec[kr])
attraper
valR vaut 0
fin essayer
recNiv ajoute valR
fin pour
fin procédure
fonction formatTemps(secondes)
mn est un nombre
mn vaut arrondi_inferieur(secondes / 60)
sc est un nombre
sc vaut secondes mod 60
txt est un texte
txt vaut ""
si mn < 10 alors
txt vaut "0"
fin si
txt vaut txt + convertir_texte(mn) + ":"
si sc < 10 alors
txt vaut txt + "0"
fin si
txt vaut txt + convertir_texte(sc)
retourne txt
fin fonction
fonction tempsEcoule()
si gagne alors
retourne tempsFinal
fin si
retourne arrondi_inferieur((chrono() - debutChrono) / 1000) + penalite
fin fonction
@ LE GÉNÉRATEUR
// une lettre d'un mot (les positions commencent à 1 dans un texte)
fonction lettre(mot, i)
retourne copier(mot, i + 1, 1)
fin fonction
// essaie de cacher un mot dans la grille, en 150 essais au maximum
fonction placerMot(mot)
lg est un nombre
lg vaut longueur(mot)
place est un booléen
place vaut faux
essai est un nombre
essai vaut 0
tant que non place et essai < 150
essai ajoute 1
d est un nombre
d vaut hasard(0, nbDir - 1)
xd est un nombre
xd vaut hasard(0, nCote - 1)
yd est un nombre
yd vaut hasard(0, nCote - 1)
xf est un nombre
xf vaut xd + dirX[d] * (lg - 1)
yf est un nombre
yf vaut yd + dirY[d] * (lg - 1)
si xf >= 0 et xf < nCote et yf >= 0 et yf < nCote alors
// chaque case doit être vide, ou contenir déjà la bonne lettre
ok est un booléen
ok vaut vrai
ki est un nombre
pour ki de 0 à lg - 1
contenu est un texte
contenu vaut grilleL[(yd + dirY[d] * ki) * nCote + xd + dirX[d] * ki]
si contenu <> "" et contenu <> lettre(mot, ki) alors
ok vaut faux
fin si
fin pour
si ok alors
pour ki de 0 à lg - 1
grilleL[(yd + dirY[d] * ki) * nCote + xd + dirX[d] * ki] vaut lettre(mot, ki)
fin pour
dernierDebut vaut yd * nCote + xd
place vaut vrai
fin si
fin si
fin tant que
retourne place
fin fonction
procédure genererGrille()
nCote vaut nivTaille[choixNiv]
nbMots vaut nivNb[choixNiv]
nbDir vaut nivNbDir[choixNiv]
cellM vaut arrondi_inferieur(420 / nCote)
themeCourant vaut choixTheme
si choixTheme = 6 alors
themeCourant vaut hasard(0, 5)
fin si
vide grilleL
kg est un nombre
pour kg de 0 à nCote * nCote - 1
grilleL ajoute ""
fin pour
// on mélange les mots du thème (mélange de Fisher-Yates)
reserve vaut decouper(themesMots[themeCourant], " ")
km est un nombre
tmp est un texte
pour km de longueur(reserve) - 1 à 1 pas -1
autre est un nombre
autre vaut hasard(0, km)
tmp vaut reserve[km]
reserve[km] vaut reserve[autre]
reserve[autre] vaut tmp
fin pour
// les plus longs d'abord, c'est plus facile de les caser
pour km de 0 à longueur(reserve) - 2
kn est un nombre
pour kn de km + 1 à longueur(reserve) - 1
si longueur(reserve[kn]) > longueur(reserve[km]) alors
tmp vaut reserve[km]
reserve[km] vaut reserve[kn]
reserve[kn] vaut tmp
fin si
fin pour
fin pour
vide motsListe
vide motsTrouve
vide motsDebut
pour km de 0 à longueur(reserve) - 1
si longueur(motsListe) < nbMots et longueur(reserve[km]) <= nCote alors
si placerMot(reserve[km]) alors
motsListe ajoute reserve[km]
motsTrouve ajoute faux
motsDebut ajoute dernierDebut
fin si
fin si
fin pour
// on remplit les cases vides avec des lettres au hasard
pour kg de 0 à nCote * nCote - 1
si grilleL[kg] = "" alors
grilleL[kg] vaut copier(remplissage, hasard(1, longueur(remplissage)), 1)
fin si
fin pour
// tout est prêt pour jouer
vide capX1
vide capY1
vide capX2
vide capY2
vide capCoul
selA vaut -1
penalite vaut 0
tempsFinal vaut 0
indiceMot vaut -1
indiceT vaut 0
flashT vaut 0
nbImages vaut 0
gagne vaut faux
nouveauRecord vaut faux
debutChrono vaut chrono()
msgJeu vaut "Clique la première lettre d'un mot, puis la dernière."
fin procédure
@ Le joueur cherche
fonction nbTrouves()
n est un nombre
n vaut 0
kt est un nombre
pour kt de 0 à longueur(motsTrouve) - 1
si motsTrouve[kt] alors
n ajoute 1
fin si
fin pour
retourne n
fin fonction
procédure cliquerCase(k)
si selA < 0 alors
selA vaut k
msgJeu vaut "Et maintenant, la dernière lettre du mot !"
sinon si k = selA alors
selA vaut -1
msgJeu vaut "Sélection annulée."
sinon
x1 est un nombre
x1 vaut selA mod nCote
y1 est un nombre
y1 vaut arrondi_inferieur(selA / nCote)
x2 est un nombre
x2 vaut k mod nCote
y2 est un nombre
y2 vaut arrondi_inferieur(k / nCote)
ecx est un nombre
ecx vaut x2 - x1
ecy est un nombre
ecy vaut y2 - y1
si ecx = 0 ou ecy = 0 ou absolue(ecx) = absolue(ecy) alors
// on lit les lettres entre les deux cases
nbSel est un nombre
nbSel vaut maximum(absolue(ecx), absolue(ecy))
lu est un texte
lu vaut ""
kl est un nombre
pour kl de 0 à nbSel
lu vaut lu + grilleL[(y1 + signe(ecy) * kl) * nCote + x1 + signe(ecx) * kl]
fin pour
// est-ce un mot de la liste ? (lu à l'endroit ou à l'envers)
trouveM est un nombre
trouveM vaut -1
km est un nombre
pour km de 0 à longueur(motsListe) - 1
si non motsTrouve[km] alors
si motsListe[km] = lu ou motsListe[km] = inverser(lu) alors
trouveM vaut km
fin si
fin si
fin pour
si trouveM >= 0 alors
motsTrouve[trouveM] vaut vrai
capX1 ajoute x1
capY1 ajoute y1
capX2 ajoute x2
capY2 ajoute y2
capCoul ajoute trouveM mod 8
flashT vaut 6
si trouveM = indiceMot alors
indiceT vaut 0
fin si
msgJeu vaut "Bravo : " + motsListe[trouveM] + " !"
si nbTrouves() = longueur(motsListe) alors
gagne vaut vrai
tempsFinal vaut arrondi_inferieur((chrono() - debutChrono) / 1000) + penalite
msgJeu vaut "GRILLE TERMINÉE en " + formatTemps(tempsFinal) + " !"
si recNiv[choixNiv] = 0 ou tempsFinal < recNiv[choixNiv] alors
recNiv[choixNiv] vaut tempsFinal
nouveauRecord vaut vrai
paramètre('mots_meles', clesRec[choixNiv], tempsFinal)
fin si
fin si
sinon
msgJeu vaut lu + " : ce n'est pas un mot de la liste."
fin si
selA vaut -1
sinon
// pas aligné : on recommence à partir de cette lettre
selA vaut k
msgJeu vaut "Pas sur la même ligne : nouvelle première lettre."
fin si
fin si
fin procédure
procédure donnerIndice()
restants est un tableau
ki est un nombre
pour ki de 0 à longueur(motsListe) - 1
si non motsTrouve[ki] alors
restants ajoute ki
fin si
fin pour
si longueur(restants) > 0 alors
indiceMot vaut restants[hasard(0, longueur(restants) - 1)]
indiceT vaut 40
penalite ajoute 15
msgJeu vaut "La première lettre de " + motsListe[indiceMot] + " clignote (+15 s)"
fin si
fin procédure
@ Dessin
// Rappel : contour s'applique aux formes dessinées APRÈS lui,
// et contour(ecran, #0) le désactive.
procédure texteCentre(txt, ty, coul, taillePolice)
label(ecran, (LARG - label_largeur(txt, taillePolice)) / 2, ty, txt, coul, taillePolice)
fin procédure
procédure texteDans(txt, bx, largeurZone, ty, coul, taillePolice)
label(ecran, bx + (largeurZone - label_largeur(txt, taillePolice)) / 2, ty, txt, coul, taillePolice)
fin procédure
procédure dessinerGrille()
cote est un nombre
cote vaut nCote * cellM
// feuille de papier
rectangle_arrondi(ecran, X0 - 8, Y0 - 6, cote + 16, cote + 16, 14, rgba(0, 0, 0, 0.35))
rectangle_arrondi(ecran, X0 - 10, Y0 - 10, cote + 20, cote + 20, 14, #fdf6e3)
// les mots trouvés : des "gélules" de couleur sous les lettres
si longueur(capX1) > 0 alors
kc est un nombre
pour kc de 0 à longueur(capX1) - 1
ax est un nombre
ax vaut X0 + capX1[kc] * cellM + cellM / 2
ay est un nombre
ay vaut Y0 + capY1[kc] * cellM + cellM / 2
bx est un nombre
bx vaut X0 + capX2[kc] * cellM + cellM / 2
by est un nombre
by vaut Y0 + capY2[kc] * cellM + cellM / 2
ligne(ecran, ax, ay, bx, by, coulMots[capCoul[kc]], cellM * 0.78)
cercle(ecran, ax, ay, cellM * 0.39, coulMots[capCoul[kc]])
cercle(ecran, bx, by, cellM * 0.39, coulMots[capCoul[kc]])
fin pour
// le dernier mot trouvé brille un instant
si flashT > 0 et flashT mod 2 = 0 alors
kd est un nombre
kd vaut longueur(capX1) - 1
ligne(ecran, X0 + capX1[kd] * cellM + cellM / 2, Y0 + capY1[kd] * cellM + cellM / 2, X0 + capX2[kd] * cellM + cellM / 2, Y0 + capY2[kd] * cellM + cellM / 2, rgba(255, 255, 255, 0.6), cellM * 0.78)
fin si
fin si
// l'indice : la première lettre du mot clignote
si indiceT > 0 et indiceMot >= 0 alors
si nbImages mod 4 < 2 alors
ki est un nombre
ki vaut motsDebut[indiceMot]
cercle(ecran, X0 + (ki mod nCote) * cellM + cellM / 2, Y0 + arrondi_inferieur(ki / nCote) * cellM + cellM / 2, cellM * 0.45, #ffd43b)
fin si
fin si
// la première lettre choisie
si selA >= 0 alors
si nbImages mod 4 < 2 alors
contour(ecran, #f76707, 3)
sinon
contour(ecran, #fd7e14, 2)
fin si
cercle(ecran, X0 + (selA mod nCote) * cellM + cellM / 2, Y0 + arrondi_inferieur(selA / nCote) * cellM + cellM / 2, cellM * 0.42, rgba(247, 103, 7, 0.18))
contour(ecran, #0)
fin si
// les lettres
taillePol est un nombre
taillePol vaut arrondi(cellM * 0.52)
kl est un nombre
pour kl de 0 à nCote * nCote - 1
lx est un nombre
lx vaut X0 + (kl mod nCote) * cellM + cellM / 2 - label_largeur(grilleL[kl], taillePol) / 2
ly est un nombre
ly vaut Y0 + arrondi_inferieur(kl / nCote) * cellM + cellM / 2 + taillePol * 0.36
label(ecran, lx, ly, grilleL[kl], #343a40, taillePol)
fin pour
fin procédure
procédure dessinerPanneau()
// thème et niveau
rectangle_arrondi(ecran, 478, 60, 212, 50, 12, rgba(255, 255, 255, 0.07))
appelle texteDans(themesNoms[themeCourant], 478, 212, 84, #ffd43b, 18)
appelle texteDans(nivNom[choixNiv] + " - " + convertir_texte(nCote) + " x " + convertir_texte(nCote), 478, 212, 102, #a5b4fc, 11)
// temps et compteur
rectangle_arrondi(ecran, 478, 118, 102, 60, 12, rgba(255, 255, 255, 0.07))
rectangle_arrondi(ecran, 588, 118, 102, 60, 12, rgba(255, 255, 255, 0.07))
appelle texteDans("Temps", 478, 102, 136, #8b93b0, 11)
appelle texteDans(formatTemps(tempsEcoule()), 478, 102, 166, #ffffff, 20)
appelle texteDans("Trouvés", 588, 102, 136, #8b93b0, 11)
appelle texteDans(convertir_texte(nbTrouves()) + " / " + convertir_texte(longueur(motsListe)), 588, 102, 166, #69db7c, 20)
rectangle_arrondi(ecran, 478, 186, 212, 196, 12, rgba(255, 255, 255, 0.07))
si gagne alors
// la victoire
appelle texteDans("BRAVO !", 478, 212, 232, #ffd43b, 28)
appelle texteDans("Tous les mots sont trouvés", 478, 212, 258, #ffffff, 12)
appelle texteDans("Temps : " + formatTemps(tempsFinal), 478, 212, 292, #ffffff, 16)
si nouveauRecord alors
appelle texteDans("NOUVEAU RECORD !", 478, 212, 322, #69db7c, 15)
sinon
appelle texteDans("Record : " + formatTemps(recNiv[choixNiv]), 478, 212, 322, #a5b4fc, 13)
fin si
si penalite > 0 alors
appelle texteDans("(dont " + convertir_texte(penalite) + " s d'indices)", 478, 212, 346, #8b93b0, 11)
fin si
sinon
// la liste des mots, sur deux colonnes
label(ecran, 492, 208, "Mots à trouver", #8b93b0, 11)
kw est un nombre
pour kw de 0 à longueur(motsListe) - 1
wx est un nombre
wx vaut 492 + arrondi_inferieur(kw / 6) * 100
wy est un nombre
wy vaut 234 + (kw mod 6) * 25
si motsTrouve[kw] alors
cercle(ecran, wx + 4, wy - 5, 4, coulMots[kw mod 8])
label(ecran, wx + 13, wy, motsListe[kw], #6c7488, 12)
ligne(ecran, wx + 11, wy - 5, wx + 15 + label_largeur(motsListe[kw], 12), wy - 5, #adb5bd, 2)
sinon
cercle(ecran, wx + 4, wy - 5, 3, rgba(255, 255, 255, 0.25))
label(ecran, wx + 13, wy, motsListe[kw], #ffffff, 12)
fin si
fin pour
fin si
// boutons
si gagne alors
contour(ecran, #8ce99a, 2)
rectangle_arrondi(ecran, 478, 390, 212, 30, 14, #2b8a3e)
contour(ecran, #0)
appelle texteDans("Nouvelle grille", 478, 212, 410, #ffffff, 13)
sinon
contour(ecran, #ffd43b, 1)
rectangle_arrondi(ecran, 478, 390, 212, 30, 14, rgba(255, 212, 59, 0.14))
contour(ecran, #0)
appelle texteDans("Indice (+15 s)", 478, 212, 410, #ffd43b, 13)
fin si
contour(ecran, #74c0fc, 1)
rectangle_arrondi(ecran, 478, 428, 102, 30, 14, rgba(116, 192, 252, 0.14))
contour(ecran, #e03131, 1)
rectangle_arrondi(ecran, 588, 428, 102, 30, 14, rgba(224, 49, 49, 0.18))
contour(ecran, #0)
appelle texteDans("Nouvelle", 478, 102, 448, #74c0fc, 12)
appelle texteDans("Menu", 588, 102, 448, #ff8fa3, 12)
fin procédure
procédure dessinerJeu()
effacer(ecran)
contour(ecran, #0)
dégradé(ecran, [#1d2233, #24304f, #1d2233])
rectangle(ecran, 0, 0, LARG, 46, rgba(0, 0, 0, 0.35))
// petit logo : une loupe
cercle(ecran, 24, 21, 10, #ffd43b)
cercle(ecran, 24, 21, 6, #1d2233)
ligne(ecran, 31, 28, 38, 36, #ffd43b, 4)
label(ecran, 48, 30, "MOTS MÊLÉS", #ffffff, 17)
label(ecran, 180, 29, msgJeu, #cbd5e1, 12)
appelle dessinerGrille()
appelle dessinerPanneau()
fin procédure
procédure dessinerMenu()
effacer(ecran)
contour(ecran, #0)
dégradé(ecran, [#1d2233, #24304f, #1d2233])
appelle texteCentre("MOTS MÊLÉS", 62, #ffd43b, 36)
appelle texteCentre("Le générateur crée une grille différente à chaque partie !", 88, #d0bfff, 13)
// thèmes
label(ecran, 54, 118, "Choisis un thème :", #ffffff, 13)
kt est un nombre
pour kt de 0 à 6
tx est un nombre
ty est un nombre
si kt < 4 alors
tx vaut 54 + kt * 152
ty vaut 128
sinon
tx vaut 54 + (kt - 4) * 152
ty vaut 180
fin si
si kt = choixTheme alors
contour(ecran, #ffd43b, 3)
rectangle_arrondi(ecran, tx, ty, 140, 42, 12, rgba(255, 212, 59, 0.2))
sinon
contour(ecran, rgba(255, 255, 255, 0.18), 1)
rectangle_arrondi(ecran, tx, ty, 140, 42, 12, rgba(255, 255, 255, 0.06))
fin si
contour(ecran, #0)
si kt < 6 alors
appelle texteDans(themesNoms[kt], tx, 140, ty + 27, #ffffff, 15)
sinon
appelle texteDans("Surprise ?", tx, 140, ty + 27, #ffc078, 15)
fin si
fin pour
// difficulté
label(ecran, 54, 252, "Difficulté :", #ffffff, 13)
kn est un nombre
pour kn de 0 à 2
nx est un nombre
nx vaut 54 + kn * 200
si kn = choixNiv alors
contour(ecran, #69db7c, 3)
rectangle_arrondi(ecran, nx, 262, 188, 70, 12, rgba(105, 219, 124, 0.18))
sinon
contour(ecran, rgba(255, 255, 255, 0.18), 1)
rectangle_arrondi(ecran, nx, 262, 188, 70, 12, rgba(255, 255, 255, 0.06))
fin si
contour(ecran, #0)
appelle texteDans(nivNom[kn], nx, 188, 286, #ffffff, 16)
appelle texteDans(nivDescr[kn], nx, 188, 305, #a5b4fc, 11)
si recNiv[kn] > 0 alors
appelle texteDans("Record : " + formatTemps(recNiv[kn]), nx, 188, 323, #69db7c, 11)
sinon
appelle texteDans("Pas encore de record", nx, 188, 323, #6c7488, 11)
fin si
fin pour
contour(ecran, #8ce99a, 2)
rectangle_arrondi(ecran, 190, 354, 320, 52, 26, #2b8a3e)
contour(ecran, #e03131, 1)
rectangle_arrondi(ecran, 290, 422, 120, 32, 16, rgba(224, 49, 49, 0.2))
contour(ecran, #0)
appelle texteCentre("GÉNÉRER UNE GRILLE", 387, #ffffff, 20)
appelle texteCentre("Quitter", 443, #ff8fa3, 13)
fin procédure
@ LE PROCESSUS : il fait vivre l'écran pendant la partie
// Chrono qui tourne, première lettre qui clignote, indice, mot qui brille.
processus Rendu()
tant que actif
nbImages ajoute 1
si indiceT > 0 alors
indiceT soustrait 1
fin si
si flashT > 0 alors
flashT soustrait 1
fin si
appelle dessinerJeu()
affiche ecran
pause 120
fin tant que
fin processus
@ Une partie
// à la fin, "rejouer" dit s'il faut générer une nouvelle grille
procédure jouerGrille()
appelle genererGrille()
actif vaut vrai
enPartie vaut vrai
rejouer vaut faux
Rendu()
tant que enPartie
cliquer ecran dans sx, sy
si clique(sx, sy, 588, 428, 102, 30) alors
enPartie vaut faux
sinon si clique(sx, sy, 478, 428, 102, 30) alors
rejouer vaut vrai
enPartie vaut faux
sinon si clique(sx, sy, 478, 390, 212, 30) alors
si gagne alors
rejouer vaut vrai
enPartie vaut faux
sinon
appelle donnerIndice()
fin si
sinon si non gagne et clique(sx, sy, X0, Y0, nCote * cellM - 1, nCote * cellM - 1) alors
appelle cliquerCase(arrondi_inferieur((sy - Y0) / cellM) * nCote + arrondi_inferieur((sx - X0) / cellM))
fin si
fin tant que
// on arrête le processus avant de fabriquer une autre grille
actif vaut faux
pause 250
fin procédure
@ Programme principal : menu -> grilles
appelle chargerRecords()
etapeJeu vaut 1
tant que etapeJeu > 0
si etapeJeu = 1 alors
appelle dessinerMenu()
affiche ecran
cliquer ecran dans sx, sy
kc est un nombre
pour kc de 0 à 6
cxT est un nombre
cyT est un nombre
si kc < 4 alors
cxT vaut 54 + kc * 152
cyT vaut 128
sinon
cxT vaut 54 + (kc - 4) * 152
cyT vaut 180
fin si
si clique(sx, sy, cxT, cyT, 140, 42) alors
choixTheme vaut kc
fin si
fin pour
pour kc de 0 à 2
si clique(sx, sy, 54 + kc * 200, 262, 188, 70) alors
choixNiv vaut kc
fin si
fin pour
si clique(sx, sy, 190, 354, 320, 52) alors
etapeJeu vaut 2
sinon si clique(sx, sy, 290, 422, 120, 32) alors
etapeJeu vaut 0
fin si
sinon
appelle jouerGrille()
tant que rejouer
appelle jouerGrille()
fin tant que
etapeJeu vaut 1
fin si
fin tant que
@ Au revoir
effacer(ecran)
contour(ecran, #0)
dégradé(ecran, [#1d2233, #24304f, #1d2233])
appelle texteCentre("À bientôt !", 240, #ffd43b, 34)
affiche ecran