Browse Source

génération de grille fonctionnel

master
philippot.m 3 weeks ago
parent
commit
4312e1f5c9
  1. 153
      jeu_de_la_vie.py

153
jeu_de_la_vie.py

@ -2,13 +2,12 @@ from tkinter import *
from tkinter.filedialog import askopenfile from tkinter.filedialog import askopenfile
from copy import deepcopy from copy import deepcopy
from time import sleep from time import sleep
lst_c=[]
lst_grille=[]
f_cont=[] f_cont=[]
class Grille: class Grille:
def __init__(self,unnb_ligne, unnb_col,unvivante,unmorte,uncanva,unfenetre): def __init__(self,unnb_ligne, unnb_col,unvivante,unmorte,uncanva,unfenetre):
self.ligne=unnb_ligne self.ligne=unnb_ligne
self.colone=unnb_col self.colonne=unnb_col
self.lst_grille=[] self.lst_grille=[]
self.grille=[] self.grille=[]
self.taille_carré=0 self.taille_carré=0
@ -19,34 +18,36 @@ class Grille:
self.fen=unfenetre self.fen=unfenetre
def creer_grille(self): def creer_grille(self):
for ligne in range(0,nb_ligne): self.grille=[]
for ligne in range(0,self.ligne):
self.grille.append([]) self.grille.append([])
for colonne in range(0,nb_colonne): for colonne in range(0,self.colonne):
self.grille[ligne].append(0) 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): def creer_carre(self,nb_ligne,nb_col):
self.ligne=nb_ligne self.ligne=nb_ligne
self.colone=nb_col 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é########## ###############création_l_carré##########
self.lst_c=[] self.lst_c=[]
for ligne in range(len(self.grille)): for ligne in range(len(self.grille)):
lst_c.append([]) self.lst_c.append([])
###############création_carré########## ###############création_carré##########
carre_col,carre_ligne=1246//self.colonne,795//self.ligne carre_col,carre_ligne=1246//self.colonne,795//self.ligne
if carre_col<carré_ligne: if carre_col<carre_ligne:
self.taille_carre=carré_col self.taille_carre=carre_col
else: else:
self.taille_carre=carré_ligne self.taille_carre=carre_ligne
for ligne in range(len(grille)): for ligne in range(len(self.grille)):
for colone in range(len(grille[0])): for colone in range(len(self.grille[0])):
new_c=zone.create_rectangle( colone *self.taille_carre , ligne *self.taille_carre , 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 , colone*self.taille_carre+self.taille_carre , ligne*self.taille_carre +self.taille_carre ,
fill ="white") fill ="white")
self.lst_c[ligne].append(new_c) self.lst_c[ligne].append(new_c)
@ -56,10 +57,10 @@ class Grille:
for ligne in range (len(self.grille)): for ligne in range (len(self.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:
zone.itemconfig(self.lst_c[ligne][col],fill ="black") self.can.itemconfig(self.lst_c[ligne][col],fill ="black")
self.fen.update() self.fen.update()
else: else:
zone.itemconfig(self.lst_c[ligne][col],fill ="white") self.can.itemconfig(self.lst_c[ligne][col],fill ="white")
self.fen.update() self.fen.update()
def change(self,coord_x,coord_y): def change(self,coord_x,coord_y):
@ -76,7 +77,7 @@ class Grille:
copy_grille=deepcopy(grille) copy_grille=deepcopy(grille)
self.lst_grille.append(copy_grille) self.lst_grille.append(copy_grille)
for ligne in range(0,len(self.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 vie=0
for ligne in range (0,len(self.grille)): for ligne in range (0,len(self.grille)):
for col in range (0,len(self.grille[0])): for col in range (0,len(self.grille[0])):
@ -93,123 +94,42 @@ class Grille:
elif copy_grille[ligne][col]==0 and vie==3: elif copy_grille[ligne][col]==0 and vie==3:
self.grille[ligne][col]=1 self.grille[ligne][col]=1
vie=0 vie=0
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)
affiche_grille () self.affiche_grille ()
########Fonction interface utilisateur########### ########Fonction interface utilisateur###########
def bouton_grille(): def bouton_grille():
global nb_ligne grille.detruire_ancien_carre()
global nb_colonne grille.ligne=nb_ligne_choisi.get()
nb_ligne=nb_ligne_choisi.get() print(grille.ligne)
nb_colonne=nb_colonne_choisi.get() grille.colonne=nb_colonne_choisi.get()
creer_grille() print(grille.colonne)
grille=Grille(nb_ligne_choisi.get(), nb_colonne_choisi.get(), grille.creer_grille()
0, nb_ligne*nb_colonne, grille.creer_carre(nb_ligne_choisi.get(),nb_colonne_choisi.get())
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)
def creer_care(nb_ligne,nb_colonne): def creer_care(nb_ligne,nb_colonne):
global lst_c pass
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 ()
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): def change(event):
global grille pass
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 ()
######Fonction de génération########## ######Fonction de génération##########
def gen_suiv(): 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 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 ()
def gen_prev(): def gen_prev():
global grille pass
global lst_grille
grille=deepcopy(lst_grille[len(lst_grille)-1])
lst_grille.pop(len(lst_grille)-1)
afficheCarte ()
def gen_cont(): def gen_cont():
global f_cont global f_cont
f_cont=True f_cont=True
while f_cont==True: while f_cont==True:
gen_suiv() grille.gen_suiv()
sleep(0.1) sleep(0.1)
if f_cont==False: if f_cont==False:
break break
@ -229,7 +149,6 @@ def save():
else: else:
state.write(str(grille[ligne][col])+" ") state.write(str(grille[ligne][col])+" ")
def load(): def load():
global grille
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*")])
new_state=new_state.readline() new_state=new_state.readline()
@ -239,7 +158,7 @@ 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=new_state
creer_care (len(new_state),len(new_state[0])) creer_care (len(new_state),len(new_state[0]))
##########Programme principale############## ##########Programme principale##############
@ -283,4 +202,8 @@ save.grid(row=10,column=6)
load=Button(text="Charger",command=load) 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,
0,0,
zone,fenetre)
fenetre.mainloop() fenetre.mainloop()
Loading…
Cancel
Save