1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
from tkinter import *
from random import randrange as alea
def cellule(posX, posY, liste):
"""Création d'une cellule"""
longTuple = 0
can.create_oval(posX, posY, posX+10,
posY+10, fill = "red", tag = "Cellule")
numIdent = can.find_withtag("Cellule")
longTuple = len(numIdent)-1
for donnee in ("Cellule"+str(numIdent[longTuple]),0 , 0, posX, posY):
liste.append(donnee)
return liste
def moveCellule(nbIdent, liste):
"""Gère les mouvements de la cellule"""
adresse = liste.index("Cellule" + str(nbIdent))
posX1 = alea(-2, 3)
posY1 = alea(-2, 3)
can.move(nbIdent, posX1, posY1)
liste[adresse + 3] += posX1
liste[adresse + 4] += posY1
def reproduction(nbIdent, liste):
"""Gère la reproduction des cellules"""
if "Cellule"+str(nbIdent) in listeCellule:
adresse = liste.index("Cellule" + str(nbIdent))
if liste[adresse+1] == 10:
posAleaX = alea(-20, 21)
posAleaY = alea(-20, 21)
cellule(liste[adresse+3] + posAleaX,
liste[adresse+4] + posAleaY, liste)
liste[adresse+1] = 0
liste[adresse+2] += 1
if liste[adresse+2] == 2:
can.delete(nbIdent)
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
else:
liste[adresse+1] += 1
def collision(nbIdent, liste):
"""Gère les collisions entre cellule"""
collision = 0
liste2 = liste[:]
if "Cellule" + str(nbIdent) in liste:
adresse = liste.index("Cellule" + str(nbIdent))
liste2.remove(liste2[adresse])
liste2.remove(liste2[adresse])
liste2.remove(liste2[adresse])
liste2.remove(liste2[adresse])
liste2.remove(liste2[adresse])
for i in range(liste[adresse+3], liste[adresse+3]+8):
for y in range(liste[adresse+4], liste[adresse+4]+8):
if i in liste2 and y in liste2:
collision = 1
if collision == 1:
can.delete(nbIdent)
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
liste.remove(liste[adresse])
collision = 0
def gestionCellule():
"""Appel toute les fonctions pour une cellule donné"""
global listeCellule
for nbIdent in can.find_withtag("Cellule"):
moveCellule(nbIdent, listeCellule)
reproduction(nbIdent, listeCellule)
collision(nbIdent, listeCellule)
print (listeCellule)
def animation():
"""Gère la vitesse d'animation"""
gestionCellule()
root.after(50, animation)
#----------------------------------------------------------------------------#
listeCellule = []
root = Tk()
can = Canvas(root, bg = "black", width = 600, height = 600)
can.pack()
Button(root, text = "Quit", bg = "light grey",
command = root.destroy).pack(side = BOTTOM, fill = "x")
listeCellule = cellule(300, 300, listeCellule)
animation()
root.mainloop() |
Partager