# ############################################################################ # # Programme : Puissance 4 # Version : 4 # Date : 21 octobre 2020 # Interpréteur : Python 3.2 # Environnement de développement : EduPython 2.5.3.0 # Auteur : Jean-Christophe MICHEL # Site Internet : http://python.gecif.net/ # # ---------------------------------------------------------------------------- # # Dans cette version 4 : # - pour jouer un pion les joueurs doivent cliquer à tour de rôle dans une colonne # - pour recommencer une partie il faut appuyer sur la touche Echap # - pour quitte immédiatement le programme il faut fermer la fenêtre de la tortue # - la grille pleine est détectée # - c'est toujours le joueur ROUGE qui commence # - le programme détecte 4 pions alignés quelque soit la couleur et la direction # - si 4 pions sont alignés la partie est finie : seul ESC permet de recommencer # - l'ordinateur joue automatiquement des pions bleus, et le joueur humain les pions rouges # - au départ on demande quel joueur commence : l'orinateur (BLEU) ou le joueur (ROUGE) # # ############################################################################ from turtle import * from random import * # ############################################################################ # D E C L A R A T I O N D E S V A R I A B L E S G L O B A L E S # ############################################################################ # Structure de donnée mémorisant la grille : une liste à 2 dimensions (6 lignes et 7 colonnes) contenant : # - un 0 si la case est vide # - un 1 si un pion ROUGE est dans la case # - un 2 si un pion BLEU est dans la case grille=[7*[0], 7*[0], 7*[0], 7*[0], 7*[0], 7*[0]] # liste_colonne mémorise le nombre de pions dans chacune des colonnes liste_colonne=7*[0] # joueur_courant indique le prochain joueur qui doit jouer : 1 pour ROUGE, 2 pour BLEU et 0 pour partie finie joueur_courant=1 # ############################################################################ # D E C L A R A T I O N D E S F O N C T I O N S # ############################################################################ # ############################################################################ # La fonction test_grille(g) analyse chaque liste de la # liste de liste g passée en paramètre à la recherche de 4 pions alignés : def tester_grille(g): # utilise la variable globale joueur_courant : global joueur_courant for ligne in g: if ('1, '*4)[:-2] in str(ligne): print('\nFin de la partie : le joueur ROUGE a gagné !') print('\nAppuyez sur Echap pour recommencer une nouvelle partie.') joueur_courant=0 elif ('2, '*4)[:-2] in str(ligne): print('\nFin de la partie : le joueur BLEU a gagné !') print('\nAppuyez sur Echap pour recommencer une nouvelle partie.') joueur_courant=0 # ############################################################################ # La fonction afficher_grille() affiche la grille sur la sortie standard def afficher_grille(): for i in range(6): print(grille[i]) # affiche le repère des colonnes sous la grille : print('\n 0 1 2 3 4 5 6') # ############################################################################ # La fonction grille_pleine() teste si la grille est pleine (aucun 0 dans la liste grille) def grille_pleine(): b_plein=True for i in range(6): for j in range(7): if grille[i][j]==0: # retourne False si au moins une case est vide b_plein=False return b_plein # ############################################################################ # La fonction jouer(x,y) est appelée si on clique gauche sur le point (x,y) def jouer(x,y): # utilise la variable globale joueur_courant : global joueur_courant # si joueur_courant=0 la partie est finie : il n'y a plus rien à jouer if joueur_courant==0: return() # teste si la grille est pleine : if grille_pleine(): print("Fin de la partie : la grille est pleine. Appuyez sur Echap pour recommencer une nouvelle partie.") else: # analyse la zone cliquée pour déterminer la colonne : if x_base