Bonjour,

Voici mon problème, j'essaie de créer un petit simulateur de cellules qui se reproduises dans une fenêtre.

Pour créer, bouger et reproduire, j'ai pas de problème sa marche si ce n'est qu'avec plusieurs cellule sur l'écran le jeu ralenti beaucoup. Mon problème c'est ma fonction collision je pense.

Quand je met des prints pour voir ma liste (qui est normalement imprimer comme ceci : "Cellule1", compteur de cycle, compteur de reproduction, position en X, position en Y, "Cellule2", ...) et bien je vois que je perd des données, ou bien elle se sont mal déplacer comme ceci ("Cellule1", 0, 0, 300, 300, "Cellule2", 0, 0, 310, 310, 'ici il manque mes infos'0, 355, 355, ...)

J'ai refais le code de plein de manière possible, j'ai analysé encore et encore... Je ne comprend pas pourquoi sa fais sa.

C'est peut-être tous simplement ma structure qui est pas bonne...

Je vous laisse mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()