|
|
@ -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, |
|
|
|