Voilà :
from tkinter import *
from tkinter import font
import time
nbLignes = 28
nbColonnes = 40
grille = []
cases = []
prochaineGeneration = False
doReset = False
def creerGrille(nLignes, nColonnes):
nouvelle_grille = []
for i in range(nLignes):
ligne = []
for j in range(nColonnes):
ligne.append(0)
nouvelle_grille.append(ligne)
return nouvelle_grille
def initInterface(racine):
global prochaineGeneration
prochaineGeneration = False
global doReset
doReset = False
global feuille
feuille = Frame()
feuille.parent = racine
feuille.grid(row = 0, column = 0)
feuille.size_x = nbColonnes
feuille.size_y = nbLignes
creerFenetre()
def creerFenetre():
global feuille
feuille.parent.title("Jeu de la Vie")
feuille.titre = Frame(feuille.parent)
feuille.titre.grid(row = 0, column = 0, columnspan = 4)
feuille.Font_titre = font.Font(family="Helvetica", size=14)
texte_titre = Label(feuille.titre, text = "Le Jeu de la Vie de Conway", font = feuille.Font_titre)
texte_titre.pack(side = TOP)
instructions = Label(feuille.titre, text = "Clickez sur les cellules pour configurer la situation de départ et appuyer sur démarrer.")
instructions.pack(side = BOTTOM)
creerPlateau()
global bouton_jouer
bouton_jouer = Button(feuille.parent, text = "Jouer", command = jouer)
bouton_jouer.grid(row = 1, column = 1, sticky = E)
global bouton_pause
bouton_pause = Button(feuille.parent, text = "Pause", state = DISABLED, command = pause)
bouton_pause.grid(row = 1, column = 2, sticky = E)
global bouton_reset
bouton_reset = Button(feuille.parent, text = "Reset", state = DISABLED, command = reset)
bouton_reset.grid(row =1 , column = 3, sticky = W)
def creerPlateau():
global feuille
global cases
feuille.plateau = Frame(
feuille.parent, width = feuille.size_x + 2, height = feuille.size_y + 2, borderwidth = 1, relief = SUNKEN)
feuille.plateau.grid(row = 2, column = 0, columnspan = 4)
for i in range(feuille.size_y + 2):
ligne = []
for j in range(feuille.size_x + 2):
ligne.append(Button(feuille.plateau, bg = "white", width = 2, height = 1))
cases.append(ligne)
for i in range(0, feuille.size_y):
for j in range(0, feuille.size_x):
cases[i][j].grid(row = i, column = j, sticky = W+E)
cases[i][j]['command'] = lambda i=i, j=j:changer_case(cases[i][j], i, j)
def desactiver_boutons():
global cases
global bouton_jouer
global bouton_reset
global bouton_pause
if cases[0][0] != DISABLED:
for i in range(nbLignes):
for j in range(nbColonnes):
cases[i][j].configure(state = DISABLED)
bouton_reset.configure(state = NORMAL)
bouton_pause.configure(state = NORMAL)
bouton_jouer.configure(state = DISABLED)
def activer_boutons():
global cases
global bouton_jouer
global bouton_reset
global bouton_pause
for i in range(nbLignes):
for j in range(nbColonnes):
cases[i][j].configure(state = NORMAL)
bouton_reset.configure(state = DISABLED)
bouton_pause.configure(state = DISABLED)
bouton_jouer.configure(state = NORMAL)
def changer_case(case, i , j):
global grille
if grille[i][j] == 0:
grille[i][j] = 1
else:
grille[i][j]=0
grilleVersPlateau()
def grilleVersPlateau():
global cases
for i in range(nbLignes):
for j in range(nbColonnes):
if grille[i][j] == 0:
cases[i][j]['bg']="white"
else:
cases[i][j]['bg']="black"
def timer():
global prochaineGeneration
global doReset
global grille
if prochaineGeneration:
grille = grilleSuivante()
grilleVersPlateau()
feuille.after(100, timer)
else:
if doReset:
grille = creerGrille(nbLignes, nbColonnes)
grilleVersPlateau()
doReset = False
activer_boutons()
def jouer():
print("Jouer !")
global prochaineGeneration
desactiver_boutons()
prochaineGeneration = True
timer()
def reset():
global prochaineGeneration
global doReset
print("Reset !")
prochaineGeneration = False;
doReset = True;
def pause():
global prochaineGeneration
if prochaineGeneration:
print("Pause !")
prochaineGeneration = False;
else:
print("Restart !")
prochaineGeneration = True;
timer();
def grilleSuivante():
global grille
nouvelleGrille = grille[:]
return nouvelleGrille
def nombreVoisinsVivants(x, y):
return 0
root = Tk()
initInterface(root)
grille = creerGrille(nbLignes, nbColonnes)
grilleVersPlateau()
root.mainloop()