Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ CONFIGURATION
ecran est une toile
dimension(ecran, 640, 420)
SOL est un nombre
SOL vaut 300
CHATEAU_J est un nombre
CHATEAU_J vaut 70
CHATEAU_E est un nombre
CHATEAU_E vaut 570
MAX_U est un nombre
MAX_U vaut 40
MAX_P est un nombre
MAX_P vaut 14
MAX_E est un nombre
MAX_E vaut 30
NIVEAU_MAX est un nombre
NIVEAU_MAX vaut 5
@ LES TROUPES (index 1 a 4)
tNom est un tableau
tNom vaut ["", "Épéiste", "Archer", "Chevalier", "Catapulte"]
tEmo est un tableau
tEmo vaut ["", "⚔️", "🏹", "🐎", "💣"]
tCout est un tableau
tCout vaut [0, 15, 25, 50, 80]
tPV est un tableau
tPV vaut [0, 40, 25, 110, 60]
tDegats est un tableau
tDegats vaut [0, 6, 5, 12, 26]
tPortee est un tableau
tPortee vaut [0, 18, 120, 22, 190]
tCadence est un tableau
tCadence vaut [0, 10, 14, 12, 40]
tVitesse est un tableau
tVitesse vaut [0, 1.6, 1.4, 2.4, 0.8]
@ LE CHAMP DE BATAILLE (tableaux de taille fixe : une case = un soldat)
// camp : 1 toi (bleu), 2 l'ennemi (rouge)
uActif est un tableau
uCamp, uType, uX, uPV, uRecharge est un tableau
pour i de 0 à MAX_U - 1
uActif ajoute faux
uCamp ajoute 0
uType ajoute 0
uX ajoute 0
uPV ajoute 0
uRecharge ajoute 0
fin pour
// les projectiles : fleches et boulets
pActif est un tableau
pX, pY, pVX, pVY, pSorte est un tableau
pour i de 0 à MAX_P - 1
pActif ajoute faux
pX ajoute 0
pY ajoute 0
pVX ajoute 0
pVY ajoute 0
pSorte ajoute 0
fin pour
// les eclats
eTT est un tableau
eX, eY, eVX, eVY, eC est un tableau
pour i de 0 à MAX_E - 1
eTT ajoute 0
eX ajoute 0
eY ajoute 0
eVX ajoute 0
eVY ajoute 0
eC ajoute #FFFFFF
fin pour
@ ETAT DU JEU
// etat : 0 menu, 1 bataille, 2 victoire, 3 defaite, 4 pause, 9 preparation
etat est un nombre
etat vaut 0
appActif est un booléen
appActif vaut vrai
niveau, orJ, orE, pvJ, pvE, pvMax, nivMine, nivMineE, tourJ, chronoTour, chronoPluie, tic est un nombre
ordre, flashT, record est un nombre
message est un texte
action, ptX, ptY est un nombre
niveau vaut 1
tic vaut 0
ordre vaut 0
essayer
record vaut parametre('guerre_chateaux', 'record')
attraper
record vaut 0
fin essayer
@ OUTILS
procédure centrer(txt, xMil, ty, coul, taillePolice)
label(ecran, xMil - label_largeur(txt, taillePolice) / 2, ty, txt, coul, taillePolice)
fin procédure
procédure eclats(x, y, coul, nb)
kn est un nombre
ke est un nombre
pour ke de 0 à MAX_E - 1
si nb > 0 et eTT[ke] <= 0 alors
eTT[ke] vaut hasard(8, 16)
eX[ke] vaut x
eY[ke] vaut y
eVX[ke] vaut hasard(-4, 4)
eVY[ke] vaut hasard(-6, -1)
eC[ke] vaut coul
nb soustrait 1
fin si
fin pour
fin procédure
procédure tirer(x, y, vx, vy, sorte)
trouve est un booléen
trouve vaut faux
kp est un nombre
pour kp de 0 à MAX_P - 1
si non trouve et non pActif[kp] alors
pActif[kp] vaut vrai
pX[kp] vaut x
pY[kp] vaut y
pVX[kp] vaut vx
pVY[kp] vaut vy
pSorte[kp] vaut sorte
trouve vaut vrai
fin si
fin pour
fin procédure
// envoie une troupe ; renvoie vrai si c'est possible
procédure envoyer(camp, sorte)
trouve est un booléen
trouve vaut faux
ku est un nombre
pour ku de 0 à MAX_U - 1
si non trouve et non uActif[ku] alors
uActif[ku] vaut vrai
uCamp[ku] vaut camp
uType[ku] vaut sorte
si camp = 1 alors
uX[ku] vaut CHATEAU_J + 30
uPV[ku] vaut tPV[sorte]
sinon
uX[ku] vaut CHATEAU_E - 30
// les troupes ennemies sont un peu plus solides a chaque niveau
uPV[ku] vaut arrondi(tPV[sorte] * (1 + (niveau - 1) * 0.12))
fin si
uRecharge[ku] vaut 0
trouve vaut vrai
fin si
fin pour
fin procédure
fonction nbTroupes(camp)
n est un nombre
n vaut 0
ku est un nombre
pour ku de 0 à MAX_U - 1
si uActif[ku] et uCamp[ku] = camp alors
n ajoute 1
fin si
fin pour
retourne n
fin fonction
@ UNE BATAILLE
procédure nouvelleBataille()
ku est un nombre
pour ku de 0 à MAX_U - 1
uActif[ku] vaut faux
fin pour
pour ku de 0 à MAX_P - 1
pActif[ku] vaut faux
fin pour
pour ku de 0 à MAX_E - 1
eTT[ku] vaut 0
fin pour
orJ vaut 60
orE vaut 40
pvMax vaut 500
pvJ vaut pvMax
pvE vaut pvMax + (niveau - 1) * 100
nivMine vaut 0
nivMineE vaut 0
tourJ vaut 0
chronoTour vaut 0
chronoPluie vaut 0
flashT vaut 0
ordre vaut 0
message vaut "Niveau " + convertir_texte(niveau) + " : envoie tes troupes ! (1 à 4)"
fin procédure
@ LES ORDRES DU JOUEUR (executes par le processus)
procédure executerOrdre(o)
si o >= 1 et o <= 4 alors
si orJ < tCout[o] alors
message vaut "Pas assez d'or pour un " + tNom[o] + " (" + convertir_texte(tCout[o]) + ")."
sinon si nbTroupes(1) >= 20 alors
message vaut "Ton armée est au complet (20 soldats) !"
sinon
orJ vaut orJ - tCout[o]
appelle envoyer(1, o)
message vaut tNom[o] + " en route !"
fin si
sinon si o = 5 alors
// la mine d'or
prix est un nombre
prix vaut 80 + nivMine * 70
si nivMine >= 3 alors
message vaut "La mine d'or est déjà au maximum."
sinon si orJ < prix alors
message vaut "Il faut " + convertir_texte(prix) + " or pour améliorer la mine."
sinon
orJ vaut orJ - prix
nivMine ajoute 1
message vaut "Mine d'or niveau " + convertir_texte(nivMine) + " : plus d'or !"
fin si
sinon si o = 6 alors
// la tour d'archers
si tourJ >= 2 alors
message vaut "La tour est déjà au maximum."
sinon si orJ < 120 + tourJ * 100 alors
message vaut "Il faut " + convertir_texte(120 + tourJ * 100) + " or pour la tour."
sinon
orJ vaut orJ - (120 + tourJ * 100)
tourJ ajoute 1
message vaut "Tour d'archers niveau " + convertir_texte(tourJ) + " !"
fin si
sinon si o = 7 alors
// la pluie de fleches
si chronoPluie > 0 alors
message vaut "La pluie de flèches se recharge..."
sinon
ku est un nombre
pour ku de 0 à MAX_U - 1
si uActif[ku] et uCamp[ku] = 2 alors
uPV[ku] vaut uPV[ku] - 30
appelle eclats(uX[ku], SOL - 20, #FFD54F, 2)
fin si
fin pour
chronoPluie vaut 450
flashT vaut 6
message vaut "PLUIE DE FLÈCHES !"
fin si
fin si
fin procédure
@ L'ENNEMI DECIDE (le processus)
procédure ennemiJoue()
// il recoit de l'or, de plus en plus vite selon le niveau
orE vaut orE + 0.3 + niveau * 0.07 + nivMineE * 0.1
si tic mod 600 = 0 et nivMineE < niveau - 1 alors
nivMineE ajoute 1
fin si
// de temps en temps, il envoie une troupe qu'il peut payer
si tic mod 12 = 0 et nbTroupes(2) < 12 + niveau * 2 alors
r est un nombre
r vaut hasard(0, 99)
voulu est un nombre
voulu vaut 1
si r < 30 alors
voulu vaut 1
sinon si r < 58 alors
voulu vaut 2
sinon si r < 85 alors
voulu vaut 3
sinon
voulu vaut 4
fin si
// les troupes cheres arrivent avec les niveaux
si voulu = 4 et niveau < 2 alors
voulu vaut 2
fin si
si orE >= tCout[voulu] alors
orE vaut orE - tCout[voulu]
appelle envoyer(2, voulu)
fin si
fin si
fin procédure
@ LA BATAILLE (le processus)
procédure combattre()
ku est un nombre
kv est un nombre
pour ku de 0 à MAX_U - 1
si uActif[ku] alors
camp est un nombre
camp vaut uCamp[ku]
sens est un nombre
sens vaut sialors(camp = 1, 1, -1)
t est un nombre
t vaut uType[ku]
// l'ennemi le plus proche DEVANT lui
cible est un nombre
cible vaut -1
meilleure est un nombre
meilleure vaut 9999
pour kv de 0 à MAX_U - 1
si uActif[kv] et uCamp[kv] <> camp alors
d est un nombre
d vaut (uX[kv] - uX[ku]) * sens
si d >= -6 et d < meilleure alors
meilleure vaut d
cible vaut kv
fin si
fin si
fin pour
// la distance jusqu'au chateau ennemi
dChateau est un nombre
dChateau vaut sialors(camp = 1, CHATEAU_E - 24 - uX[ku], uX[ku] - CHATEAU_J - 24)
si uRecharge[ku] > 0 alors
uRecharge[ku] vaut uRecharge[ku] - 1
fin si
si cible >= 0 et meilleure <= tPortee[t] alors
// il attaque un soldat
si uRecharge[ku] = 0 alors
uRecharge[ku] vaut tCadence[t]
si t = 2 alors
appelle tirer(uX[ku], SOL - 22, sens * 9, -2, 1)
sinon si t = 4 alors
appelle tirer(uX[ku], SOL - 30, sens * 7, -6, 2)
fin si
si t = 4 alors
// le boulet touche tout le monde autour de la cible
pour kv de 0 à MAX_U - 1
si uActif[kv] et uCamp[kv] <> camp et absolue(uX[kv] - uX[cible]) < 30 alors
uPV[kv] vaut uPV[kv] - tDegats[t]
fin si
fin pour
appelle eclats(uX[cible], SOL - 10, #8D6E63, 6)
sinon
uPV[cible] vaut uPV[cible] - tDegats[t]
appelle eclats(uX[cible], SOL - 18, #FFFFFF, 1)
fin si
fin si
sinon si dChateau <= tPortee[t] alors
// il attaque le chateau
si uRecharge[ku] = 0 alors
uRecharge[ku] vaut tCadence[t]
si t = 2 alors
appelle tirer(uX[ku], SOL - 22, sens * 9, -3, 1)
sinon si t = 4 alors
appelle tirer(uX[ku], SOL - 30, sens * 7, -7, 2)
fin si
si camp = 1 alors
pvE vaut pvE - tDegats[t]
appelle eclats(CHATEAU_E - 20, SOL - 40, #9E9E9E, 2)
sinon
pvJ vaut pvJ - tDegats[t]
appelle eclats(CHATEAU_J + 20, SOL - 40, #9E9E9E, 2)
fin si
fin si
sinon
// il avance
uX[ku] vaut uX[ku] + tVitesse[t] * sens
fin si
fin si
fin pour
// la tour d'archers protege ton chateau
si tourJ > 0 alors
chronoTour vaut chronoTour + 1
si chronoTour >= 16 - tourJ * 4 alors
chronoTour vaut 0
cibleT est un nombre
cibleT vaut -1
pour kv de 0 à MAX_U - 1
si uActif[kv] et uCamp[kv] = 2 et uX[kv] < CHATEAU_J + 170 alors
cibleT vaut kv
fin si
fin pour
si cibleT >= 0 alors
uPV[cibleT] vaut uPV[cibleT] - 4 - tourJ * 3
appelle tirer(CHATEAU_J, SOL - 110, 10, 2, 1)
fin si
fin si
fin si
// les morts : l'adversaire gagne de l'or
pour ku de 0 à MAX_U - 1
si uActif[ku] et uPV[ku] <= 0 alors
uActif[ku] vaut faux
si uCamp[ku] = 2 alors
orJ vaut orJ + arrondi(tCout[uType[ku]] * 0.6)
appelle eclats(uX[ku], SOL - 15, #E53935, 5)
sinon
orE vaut orE + arrondi(tCout[uType[ku]] * 0.5)
appelle eclats(uX[ku], SOL - 15, #1E88E5, 5)
fin si
fin si
fin pour
fin procédure
procédure animerEffets()
kp est un nombre
pour kp de 0 à MAX_P - 1
si pActif[kp] alors
pX[kp] vaut pX[kp] + pVX[kp]
pY[kp] vaut pY[kp] + pVY[kp]
pVY[kp] vaut pVY[kp] + 0.5
si pY[kp] > SOL ou pX[kp] < 0 ou pX[kp] > 640 alors
pActif[kp] vaut faux
fin si
fin si
fin pour
pour kp de 0 à MAX_E - 1
si eTT[kp] > 0 alors
eTT[kp] vaut eTT[kp] - 1
eX[kp] vaut eX[kp] + eVX[kp]
eY[kp] vaut eY[kp] + eVY[kp]
eVY[kp] vaut eVY[kp] + 0.6
fin si
fin pour
fin procédure
@ DESSIN
procédure dessinerChateau(x, camp, pv, pvM)
coul est un texte
coul vaut sialors(camp = 1, #1E88E5, #E53935)
// le donjon et ses creneaux
rectangle(ecran, x - 26, SOL - 90, 52, 90, #9E9E9E)
rectangle(ecran, x - 26, SOL - 90, 52, 6, #BDBDBD)
kc est un nombre
pour kc de 0 à 3
rectangle(ecran, x - 26 + kc * 15, SOL - 100, 9, 10, #9E9E9E)
fin pour
rectangle_arrondi(ecran, x - 10, SOL - 34, 20, 34, 9, #5D4037)
rectangle(ecran, x - 14, SOL - 70, 8, 12, #37474F)
rectangle(ecran, x + 6, SOL - 70, 8, 12, #37474F)
// le drapeau
ligne(ecran, x, SOL - 100, x, SOL - 130, #5D4037, 2)
polygone(ecran, [x, SOL - 130, x + sialors(camp = 1, 22, -22), SOL - 124 + (tic mod 6) / 3, x, SOL - 118], coul)
// la tour d'archers
si camp = 1 et tourJ > 0 alors
rectangle(ecran, x - 12, SOL - 118, 24, 18, #8D6E63)
cercle(ecran, x, SOL - 122, 5, #FFCC80)
label(ecran, x + 14, SOL - 106, convertir_texte(tourJ), #FFD54F, 10)
fin si
// la barre de vie
rectangle(ecran, x - 40, SOL - 150, 80, 8, rgba(0, 0, 0, 0.5))
si pv > 0 alors
rectangle(ecran, x - 40, SOL - 150, 80 * pv / pvM, 8, coul)
fin si
fin procédure
procédure dessinerSoldat(ku)
x est un nombre
x vaut uX[ku]
y est un nombre
y vaut SOL
camp est un nombre
camp vaut uCamp[ku]
sens est un nombre
sens vaut sialors(camp = 1, 1, -1)
coul est un texte
coul vaut sialors(camp = 1, #1E88E5, #E53935)
t est un nombre
t vaut uType[ku]
pas2 est un nombre
pas2 vaut sialors((tic + ku * 3) mod 6 < 3, 2, -2)
si t = 3 alors
// le chevalier et son cheval
ellipse(ecran, x, y - 12, 14, 7, #6D4C41)
ligne(ecran, x - 8, y - 8, x - 8 + pas2, y, #4E342E, 3)
ligne(ecran, x + 8, y - 8, x + 8 - pas2, y, #4E342E, 3)
cercle(ecran, x + sens * 13, y - 17, 5, #6D4C41)
rectangle(ecran, x - 4, y - 30, 8, 12, coul)
cercle(ecran, x, y - 34, 4, #CFD8DC)
ligne(ecran, x, y - 26, x + sens * 20, y - 34, #ECEFF1, 2)
sinon si t = 4 alors
// la catapulte (son bras se leve quand elle tire)
rectangle(ecran, x - 14, y - 10, 28, 6, #8D6E63)
cercle(ecran, x - 9, y - 4, 4, #5D4037)
cercle(ecran, x + 9, y - 4, 4, #5D4037)
angleB est un nombre
angleB vaut sialors(uRecharge[ku] > tCadence[4] - 6, -70, -20)
ligne(ecran, x, y - 10, x - sens * cosinus(radians(angleB)) * 20, y - 10 + sinus(radians(angleB)) * 20, #6D4C41, 3)
rectangle(ecran, x - 3, y - 14, 6, 4, coul)
sinon
// epeiste ou archer
ligne(ecran, x - 2, y - 8, x - 2 + pas2, y, #37474F, 2)
ligne(ecran, x + 2, y - 8, x + 2 - pas2, y, #37474F, 2)
rectangle(ecran, x - 4, y - 20, 8, 12, coul)
cercle(ecran, x, y - 24, 4, #FFCC80)
si t = 1 alors
ligne(ecran, x + sens * 4, y - 14, x + sens * 14, y - sialors(uRecharge[ku] > 6, 26, 16), #ECEFF1, 2)
sinon
ligne(ecran, x + sens * 6, y - 24, x + sens * 6, y - 8, #8D6E63, 2)
ligne(ecran, x + sens * 6, y - 24, x + sens * 9, y - 16, #8D6E63, 1)
ligne(ecran, x + sens * 9, y - 16, x + sens * 6, y - 8, #8D6E63, 1)
fin si
fin si
// une petite barre de vie s'il est blesse
pvM est un nombre
pvM vaut tPV[t]
si camp = 2 alors
pvM vaut arrondi(tPV[t] * (1 + (niveau - 1) * 0.12))
fin si
si uPV[ku] < pvM alors
rectangle(ecran, x - 8, y - 44, 16, 3, rgba(0, 0, 0, 0.5))
rectangle(ecran, x - 8, y - 44, 16 * maximum(0, uPV[ku]) / pvM, 3, sialors(camp = 1, #64B5F6, #EF9A9A))
fin si
fin procédure
procédure dessinerBataille()
effacer(ecran)
contour(ecran, #0)
dégradé(ecran, [#64B5F6, #E3F2FD])
cercle(ecran, 520, 90, 26, #FFF59D)
polygone(ecran, [0, SOL - 60, 120, SOL - 150, 260, SOL - 70, 400, SOL - 160, 560, SOL - 80, 640, SOL - 120, 640, SOL, 0, SOL], #90A4AE)
rectangle(ecran, 0, SOL - 6, 640, 126, #7CB342)
rectangle(ecran, 0, SOL - 6, 640, 10, #A1887F)
// les chateaux
appelle dessinerChateau(CHATEAU_J, 1, pvJ, pvMax)
appelle dessinerChateau(CHATEAU_E, 2, pvE, pvMax + (niveau - 1) * 100)
// les soldats
ku est un nombre
pour ku de 0 à MAX_U - 1
si uActif[ku] alors
appelle dessinerSoldat(ku)
fin si
fin pour
// les fleches et les boulets
pour ku de 0 à MAX_P - 1
si pActif[ku] alors
si pSorte[ku] = 1 alors
ligne(ecran, pX[ku], pY[ku], pX[ku] - pVX[ku], pY[ku] - pVY[ku], #4E342E, 2)
sinon
cercle(ecran, pX[ku], pY[ku], 5, #424242)
fin si
fin si
fin pour
pour ku de 0 à MAX_E - 1
si eTT[ku] > 0 alors
cercle(ecran, eX[ku], eY[ku], 2.5, eC[ku])
fin si
fin pour
si flashT > 0 alors
rectangle(ecran, 0, 0, 640, 420, rgba(255, 213, 79, 0.05 * flashT))
fin si
// le haut : l'or et le niveau
rectangle(ecran, 0, 0, 640, 40, rgba(38, 50, 56, 0.85))
label(ecran, 12, 27, "💰 " + convertir_texte(arrondi_inferieur(orJ)), #FFD54F, 18)
label(ecran, 130, 26, "Mine niv. " + convertir_texte(nivMine), #CFD8DC, 11)
appelle centrer("NIVEAU " + convertir_texte(niveau) + " / " + convertir_texte(NIVEAU_MAX), 320, 27, #FFFFFF, 16)
label(ecran, 470, 26, "Soldats : " + convertir_texte(nbTroupes(1)) + " vs " + convertir_texte(nbTroupes(2)), #CFD8DC, 11)
// le bas : les troupes et les ameliorations
rectangle(ecran, 0, 338, 640, 82, rgba(38, 50, 56, 0.9))
kb est un nombre
pour kb de 1 à 4
bx est un nombre
bx vaut 8 + (kb - 1) * 92
rectangle_arrondi(ecran, bx, 344, 86, 50, 9, sialors(orJ >= tCout[kb], #1565C0, rgba(255, 255, 255, 0.08)))
label(ecran, bx + 6, 360, convertir_texte(kb), #90CAF9, 10)
label(ecran, bx + 32, 366, tEmo[kb], #000000, 16)
appelle centrer(tNom[kb], bx + 43, 380, #FFFFFF, 10)
appelle centrer(convertir_texte(tCout[kb]) + " or", bx + 43, 391, #FFD54F, 10)
fin pour
prixMine est un nombre
prixMine vaut 80 + nivMine * 70
rectangle_arrondi(ecran, 380, 344, 80, 50, 9, sialors(nivMine < 3 et orJ >= prixMine, #6D4C41, rgba(255, 255, 255, 0.08)))
appelle centrer("M : Mine", 420, 364, #FFFFFF, 11)
appelle centrer(sialors(nivMine < 3, convertir_texte(prixMine) + " or", "MAX"), 420, 384, #FFD54F, 10)
rectangle_arrondi(ecran, 466, 344, 80, 50, 9, sialors(tourJ < 2 et orJ >= 120 + tourJ * 100, #6D4C41, rgba(255, 255, 255, 0.08)))
appelle centrer("T : Tour", 506, 364, #FFFFFF, 11)
appelle centrer(sialors(tourJ < 2, convertir_texte(120 + tourJ * 100) + " or", "MAX"), 506, 384, #FFD54F, 10)
si chronoPluie = 0 alors
rectangle_arrondi(ecran, 552, 344, 80, 50, 9, #E65100)
sinon
rectangle_arrondi(ecran, 552, 344, 80, 50, 9, rgba(255, 255, 255, 0.08))
rectangle_arrondi(ecran, 552, 344, 80 * (450 - chronoPluie) / 450, 50, 9, rgba(230, 81, 0, 0.4))
fin si
appelle centrer("F : Pluie", 592, 364, #FFFFFF, 11)
appelle centrer("de flèches", 592, 384, #FFE0B2, 10)
label(ecran, 10, 412, message, #FFFFFF, 11)
label(ecran, 470, 412, "P : pause X : menu", #78909C, 10)
// les fins de bataille
si etat = 2 alors
rectangle_arrondi(ecran, 150, 110, 340, 130, 16, rgba(38, 50, 56, 0.93))
si niveau >= NIVEAU_MAX alors
appelle centrer("👑 LE ROYAUME EST À TOI ! 👑", 320, 150, #FFD54F, 20)
appelle centrer("Tu as gagné les 5 batailles !", 320, 180, #FFFFFF, 14)
appelle centrer("ESPACE : rejouer depuis le début", 320, 220, #90CAF9, 13)
sinon
appelle centrer("VICTOIRE !", 320, 150, #69F0AE, 26)
appelle centrer("Le château ennemi est tombé.", 320, 180, #FFFFFF, 14)
appelle centrer("ESPACE : bataille suivante", 320, 220, #90CAF9, 13)
fin si
sinon si etat = 3 alors
rectangle_arrondi(ecran, 150, 110, 340, 130, 16, rgba(38, 50, 56, 0.93))
appelle centrer("DÉFAITE...", 320, 150, #FF5252, 26)
appelle centrer("Ton château est tombé au niveau " + convertir_texte(niveau) + ".", 320, 180, #FFFFFF, 14)
appelle centrer("ESPACE : réessayer X : menu", 320, 220, #90CAF9, 13)
sinon si etat = 4 alors
rectangle(ecran, 0, 40, 640, 298, rgba(0, 0, 0, 0.4))
appelle centrer("PAUSE", 320, 190, #FFFFFF, 36)
appelle centrer("P : reprendre X : menu", 320, 220, #CFD8DC, 14)
fin si
fin procédure
procédure dessinerMenu()
effacer(ecran)
contour(ecran, #0)
dégradé(ecran, [#37474F, #263238])
appelle dessinerChateau(110, 1, 1, 1)
appelle dessinerChateau(530, 2, 1, 1)
appelle centrer("LA GUERRE", 320, 120, #FFD54F, 40)
appelle centrer("DES CHÂTEAUX", 320, 160, #FFFFFF, 32)
appelle centrer("Envoie tes troupes et détruis le château ennemi !", 320, 194, #B0BEC5, 13)
appelle centrer("⚔️ Épéiste 🏹 Archer 🐎 Chevalier 💣 Catapulte", 320, 236, #ECEFF1, 13)
appelle centrer("ESPACE : commencer X : quitter", 320, 280, #69F0AE, 16)
si record > 0 alors
appelle centrer("Meilleur niveau atteint : " + convertir_texte(record), 320, 310, #FFD54F, 13)
fin si
appelle centrer("M : mine d'or T : tour d'archers F : pluie de flèches", 320, 400, #78909C, 12)
fin procédure
@ LE PROCESSUS : la bataille fait rage
processus Bataille()
tant que appActif
tic ajoute 1
si etat = 1 alors
// l'ordre du joueur
si ordre > 0 alors
appelle executerOrdre(ordre)
ordre vaut 0
fin si
orJ vaut orJ + 0.35 + nivMine * 0.18
si chronoPluie > 0 alors
chronoPluie soustrait 1
fin si
si flashT > 0 alors
flashT soustrait 1
fin si
appelle ennemiJoue()
appelle combattre()
appelle animerEffets()
// fin de la bataille ?
si pvE <= 0 alors
pvE vaut 0
si niveau > record alors
record vaut niveau
parametre('guerre_chateaux', 'record', record)
fin si
etat vaut 2
sinon si pvJ <= 0 alors
pvJ vaut 0
etat vaut 3
fin si
fin si
si etat = 0 alors
appelle dessinerMenu()
affiche ecran
sinon si etat <> 9 alors
appelle dessinerBataille()
affiche ecran
fin si
pause 80
fin tant que
fin processus
@ DEMARRAGE
appelle nouvelleBataille()
Bataille()
tant que appActif
si etat = 0 alors
interagir ecran, [" ", "x"] dans action, ptX, ptY
si action = 2 alors
appActif vaut faux
sinon
niveau vaut 1
etat vaut 9
appelle nouvelleBataille()
etat vaut 1
fin si
sinon si etat = 1 alors
interagir ecran, ["1", "2", "3", "4", "m", "t", "f", "p", "x"] dans action, ptX, ptY
si action >= 1 et action <= 7 alors
ordre vaut action
sinon si action = 8 alors
etat vaut 4
sinon si action = 9 alors
etat vaut 0
sinon si action = 0 alors
// un clic sur un bouton du bas
kb est un nombre
pour kb de 1 à 4
si clique(ptX, ptY, 8 + (kb - 1) * 92, 344, 86, 50) alors
ordre vaut kb
fin si
fin pour
si clique(ptX, ptY, 380, 344, 80, 50) alors
ordre vaut 5
sinon si clique(ptX, ptY, 466, 344, 80, 50) alors
ordre vaut 6
sinon si clique(ptX, ptY, 552, 344, 80, 50) alors
ordre vaut 7
fin si
fin si
sinon si etat = 4 alors
interagir ecran, ["p", "x"] dans action, ptX, ptY
si action = 2 alors
etat vaut 0
sinon
etat vaut 1
fin si
sinon si etat = 2 ou etat = 3 alors
interagir ecran, [" ", "x"] dans action, ptX, ptY
si action = 2 alors
etat vaut 0
sinon
si etat = 2 alors
si niveau >= NIVEAU_MAX alors
niveau vaut 1
sinon
niveau ajoute 1
fin si
fin si
etat vaut 9
appelle nouvelleBataille()
etat vaut 1
fin si
fin si
fin tant que
effacer(ecran)
dégradé(ecran, [#37474F, #263238])
label(ecran, 320 - label_largeur("Les chevaliers rentrent au château...", 24) / 2, 210, "Les chevaliers rentrent au château...", #FFD54F, 24)
affiche ecran