# ############################################### # Puissance 4 avec Turtle # Compatible Python 3.2.5 # L'ordinateur joue une colonne aléatoire # Mai 2026 # nsi.gecif.net # ############################################### import turtle import random LIGNES = 6 COLONNES = 7 TAILLE = 60 grille = [[0 for j in range(COLONNES)] for i in range(LIGNES)] joueur = 1 # humain ordinateur = 2 # IA fenetre = turtle.Screen() fenetre.title("Puissance 4 - nsi.gecif.net") dessin = turtle.Turtle() dessin.hideturtle() dessin.speed(0) message = turtle.Turtle() message.hideturtle() message.penup() message.goto(0, -230) jeu_termine = False def dessiner_grille(): dessin.clear() for ligne in range(LIGNES): for colonne in range(COLONNES): x = colonne * TAILLE - 210 y = ligne * TAILLE - 180 dessin.penup() dessin.goto(x, y) if grille[ligne][colonne] == 0: couleur = "white" elif grille[ligne][colonne] == 1: couleur = "red" else: couleur = "yellow" dessin.fillcolor(couleur) dessin.begin_fill() for _ in range(4): dessin.pendown() dessin.forward(TAILLE) dessin.left(90) dessin.end_fill() fenetre.update() def jouer(colonne, pion): for ligne in range(LIGNES): if grille[ligne][colonne] == 0: grille[ligne][colonne] = pion return True return False def colonne_valide(colonne): return grille[LIGNES - 1][colonne] == 0 def victoire(pion): # Horizontal for l in range(LIGNES): for c in range(COLONNES - 3): if (grille[l][c] == pion and grille[l][c+1] == pion and grille[l][c+2] == pion and grille[l][c+3] == pion): return True # Vertical for l in range(LIGNES - 3): for c in range(COLONNES): if (grille[l][c] == pion and grille[l+1][c] == pion and grille[l+2][c] == pion and grille[l+3][c] == pion): return True # Diagonale montante for l in range(LIGNES - 3): for c in range(COLONNES - 3): if (grille[l][c] == pion and grille[l+1][c+1] == pion and grille[l+2][c+2] == pion and grille[l+3][c+3] == pion): return True # Diagonale descendante for l in range(3, LIGNES): for c in range(COLONNES - 3): if (grille[l][c] == pion and grille[l-1][c+1] == pion and grille[l-2][c+2] == pion and grille[l-3][c+3] == pion): return True return False def grille_pleine(): for c in range(COLONNES): if colonne_valide(c): return False return True def coup_ordinateur(): colonnes = [] for c in range(COLONNES): if colonne_valide(c): colonnes.append(c) if colonnes: jouer(random.choice(colonnes), ordinateur) def afficher(texte): message.clear() message.write(texte, align="center", font=("Arial", 16, "normal")) def clic(x, y): global jeu_termine if jeu_termine: return colonne = int((x + 210) // TAILLE) if colonne < 0 or colonne >= COLONNES: return if not colonne_valide(colonne): return # Joueur jouer(colonne, joueur) dessiner_grille() if victoire(joueur): afficher("Vous avez gagné !") jeu_termine = True return if grille_pleine(): afficher("Match nul.") jeu_termine = True return # Ordinateur coup_ordinateur() dessiner_grille() if victoire(ordinateur): afficher("L'ordinateur a gagné.") jeu_termine = True return if grille_pleine(): afficher("Match nul.") jeu_termine = True fenetre.setup(500, 500) fenetre.tracer(0) dessiner_grille() afficher("Cliquez dans une colonne") fenetre.onclick(clic) fenetre.mainloop()