|
|
@ -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 0<event.x<1246 and 0<event.y<795: |
|
|
|
num_colone=coord_x//self.taille_carre |
|
|
|
num_ligne=coord_y//self.taille_carre |
|
|
|
if 0<coord_x<1246 and 0<coord_y<795: |
|
|
|
if self.grille[num_ligne][num_colone]==0: |
|
|
|
self.grille[num_ligne][num_colone]=1 |
|
|
|
elif self.grille[num_ligne][num_colone]==1: |
|
|
@ -74,31 +83,46 @@ class Grille: |
|
|
|
self.affiche_grille () |
|
|
|
|
|
|
|
def gen_suiv(self): |
|
|
|
copy_grille=deepcopy(grille) |
|
|
|
copy_grille=deepcopy(self.grille) |
|
|
|
self.lst_grille.append(copy_grille) |
|
|
|
lst_vivante_dans_ligne=[] |
|
|
|
lst_vivante_dans_colonne=[] |
|
|
|
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 |
|
|
|
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('<Button-3>', change) |
|
|
|
|
|
|
|
grille=Grille(0, 0, |
|
|
|
0,0, |
|
|
|
zone,fenetre) |
|
|
|
grille=Grille(0,0, |
|
|
|
0,0,0, |
|
|
|
zone,fenetre) |
|
|
|
fenetre.mainloop() |