Browse Source

ajout attribut iteration et essai de regarder uniquement les carré modifier

master
philippot.m 3 weeks ago
parent
commit
d58d3a91d1
  1. 124
      jeu_de_la_vie.py

124
jeu_de_la_vie.py

@ -3,20 +3,21 @@ from tkinter.filedialog import askopenfile
from copy import deepcopy from copy import deepcopy
from time import sleep from time import sleep
f_cont=[] f_cont=False
class Grille: 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.ligne=unnb_ligne
self.colonne=unnb_col self.colonne=unnb_col
self.lst_grille=[] self.lst_grille=[]
self.grille=[] self.grille=[]
self.taille_carré=0 self.taille_carre=0
self.lst_c=[] self.lst_c=[]
self.vivante=unvivante self.vivante=unvivante
self.morte=unmorte self.morte=unmorte
self.can=uncanva self.can=uncanva
self.fen=unfenetre self.fen=unfenetre
self.iteration=uniteration
def creer_grille(self): def creer_grille(self):
self.grille=[] self.grille=[]
for ligne in range(0,self.ligne): for ligne in range(0,self.ligne):
@ -30,10 +31,10 @@ class Grille:
self.can.delete(self.lst_c[detruire_l][detruire_col]) self.can.delete(self.lst_c[detruire_l][detruire_col])
def creer_carre(self,nb_ligne,nb_col): def creer_carre(self,nb_ligne,nb_col):
self.detruire_ancien_carre()
self.ligne=nb_ligne self.ligne=nb_ligne
self.colone=nb_col self.colone=nb_col
###############création_l_carré########## ###############création_lst_carré##########
self.lst_c=[] self.lst_c=[]
for ligne in range(len(self.grille)): for ligne in range(len(self.grille)):
self.lst_c.append([]) self.lst_c.append([])
@ -58,15 +59,23 @@ class Grille:
for col in range (len(self.grille[0])): for col in range (len(self.grille[0])):
if self.grille [ligne][col] == 1: if self.grille [ligne][col] == 1:
self.can.itemconfig(self.lst_c[ligne][col],fill ="black") 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() self.fen.update()
else: else:
self.can.itemconfig(self.lst_c[ligne][col],fill ="white") 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() 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): def change(self,coord_x,coord_y):
num_colone=coord_x//self.taille_carré num_colone=coord_x//self.taille_carre
num_ligne=coord_y//self.taille_carré num_ligne=coord_y//self.taille_carre
if 0<event.x<1246 and 0<event.y<795: if 0<coord_x<1246 and 0<coord_y<795:
if self.grille[num_ligne][num_colone]==0: if self.grille[num_ligne][num_colone]==0:
self.grille[num_ligne][num_colone]=1 self.grille[num_ligne][num_colone]=1
elif self.grille[num_ligne][num_colone]==1: elif self.grille[num_ligne][num_colone]==1:
@ -74,31 +83,46 @@ class Grille:
self.affiche_grille () self.affiche_grille ()
def gen_suiv(self): def gen_suiv(self):
copy_grille=deepcopy(grille) copy_grille=deepcopy(self.grille)
self.lst_grille.append(copy_grille) self.lst_grille.append(copy_grille)
lst_vivante_dans_ligne=[]
lst_vivante_dans_colonne=[]
for ligne in range(0,len(self.grille)): for ligne in range(0,len(self.grille)):
print("") if self.grille[ligne].count(1)>0:
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 vie=0
for ligne in range (0,len(self.grille)): l_ac=0
for col in range (0,len(self.grille[0])): for ligne in lst_vivante_dans_ligne:
for l_contour in range(-1,2): for col in range(0,len(lst_vivante_dans_colonne[l_ac])):
for col_contour in range(-1,2): for cel_l_autour in range(-1,2):
if l_contour==0 and col_contour==0: for cel_col_autour in range(-1,2):
pass for l_contour in range(-1,2):
elif copy_grille[(ligne+l_contour)%len(self.grille)][(col+col_contour)%len(self.grille[0])]==1: for col_contour in range(-1,2):
vie=vie+1 if l_contour==0 and col_contour==0:
if copy_grille[ligne][col]==1 and (vie==2 or vie==3): pass
self.grille[ligne][col]=1 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:
elif copy_grille[ligne][col]==1 and (vie<2 or vie>3): print(copy_grille[(ligne+cel_l_autour+l_contour)],)
self.grille[ligne][col]=0 vie=vie+1
elif copy_grille[ligne][col]==0 and vie==3: 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][col]=1 self.grille[ligne+cel_l_autour][lst_vivante_dans_colonne[l_ac][col]+ cel_l_autour ]=1
vie=0 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 () self.affiche_grille ()
def gen_prev(self): def gen_prev(self):
self.grille=deepcopy(self.lst_grille[len(self.lst_grille)-1]) self.grille=deepcopy(self.lst_grille[len(self.lst_grille)-1])
self.lst_grille.pop(len(self.lst_grille)-1) self.lst_grille.pop(len(self.lst_grille)-1)
self.iteration=self.iteration-1
self.affiche_grille () self.affiche_grille ()
@ -106,24 +130,19 @@ class Grille:
def bouton_grille(): def bouton_grille():
grille.detruire_ancien_carre() grille.detruire_ancien_carre()
grille.ligne=nb_ligne_choisi.get() grille.ligne=nb_ligne_choisi.get()
print(grille.ligne)
grille.colonne=nb_colonne_choisi.get() grille.colonne=nb_colonne_choisi.get()
print(grille.colonne)
grille.creer_grille() grille.creer_grille()
grille.creer_carre(nb_ligne_choisi.get(),nb_colonne_choisi.get()) grille.creer_carre(nb_ligne_choisi.get(),nb_colonne_choisi.get())
def creer_care(nb_ligne,nb_colonne):
pass
def change(event): def change(event):
pass grille.change(event.x,event.y)
######Fonction de génération########## ######Fonction de génération##########
def gen_suiv(): def gen_suiv():
pass grille.gen_suiv()
def gen_prev(): def gen_prev():
pass grille.gen_prev()
def gen_cont(): def gen_cont():
global f_cont global f_cont
@ -139,15 +158,14 @@ def stop():
#########Fonction système sauvegarde######## #########Fonction système sauvegarde########
def save(): def save():
state=open("grille_jeu.txt","w") state=open("grille_jeu.txt","w")
for ligne in range (0,len(grille)): for ligne in range (0,len(grille.grille)):
if ligne!=0 or ligne==len(grille)-1: if ligne!=0 or ligne==len(grille.grille)-1:
state.write(",") state.write(",")
for col in range (0,len(grille[0])): for col in range (0,len(grille.grille[0])):
print(col,len(grille[0])-1) if col== len(grille.grille[0])-1:
if col== len(grille[0])-1: state.write(str(grille.grille[ligne][col]))
state.write(str(grille[ligne][col]))
else: else:
state.write(str(grille[ligne][col])+" ") state.write(str(grille.grille[ligne][col])+" ")
def load(): def load():
new_state=askopenfile(mode="r",initialdir = "/",title = "Choisir un fichier",filetypes = [("Text files","*.txt*")]) 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_l in range(0,len(new_state)):
for int_col in range(0,len(new_state[0])): for int_col in range(0,len(new_state[0])):
new_state[int_l][int_col]=int(new_state[int_l][int_col]) 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############## ##########Programme principale##############
fenetre = Tk() fenetre = Tk()
@ -196,6 +219,15 @@ gen_continue.grid(row=10,column=5)
stop=Button(text="Stop",command=stop) stop=Button(text="Stop",command=stop)
stop.grid(row=11,column=5) 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########## ################Système sauvegarde##########
save=Button(text="Sauvegarder",command=save) save=Button(text="Sauvegarder",command=save)
save.grid(row=10,column=6) save.grid(row=10,column=6)
@ -203,7 +235,7 @@ load=Button(text="Charger",command=load)
load.grid(row=11,column=6) load.grid(row=11,column=6)
zone.bind_all('<Button-3>', change) zone.bind_all('<Button-3>', change)
grille=Grille(0, 0, grille=Grille(0,0,
0,0, 0,0,0,
zone,fenetre) zone,fenetre)
fenetre.mainloop() fenetre.mainloop()
Loading…
Cancel
Save