Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
t est une toile
dimension(t, 450, 460)
p est un tableau
// Initialisation du plateau (8x8)
// 0 = vide, 1 = pion blanc (joueur), 2 = pion noir (bot), 3 = dame blanche, 4 = dame noire
pour r de 0 à 7
l est un tableau
pour c de 0 à 7
si (r + c) mod 2 = 1 alors
si r < 3 alors
l ajoute 2
sinon si r > 4 alors
l ajoute 1
sinon
l ajoute 0
fin si
sinon
l ajoute 0
fin si
fin pour
p ajoute l
fin pour
sl est un nombre
sc est un nombre
sl vaut - 1
sc vaut - 1
cx est un nombre
cy est un nombre
cl est un nombre
cc est un nombre
pions_captures_joueur est un nombre
pions_captures_bot est un nombre
pions_captures_joueur vaut 0
pions_captures_bot vaut 0
partie_finie est un booléen
partie_finie vaut faux
message_fin est un texte
message_fin vaut ""
tant que partie_finie = faux
effacer(t)
// Fond du plateau
remplir(t, #2C3E50)
// Affichage des scores
label(t, 30, 24, "Vos captures : " + pions_captures_joueur, #FFFFFF, 14)
label(t, 250, 24, "Captures bot : " + pions_captures_bot, #FFFFFF, 14)
// Dessin du damier et des pions
pour r de 0 à 7
pour c de 0 à 7
xp est un nombre
yp est un nombre
xp vaut c * 50 + 25
yp vaut r * 50 + 35
si (r + c) mod 2 = 0 alors
rectangle(t, xp, yp, 50, 50, #ECF0F1)
sinon
rectangle(t, xp, yp, 50, 50, #7F8C8D)
fin si
// Surbrillance de la sélection, dessinée SOUS le pion
// (avant, elle était dessinée par-dessus et masquait le pion)
si r = sl et c = sc alors
rectangle(t, xp, yp, 50, 50, rgba(46, 204, 113, 0.5))
fin si
val est un nombre
val vaut p[r][c]
si val = 1 alors
cercle(t, xp + 25, yp + 25, 20, #BDC3C7)
cercle(t, xp + 25, yp + 25, 16, #FFFFFF)
sinon si val = 2 alors
cercle(t, xp + 25, yp + 25, 20, #111111)
cercle(t, xp + 25, yp + 25, 16, #34495E)
sinon si val = 3 alors
cercle(t, xp + 25, yp + 25, 20, #F39C12)
cercle(t, xp + 25, yp + 25, 16, #FFFFFF)
sinon si val = 4 alors
cercle(t, xp + 25, yp + 25, 20, #F39C12)
cercle(t, xp + 25, yp + 25, 16, #2C3E50)
fin si
fin pour
fin pour
affiche t
cliquer t dans cx, cy
cx vaut cx - 25
cy vaut cy - 35
// Conversion clic -> case en 2 lignes (au lieu de 14 "si")
si cx >= 0 et cx < 400 et cy >= 0 et cy < 400 alors
cc vaut (cx - (cx mod 50)) / 50
cl vaut (cy - (cy mod 50)) / 50
si sl = -1 alors
// Premier clic : on sélectionne un pion du joueur
si p[cl][cc] = 1 ou p[cl][cc] = 3 alors
sl vaut cl
sc vaut cc
fin si
sinon si cl = sl et cc = sc alors
// Re-clic sur le même pion : désélection
sl vaut - 1
sc vaut - 1
sinon si p[cl][cc] = 1 ou p[cl][cc] = 3 alors
// Clic sur un autre de ses pions : on change de sélection
sl vaut cl
sc vaut cc
sinon
deplacement_valide est un booléen
deplacement_valide vaut faux
manger_pion est un booléen
manger_pion vaut faux
ml_inter est un nombre
mc_inter est un nombre
ml_inter vaut 0
mc_inter vaut 0
// Gestion du pion normal (1) et de la Dame (3) du joueur
si absolue(sl - cl) = absolue(sc - cc) alors
dist est un nombre
dist vaut absolue(sl - cl)
si dist = 1 et p[cl][cc] = 0 alors
si p[sl][sc] = 3 ou (p[sl][sc] = 1 et sl - cl = 1) alors
deplacement_valide vaut vrai
fin si
sinon si dist = 2 et p[cl][cc] = 0 alors
ml_inter vaut (sl + cl) / 2
mc_inter vaut (sc + cc) / 2
si p[ml_inter][mc_inter] = 2 ou p[ml_inter][mc_inter] = 4 alors
manger_pion vaut vrai
deplacement_valide vaut vrai
fin si
fin si
fin si
// Exécution du mouvement du joueur
// (si le coup est invalide, le pion RESTE sélectionné pour réessayer)
si deplacement_valide = vrai alors
type_pion est un nombre
type_pion vaut p[sl][sc]
p[sl][sc] vaut 0
si manger_pion = vrai alors
p[ml_inter][mc_inter] vaut 0
pions_captures_joueur vaut pions_captures_joueur + 1
fin si
si cl = 0 et type_pion = 1 alors
p[cl][cc] vaut 3
sinon
p[cl][cc] vaut type_pion
fin si
sl vaut - 1
sc vaut - 1
// Vérification de la victoire du joueur
nb_pions_bot est un nombre
nb_pions_bot vaut 0
pour r_v de 0 à 7
pour c_v de 0 à 7
si p[r_v][c_v] = 2 ou p[r_v][c_v] = 4 alors
nb_pions_bot vaut nb_pions_bot + 1
fin si
fin pour
fin pour
si nb_pions_bot = 0 alors
partie_finie vaut vrai
message_fin vaut "VICTOIRE ! Vous avez gagné !"
fin si
// --- TOUR DU BOT ---
si partie_finie = faux alors
bot_agi est un booléen
bot_agi vaut faux
// 1. PRIORITÉ : le bot cherche d'abord à MANGER
// (avant, il ne mangeait que s'il ne pouvait pas bouger : jamais !)
pour br de 0 à 7
si bot_agi = faux alors
pour bc de 0 à 7
si bot_agi = faux alors
vb est un nombre
vb vaut p[br][bc]
si vb = 2 ou vb = 4 alors
// Manger Bas-Gauche
si br <= 5 et bc >= 2 alors
si (p[br + 1][bc - 1] = 1 ou p[br + 1][bc - 1] = 3) et p[br + 2][bc - 2] = 0 alors
p[br][bc] vaut 0
p[br + 1][bc - 1] vaut 0
pions_captures_bot vaut pions_captures_bot + 1
si br + 2 = 7 et vb = 2 alors
p[br + 2][bc - 2] vaut 4
sinon
p[br + 2][bc - 2] vaut vb
fin si
bot_agi vaut vrai
fin si
fin si
// Manger Bas-Droite
si bot_agi = faux et br <= 5 et bc <= 5 alors
si (p[br + 1][bc + 1] = 1 ou p[br + 1][bc + 1] = 3) et p[br + 2][bc + 2] = 0 alors
p[br][bc] vaut 0
p[br + 1][bc + 1] vaut 0
pions_captures_bot vaut pions_captures_bot + 1
si br + 2 = 7 et vb = 2 alors
p[br + 2][bc + 2] vaut 4
sinon
p[br + 2][bc + 2] vaut vb
fin si
bot_agi vaut vrai
fin si
fin si
// Manger Haut-Gauche (DAME uniquement)
si bot_agi = faux et vb = 4 et br >= 2 et bc >= 2 alors
si (p[br - 1][bc - 1] = 1 ou p[br - 1][bc - 1] = 3) et p[br - 2][bc - 2] = 0 alors
p[br][bc] vaut 0
p[br - 1][bc - 1] vaut 0
pions_captures_bot vaut pions_captures_bot + 1
p[br - 2][bc - 2] vaut 4
bot_agi vaut vrai
fin si
fin si
// Manger Haut-Droite (DAME uniquement)
si bot_agi = faux et vb = 4 et br >= 2 et bc <= 5 alors
si (p[br - 1][bc + 1] = 1 ou p[br - 1][bc + 1] = 3) et p[br - 2][bc + 2] = 0 alors
p[br][bc] vaut 0
p[br - 1][bc + 1] vaut 0
pions_captures_bot vaut pions_captures_bot + 1
p[br - 2][bc + 2] vaut 4
bot_agi vaut vrai
fin si
fin si
fin si
fin si
fin pour
fin si
fin pour
// 2. Sinon : déplacement simple
// (les pions du bot n'avancent QUE vers le bas ;
// seules les dames peuvent reculer, comme aux vraies dames)
si bot_agi = faux alors
pour br de 0 à 7
si bot_agi = faux alors
pour bc de 0 à 7
si bot_agi = faux alors
vb2 est un nombre
vb2 vaut p[br][bc]
si vb2 = 2 ou vb2 = 4 alors
// Bas-Gauche
si br < 7 et bc > 0 alors
si p[br + 1][bc - 1] = 0 alors
p[br][bc] vaut 0
si br + 1 = 7 et vb2 = 2 alors
p[br + 1][bc - 1] vaut 4
sinon
p[br + 1][bc - 1] vaut vb2
fin si
bot_agi vaut vrai
fin si
fin si
// Bas-Droite
si bot_agi = faux et br < 7 et bc < 7 alors
si p[br + 1][bc + 1] = 0 alors
p[br][bc] vaut 0
si br + 1 = 7 et vb2 = 2 alors
p[br + 1][bc + 1] vaut 4
sinon
p[br + 1][bc + 1] vaut vb2
fin si
bot_agi vaut vrai
fin si
fin si
// Haut-Gauche (DAME uniquement)
si bot_agi = faux et vb2 = 4 et br > 0 et bc > 0 alors
si p[br - 1][bc - 1] = 0 alors
p[br][bc] vaut 0
p[br - 1][bc - 1] vaut 4
bot_agi vaut vrai
fin si
fin si
// Haut-Droite (DAME uniquement)
si bot_agi = faux et vb2 = 4 et br > 0 et bc < 7 alors
si p[br - 1][bc + 1] = 0 alors
p[br][bc] vaut 0
p[br - 1][bc + 1] vaut 4
bot_agi vaut vrai
fin si
fin si
fin si
fin si
fin pour
fin si
fin pour
fin si
// 3. Bot totalement bloqué : le joueur gagne
si bot_agi = faux alors
partie_finie vaut vrai
message_fin vaut "VICTOIRE ! Le bot est bloqué !"
fin si
// Vérification de la victoire du bot
nb_pions_joueur est un nombre
nb_pions_joueur vaut 0
pour r_v2 de 0 à 7
pour c_v2 de 0 à 7
si p[r_v2][c_v2] = 1 ou p[r_v2][c_v2] = 3 alors
nb_pions_joueur vaut nb_pions_joueur + 1
fin si
fin pour
fin pour
si nb_pions_joueur = 0 alors
partie_finie vaut vrai
message_fin vaut "DÉFAITE ! Le bot a gagné !"
fin si
fin si
fin si
fin si
fin si
fin tant que
// --- AFFICHAGE FINAL : la partie est terminée ---
effacer(t)
remplir(t, #2C3E50)
label(t, 30, 24, "Vos captures : " + pions_captures_joueur, #FFFFFF, 14)
label(t, 250, 24, "Captures bot : " + pions_captures_bot, #FFFFFF, 14)
pour r de 0 à 7
pour c de 0 à 7
xp est un nombre
yp est un nombre
xp vaut c * 50 + 25
yp vaut r * 50 + 35
si (r + c) mod 2 = 0 alors
rectangle(t, xp, yp, 50, 50, #ECF0F1)
sinon
rectangle(t, xp, yp, 50, 50, #7F8C8D)
fin si
val est un nombre
val vaut p[r][c]
si val = 1 alors
cercle(t, xp + 25, yp + 25, 20, #BDC3C7)
cercle(t, xp + 25, yp + 25, 16, #FFFFFF)
sinon si val = 2 alors
cercle(t, xp + 25, yp + 25, 20, #111111)
cercle(t, xp + 25, yp + 25, 16, #34495E)
sinon si val = 3 alors
cercle(t, xp + 25, yp + 25, 20, #F39C12)
cercle(t, xp + 25, yp + 25, 16, #FFFFFF)
sinon si val = 4 alors
cercle(t, xp + 25, yp + 25, 20, #F39C12)
cercle(t, xp + 25, yp + 25, 16, #2C3E50)
fin si
fin pour
fin pour
// Écran de fin recentré
rectangle(t, 50, 205, 360, 110, #111111)
rectangle(t, 45, 200, 360, 110, #ECF0F1)
label(t, 85, 250, message_fin, #2C3E50, 18)
affiche t