|
|
@ -2,13 +2,12 @@ from tkinter import * |
|
|
|
from tkinter.filedialog import askopenfile |
|
|
|
from copy import deepcopy |
|
|
|
from time import sleep |
|
|
|
lst_c=[] |
|
|
|
lst_grille=[] |
|
|
|
|
|
|
|
f_cont=[] |
|
|
|
class Grille: |
|
|
|
def __init__(self,unnb_ligne, unnb_col,unvivante,unmorte,uncanva,unfenetre): |
|
|
|
self.ligne=unnb_ligne |
|
|
|
self.colone=unnb_col |
|
|
|
self.colonne=unnb_col |
|
|
|
self.lst_grille=[] |
|
|
|
self.grille=[] |
|
|
|
self.taille_carré=0 |
|
|
@ -19,34 +18,36 @@ class Grille: |
|
|
|
self.fen=unfenetre |
|
|
|
|
|
|
|
def creer_grille(self): |
|
|
|
for ligne in range(0,nb_ligne): |
|
|
|
self.grille=[] |
|
|
|
for ligne in range(0,self.ligne): |
|
|
|
self.grille.append([]) |
|
|
|
for colonne in range(0,nb_colonne): |
|
|
|
for colonne in range(0,self.colonne): |
|
|
|
self.grille[ligne].append(0) |
|
|
|
|
|
|
|
def detruire_ancien_carre(self): |
|
|
|
for detruire_l in range(0,len(self.lst_c)): |
|
|
|
for detruire_col in range(0,len(self.lst_c[0])): |
|
|
|
self.can.delete(self.lst_c[detruire_l][detruire_col]) |
|
|
|
|
|
|
|
def creer_carre(self,nb_ligne,nb_col): |
|
|
|
self.ligne=nb_ligne |
|
|
|
self.colone=nb_col |
|
|
|
#####Détruire les carré précédent############ |
|
|
|
for detruire_l in range(0,len(self.lst_c)): |
|
|
|
for detruire_col in range(0,len(self.lst_c[0])): |
|
|
|
zone.delete(self.lst_c[detruire_l][detruire_col]) |
|
|
|
###############création_l_carré########## |
|
|
|
|
|
|
|
self.lst_c=[] |
|
|
|
for ligne in range(len(self.grille)): |
|
|
|
lst_c.append([]) |
|
|
|
self.lst_c.append([]) |
|
|
|
|
|
|
|
###############création_carré########## |
|
|
|
carre_col,carre_ligne=1246//self.colonne,795//self.ligne |
|
|
|
if carre_col<carré_ligne: |
|
|
|
self.taille_carre=carré_col |
|
|
|
if carre_col<carre_ligne: |
|
|
|
self.taille_carre=carre_col |
|
|
|
else: |
|
|
|
self.taille_carre=carré_ligne |
|
|
|
self.taille_carre=carre_ligne |
|
|
|
|
|
|
|
for ligne in range(len(grille)): |
|
|
|
for colone in range(len(grille[0])): |
|
|
|
new_c=zone.create_rectangle( colone *self.taille_carre , ligne *self.taille_carre , |
|
|
|
for ligne in range(len(self.grille)): |
|
|
|
for colone in range(len(self.grille[0])): |
|
|
|
new_c=self.can.create_rectangle( colone *self.taille_carre , ligne *self.taille_carre , |
|
|
|
colone*self.taille_carre+self.taille_carre , ligne*self.taille_carre +self.taille_carre , |
|
|
|
fill ="white") |
|
|
|
self.lst_c[ligne].append(new_c) |
|
|
@ -56,10 +57,10 @@ class Grille: |
|
|
|
for ligne in range (len(self.grille)): |
|
|
|
for col in range (len(self.grille[0])): |
|
|
|
if self.grille [ligne][col] == 1: |
|
|
|
zone.itemconfig(self.lst_c[ligne][col],fill ="black") |
|
|
|
self.can.itemconfig(self.lst_c[ligne][col],fill ="black") |
|
|
|
self.fen.update() |
|
|
|
else: |
|
|
|
zone.itemconfig(self.lst_c[ligne][col],fill ="white") |
|
|
|
self.can.itemconfig(self.lst_c[ligne][col],fill ="white") |
|
|
|
self.fen.update() |
|
|
|
|
|
|
|
def change(self,coord_x,coord_y): |
|
|
@ -76,7 +77,7 @@ class Grille: |
|
|
|
copy_grille=deepcopy(grille) |
|
|
|
self.lst_grille.append(copy_grille) |
|
|
|
for ligne in range(0,len(self.grille)): |
|
|
|
nb_1_grille=[ i in i_1, nb_1 in enumerate(self.grille[grille]) if nb_1==1] |
|
|
|
print("") |
|
|
|
vie=0 |
|
|
|
for ligne in range (0,len(self.grille)): |
|
|
|
for col in range (0,len(self.grille[0])): |
|
|
@ -93,123 +94,42 @@ class Grille: |
|
|
|
elif copy_grille[ligne][col]==0 and vie==3: |
|
|
|
self.grille[ligne][col]=1 |
|
|
|
vie=0 |
|
|
|
affiche_grille () |
|
|
|
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) |
|
|
|
affiche_grille () |
|
|
|
self.affiche_grille () |
|
|
|
|
|
|
|
|
|
|
|
########Fonction interface utilisateur########### |
|
|
|
def bouton_grille(): |
|
|
|
global nb_ligne |
|
|
|
global nb_colonne |
|
|
|
nb_ligne=nb_ligne_choisi.get() |
|
|
|
nb_colonne=nb_colonne_choisi.get() |
|
|
|
creer_grille() |
|
|
|
grille=Grille(nb_ligne_choisi.get(), nb_colonne_choisi.get(), |
|
|
|
0, nb_ligne*nb_colonne, |
|
|
|
zone, fenetre) |
|
|
|
|
|
|
|
def creer_grille(): |
|
|
|
global grille |
|
|
|
global lst_grille |
|
|
|
global nb_ligne,nb_colonne |
|
|
|
##############création_grille########## |
|
|
|
grille =[] |
|
|
|
lst_grille=[] |
|
|
|
for ligne in range(0,nb_ligne): |
|
|
|
grille.append([]) |
|
|
|
for colonne in range(0,nb_colonne): |
|
|
|
grille[ligne].append(0) |
|
|
|
creer_care(nb_ligne,nb_colonne) |
|
|
|
|
|
|
|
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): |
|
|
|
global lst_c |
|
|
|
global taille_carré |
|
|
|
#####Détruire les carré précédent############ |
|
|
|
for detruire_l in range(0,len(lst_c)): |
|
|
|
for detruire_col in range(0,len(lst_c[0])): |
|
|
|
zone.delete(lst_c[detruire_l][detruire_col]) |
|
|
|
###############création_l_carré########## |
|
|
|
lst_c=[] |
|
|
|
for ligne in range(len(grille)): |
|
|
|
lst_c.append([]) |
|
|
|
|
|
|
|
###############création_carré########## |
|
|
|
carré_col,carré_ligne=1246//nb_colonne,795//nb_ligne |
|
|
|
if carré_col<carré_ligne: |
|
|
|
taille_carré=carré_col |
|
|
|
else: |
|
|
|
taille_carré=carré_ligne |
|
|
|
|
|
|
|
for ligne in range(len(grille)): |
|
|
|
for colone in range(len(grille[0])): |
|
|
|
c=zone.create_rectangle( colone *taille_carré , ligne *taille_carré , colone*taille_carré+taille_carré , ligne*taille_carré+taille_carré , fill ="white") |
|
|
|
lst_c[ligne].append(c) |
|
|
|
afficheCarte () |
|
|
|
pass |
|
|
|
|
|
|
|
def afficheCarte (): |
|
|
|
for ligne in range (len(grille)): |
|
|
|
for col in range (len(grille[0])): |
|
|
|
if grille [ligne][col] == 1: |
|
|
|
zone.itemconfig(lst_c[ligne][col],fill ="black") |
|
|
|
fenetre.update() |
|
|
|
else: |
|
|
|
zone.itemconfig(lst_c[ligne][col],fill ="white") |
|
|
|
fenetre.update() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def change(event): |
|
|
|
global grille |
|
|
|
num_colone=event.x//taille_carré |
|
|
|
num_ligne=event.y//taille_carré |
|
|
|
if 0<event.x<1246 and 0<event.y<795: |
|
|
|
if grille[num_ligne][num_colone]==0: |
|
|
|
grille[num_ligne][num_colone]=1 |
|
|
|
elif grille[num_ligne][num_colone]==1: |
|
|
|
grille[num_ligne][num_colone]=0 |
|
|
|
afficheCarte () |
|
|
|
pass |
|
|
|
|
|
|
|
######Fonction de génération########## |
|
|
|
def gen_suiv(): |
|
|
|
global grille |
|
|
|
global copy_grille |
|
|
|
global lst_grille |
|
|
|
copy_grille=deepcopy(grille) |
|
|
|
lst_grille.append(copy_grille) |
|
|
|
vie=0 |
|
|
|
for ligne in range (0,len(grille)): |
|
|
|
for col in range (0,len(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(grille)][(col+col_contour)%len(grille[0])]==1: |
|
|
|
vie=vie+1 |
|
|
|
if copy_grille[ligne][col]==1 and (vie==2 or vie==3): |
|
|
|
grille[ligne][col]=1 |
|
|
|
elif copy_grille[ligne][col]==1 and (vie<2 or vie>3): |
|
|
|
grille[ligne][col]=0 |
|
|
|
elif copy_grille[ligne][col]==0 and vie==3: |
|
|
|
grille[ligne][col]=1 |
|
|
|
vie=0 |
|
|
|
afficheCarte () |
|
|
|
pass |
|
|
|
|
|
|
|
def gen_prev(): |
|
|
|
global grille |
|
|
|
global lst_grille |
|
|
|
grille=deepcopy(lst_grille[len(lst_grille)-1]) |
|
|
|
lst_grille.pop(len(lst_grille)-1) |
|
|
|
afficheCarte () |
|
|
|
pass |
|
|
|
|
|
|
|
def gen_cont(): |
|
|
|
global f_cont |
|
|
|
f_cont=True |
|
|
|
while f_cont==True: |
|
|
|
gen_suiv() |
|
|
|
grille.gen_suiv() |
|
|
|
sleep(0.1) |
|
|
|
if f_cont==False: |
|
|
|
break |
|
|
@ -229,7 +149,6 @@ def save(): |
|
|
|
else: |
|
|
|
state.write(str(grille[ligne][col])+" ") |
|
|
|
def load(): |
|
|
|
global grille |
|
|
|
new_state=askopenfile(mode="r",initialdir = "/",title = "Choisir un fichier",filetypes = [("Text files","*.txt*")]) |
|
|
|
|
|
|
|
new_state=new_state.readline() |
|
|
@ -239,7 +158,7 @@ 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=new_state |
|
|
|
|
|
|
|
creer_care (len(new_state),len(new_state[0])) |
|
|
|
|
|
|
|
##########Programme principale############## |
|
|
@ -283,4 +202,8 @@ save.grid(row=10,column=6) |
|
|
|
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) |
|
|
|
fenetre.mainloop() |