From d58d3a91d162c469d4668806f959d33c41b09dca Mon Sep 17 00:00:00 2001 From: "philippot.m" <> Date: Sun, 30 Mar 2025 11:54:02 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20attribut=20iteration=20et=20essai=20de?= =?UTF-8?q?=20regarder=20uniquement=20les=20carr=C3=A9=20modifier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jeu_de_la_vie.py | 124 +++++++++++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 46 deletions(-) diff --git a/jeu_de_la_vie.py b/jeu_de_la_vie.py index e083299..8d3a14a 100644 --- a/jeu_de_la_vie.py +++ b/jeu_de_la_vie.py @@ -3,20 +3,21 @@ from tkinter.filedialog import askopenfile from copy import deepcopy from time import sleep -f_cont=[] +f_cont=False class Grille: - def __init__(self,unnb_ligne, unnb_col,unvivante,unmorte,uncanva,unfenetre): + def __init__(self,unnb_ligne, unnb_col,unvivante,uniteration,unmorte,uncanva,unfenetre): self.ligne=unnb_ligne self.colonne=unnb_col self.lst_grille=[] self.grille=[] - self.taille_carré=0 + self.taille_carre=0 self.lst_c=[] self.vivante=unvivante self.morte=unmorte self.can=uncanva self.fen=unfenetre - + self.iteration=uniteration + def creer_grille(self): self.grille=[] for ligne in range(0,self.ligne): @@ -30,10 +31,10 @@ class Grille: self.can.delete(self.lst_c[detruire_l][detruire_col]) def creer_carre(self,nb_ligne,nb_col): + self.detruire_ancien_carre() self.ligne=nb_ligne self.colone=nb_col - ###############création_l_carré########## - + ###############création_lst_carré########## self.lst_c=[] for ligne in range(len(self.grille)): self.lst_c.append([]) @@ -58,15 +59,23 @@ class Grille: for col in range (len(self.grille[0])): if self.grille [ligne][col] == 1: self.can.itemconfig(self.lst_c[ligne][col],fill ="black") + self.vivante=self.vivante+1 + nb_vivante_lab.set("Nombre de cellule vivante:"+str(self.vivante)) self.fen.update() else: self.can.itemconfig(self.lst_c[ligne][col],fill ="white") + self.morte=self.morte+1 + nb_morte_lab.set("Nombre de cellule morte:"+str(self.morte)) self.fen.update() - + def compte(self): + for ligne in range (len(self.grille)): + for col in range (len(self.grille[0])): + pass + def change(self,coord_x,coord_y): - num_colone=coord_x//self.taille_carré - num_ligne=coord_y//self.taille_carré - if 00: + lst_vivante_dans_ligne.append(ligne) + lst_vivante_dans_colonne.append([]) + for index, etat in enumerate(self.grille[ligne]): + if etat==1: + lst_vivante_dans_colonne[len(lst_vivante_dans_colonne)-1].append(index) + vie=0 - for ligne in range (0,len(self.grille)): - for col in range (0,len(self.grille[0])): - for l_contour in range(-1,2): - for col_contour in range(-1,2): - if l_contour==0 and col_contour==0: - pass - elif copy_grille[(ligne+l_contour)%len(self.grille)][(col+col_contour)%len(self.grille[0])]==1: - vie=vie+1 - if copy_grille[ligne][col]==1 and (vie==2 or vie==3): - self.grille[ligne][col]=1 - elif copy_grille[ligne][col]==1 and (vie<2 or vie>3): - self.grille[ligne][col]=0 - elif copy_grille[ligne][col]==0 and vie==3: - self.grille[ligne][col]=1 - vie=0 + l_ac=0 + for ligne in lst_vivante_dans_ligne: + for col in range(0,len(lst_vivante_dans_colonne[l_ac])): + for cel_l_autour in range(-1,2): + for cel_col_autour in range(-1,2): + for l_contour in range(-1,2): + for col_contour in range(-1,2): + if l_contour==0 and col_contour==0: + pass + elif copy_grille[(ligne+cel_l_autour+l_contour)%len(self.grille)][(lst_vivante_dans_colonne[l_ac][col]+cel_l_autour+cel_l_autour)%len(self.grille[0])]==1: + print(copy_grille[(ligne+cel_l_autour+l_contour)],) + vie=vie+1 + if copy_grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour ]==1 and (vie==2 or vie==3): + self.grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour ]=1 + elif copy_grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour]==1 and (vie<2 or vie>3): + self.grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour ]=0 + elif copy_grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour]==0 and vie==3: + self.grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour ]=1 + vie=0 + l_ac=l_ac+1 + self.iteration=self.iteration+1 self.affiche_grille () def gen_prev(self): self.grille=deepcopy(self.lst_grille[len(self.lst_grille)-1]) self.lst_grille.pop(len(self.lst_grille)-1) + self.iteration=self.iteration-1 self.affiche_grille () @@ -106,24 +130,19 @@ class Grille: def bouton_grille(): grille.detruire_ancien_carre() grille.ligne=nb_ligne_choisi.get() - print(grille.ligne) grille.colonne=nb_colonne_choisi.get() - print(grille.colonne) grille.creer_grille() grille.creer_carre(nb_ligne_choisi.get(),nb_colonne_choisi.get()) - -def creer_care(nb_ligne,nb_colonne): - pass def change(event): - pass + grille.change(event.x,event.y) ######Fonction de génération########## def gen_suiv(): - pass + grille.gen_suiv() def gen_prev(): - pass + grille.gen_prev() def gen_cont(): global f_cont @@ -139,15 +158,14 @@ def stop(): #########Fonction système sauvegarde######## def save(): state=open("grille_jeu.txt","w") - for ligne in range (0,len(grille)): - if ligne!=0 or ligne==len(grille)-1: + for ligne in range (0,len(grille.grille)): + if ligne!=0 or ligne==len(grille.grille)-1: state.write(",") - for col in range (0,len(grille[0])): - print(col,len(grille[0])-1) - if col== len(grille[0])-1: - state.write(str(grille[ligne][col])) + for col in range (0,len(grille.grille[0])): + if col== len(grille.grille[0])-1: + state.write(str(grille.grille[ligne][col])) else: - state.write(str(grille[ligne][col])+" ") + state.write(str(grille.grille[ligne][col])+" ") def load(): new_state=askopenfile(mode="r",initialdir = "/",title = "Choisir un fichier",filetypes = [("Text files","*.txt*")]) @@ -158,8 +176,13 @@ def load(): for int_l in range(0,len(new_state)): for int_col in range(0,len(new_state[0])): new_state[int_l][int_col]=int(new_state[int_l][int_col]) + grille.grille=new_state + + grille.ligne=len(grille.grille) - creer_care (len(new_state),len(new_state[0])) + grille.colonne=len(grille.grille[0]) + + grille.creer_carre(len(grille.grille),len(grille.grille[0])) ##########Programme principale############## fenetre = Tk() @@ -196,6 +219,15 @@ gen_continue.grid(row=10,column=5) stop=Button(text="Stop",command=stop) stop.grid(row=11,column=5) +nb_vivante_lab=StringVar() +nb_vivante_lab.set("Nombre de cellule vivante:") +lab_cellule_vie=Label(textvariable=nb_vivante_lab).grid(row=10,column=7) + +nb_morte_lab=StringVar() +nb_morte_lab.set("Nombre de cellule morte:") +lab_cellule_morte=Label(textvariable=nb_morte_lab).grid(row=11,column=7) + +lab_iteration=Label(text="Nombre d'itération:0").grid(row=10,column=8) ################Système sauvegarde########## save=Button(text="Sauvegarder",command=save) save.grid(row=10,column=6) @@ -203,7 +235,7 @@ load=Button(text="Charger",command=load) load.grid(row=11,column=6) zone.bind_all('', change) -grille=Grille(0, 0, - 0,0, - zone,fenetre) +grille=Grille(0,0, + 0,0,0, + zone,fenetre) fenetre.mainloop() \ No newline at end of file