Browse Source

Création custom du canva + nombre d'itération +vitesse réglable cc Arno

master
philippot.m 2 weeks ago
parent
commit
4c8c39fbe6
  1. 114
      jeu_de_la_vie.py

114
jeu_de_la_vie.py

@ -2,7 +2,7 @@ from tkinter import *
from tkinter.filedialog import askopenfile
from copy import deepcopy
from time import sleep
from random import randint
f_cont=False
class Grille:
def __init__(self,unnb_ligne, unnb_col,unvivante,uniteration,unmorte,uncanva,unfenetre):
@ -18,6 +18,13 @@ class Grille:
self.fen=unfenetre
self.iteration=uniteration
def soupe_primordiale(self):
self.grille=[]
for ligne in range(0,self.ligne):
self.grille.append([])
for colonne in range(0,self.colonne):
self.grille[ligne].append(randint(0,1))
def creer_grille(self):
self.grille=[]
for ligne in range(0,self.ligne):
@ -40,12 +47,12 @@ class Grille:
self.lst_c.append([])
###############création_carré##########
carre_col,carre_ligne=1246//self.colonne,795//self.ligne
carre_col,carre_ligne=new_width.get()//self.colonne,new_height.get()//self.ligne
if carre_col<carre_ligne:
self.taille_carre=carre_col
else:
self.taille_carre=carre_ligne
for ligne in range(len(self.grille)):
for colone in range(len(self.grille[0])):
if self.grille [ligne][colone] == 1:
@ -59,6 +66,7 @@ class Grille:
fill ="white")
self.lst_c[ligne].append(new_c)
self.fen.update()
def affiche_grille(self):
for ligne in range (len(self.grille)):
for col in range (len(self.grille[0])):
@ -77,22 +85,6 @@ class Grille:
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_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
# self.can.itemconfig(self.lst_c[num_ligne][num_colone],fill ="white")
# self.fen.update()
#
# elif self.grille[num_ligne][num_colone]==1:
# self.grille[num_ligne][num_colone]=0
# self.can.itemconfig(self.lst_c[num_ligne][num_colone],fill ="black")
# self.fen.update()
#self.affiche_grille ()
def gen_suiv(self):
copy_grille=deepcopy(self.grille)
@ -132,11 +124,15 @@ class Grille:
vie=0
self.iteration=self.iteration+1
print(self.iteration)
nb_it_lab.set("Nombre d'itération:"+str(self.iteration))
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
nb_it_lab.set("Nombre d'itération:"+str(self.iteration))
self.affiche_grille ()
@ -151,7 +147,7 @@ def bouton_grille():
def change(event):
num_colone=event.x//grille.taille_carre
num_ligne=event.y//grille.taille_carre
if 0<event.x<1246 and 0<event.y<795:
if 0<event.x<new_width.get() and 0<event.y<new_height.get():
if grille.grille[num_ligne][num_colone]==0:
grille.grille[num_ligne][num_colone]=1
zone.itemconfig(grille.lst_c[num_ligne][num_colone],fill ="black")
@ -161,6 +157,15 @@ def change(event):
grille.grille[num_ligne][num_colone]=0
zone.itemconfig(grille.lst_c[num_ligne][num_colone],fill ="white")
fenetre.update()
def taille_can():
zone.config(height=new_height.get(),width=new_width.get())
def bouton_soupe():
grille.detruire_ancien_carre()
grille.ligne=nb_ligne_choisi.get()
grille.colonne=nb_colonne_choisi.get()
grille.soupe_primordiale()
grille.creer_carre(nb_ligne_choisi.get(),nb_colonne_choisi.get())
######Fonction de génération##########
def gen_suiv():
@ -174,7 +179,7 @@ def gen_cont():
f_cont=True
while f_cont==True:
grille.gen_suiv()
sleep(0.01)
sleep(float(vitesse.get()))
if f_cont==False:
break
def stop():
@ -208,56 +213,81 @@ def load():
grille.colonne=len(grille.grille[0])
grille.creer_carre(len(grille.grille),len(grille.grille[0]))
##########Programme principale##############
fenetre = Tk()
fenetre.title("Jeu Amoa")
zone = Canvas(fenetre , height =795 , width =1246 , bg="#ffffff")
zone.grid(row=1,column=1,rowspan=9,columnspan=9)
zone = Canvas(fenetre , height =0 , width =0 , bg="#ffffff")
zone.grid(row=1,column=1,rowspan=1,columnspan=9)
##################Grille####################
##################Grille/Canvas####################
nb_ligne_choisi=IntVar()
mess_ligne=Label(text="Nombre de ligne choisi")
mess_ligne.grid(row=10,column=1)
lab_ligne=Label(text="Nombre de ligne choisi")
lab_ligne.grid(row=2,column=1)
choix_l=Entry(textvariable=nb_ligne_choisi,bd=5)
choix_l.grid(row=11,column=1)
choix_l.grid(row=3,column=1)
nb_colonne_choisi=IntVar()
mess_col=Label(text="Nombre de colone choisi")
mess_col.grid(row=10,column=3)
lab_col=Label(text="Nombre de colone choisi")
lab_col.grid(row=2,column=3)
choix_col=Entry(textvariable=nb_colonne_choisi,bd=5)
choix_col.grid(row=11,column=3)
choix_col.grid(row=3,column=3)
bout_grille=Button(text="Créer la grille",command= bouton_grille)
bout_grille.grid(row=3,column=2)
bout_soupe=Button(text="Créer une soupe primordiale",command= bouton_soupe)
bout_soupe.grid(row=2,column=2)
new_height=IntVar()
lab_haut=Label(text="Hauteur choisi")
lab_haut.grid(row=4,column=1)
choix_haut=Entry(textvariable=new_height,bd=5)
choix_haut.grid(row=5,column=1)
bout_g=Button(text="Créer la grille",command= bouton_grille)
bout_g.grid(row=11,column=2)
new_width=IntVar()
lab_long=Label(text="Longueur choisi")
lab_long.grid(row=4,column=3)
choix_long=Entry(textvariable=new_width,bd=5)
choix_long.grid(row=5,column=3)
bout_can=Button(text="Créer le canvas",command= taille_can)
bout_can.grid(row=5,column=2)
################Génération##################
suivant=Button(text="Prochaine génération",command= gen_suiv)
suivant.grid(row=10,column=4)
suivant.grid(row=2,column=4)
precedent=Button(text="génération précédente",command= gen_prev)
precedent.grid(row=11,column=4)
precedent.grid(row=3,column=4)
gen_continue=Button(text="Génération en continue",command= gen_cont)
gen_continue.grid(row=10,column=5)
gen_continue.grid(row=2,column=5)
stop=Button(text="Stop",command=stop)
stop.grid(row=11,column=5)
stop.grid(row=3,column=5)
vitesse=StringVar()
lab_vit=Label(text="Vitesse entre les génération (en s)")
lab_vit.grid(row=2,column=7)
choix_vit=Entry(textvariable=vitesse,bd=5)
choix_vit.grid(row=3,column=7)
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)
lab_cellule_vie=Label(textvariable=nb_vivante_lab).grid(row=2,column=8)
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_cellule_morte=Label(textvariable=nb_morte_lab).grid(row=3,column=8)
lab_iteration=Label(text="Nombre d'itération:0").grid(row=10,column=8)
nb_it_lab=StringVar()
nb_it_lab.set("Nombre d'itération:0")
lab_iteration=Label(textvariable=nb_it_lab).grid(row=2,column=9)
################Système sauvegarde##########
save=Button(text="Sauvegarder",command=save)
save.grid(row=10,column=6)
save.grid(row=2,column=6)
load=Button(text="Charger",command=load)
load.grid(row=11,column=6)
load.grid(row=3,column=6)
zone.bind_all('<Button-3>', change)
grille=Grille(0,0,

Loading…
Cancel
Save