voila j'ai une question, j'ai créer des oval ( un nombre qui change à chaque fois entre 1 et 6 ) et je voudrais qu'il se déplace tous mais pas de la même façon, fin genre qu'il vont pas tous a gauche ect...
je leur es attribué lors de leur création un numéro dans une liste
from tkinter import *
from random import *
def Mouvement():
global dx, dy, cel_nb
j = len(cel_nb)
for i in range(0, j):
k[i] = randint(0,8)
print(k)
if k[i] == 1 or k[i] == 5:
dx = pas
if k[i] == 2 or k[i] == 6:
dx = -pas
if k[i] == 3 or k[i] == 7:
dy = pas
if k[i] == 4 or k[i] == 8:
dy = -pas
c.move(cel_nb[i], dx, dy)
f.after(50, Mouvement)
def Cellule():
x1, x2 = 20, 40
cel_one = randint(0,6)
for i in range(0, cel_one):
cel_nb.append([c.create_rectangle(x1, 20, x2, 40, fill = "white", outline = "white")])
x1 += 30
x2 += 30
j = len(cel_nb)
for i in range(0,j) :
k.append(i)
print('k = ', k)
f = Tk()
##--Variables--##
pas = 20
dx, dy = pas, pas
cel_nb = []
k = []
c = Canvas(f, bg='dark grey', width = 600, height = 600)
c.pack()
Cellule()
print('nb de cellule = ', cel_nb)
Mouvement()
f.mainloop()
sauf que, ca ne marche pas :/ si vous avez une idée je suis preneur
Si j'ai bien compris tu souhaites créer plusieurs points qui se déplacent aléatoirement dans une grille ?
Je te propose le plan suivant qui me semble plutôt pas mal.
1. Crée une matrice (avec numpy par exemple) qui représentera ta "grille de jeu";
2. Essaye de lier cette matrice pour créer une grille dans ta fenêtre tkinter;
3. Crée tous les points que tu veux dans ta grille (avec create_rectangle ou create_oval), et place les comme tu veux sur la grille (avec des coordonnées (x,y));
4. Crée une fonction random_movement qui, à partir des coordonnées actuelles de l'oval (ou rectangle) en question va renvoyer des coordonnées aléatoires en regardant les cases qui il y a à coté.
En espérant que mes explications sont claire. Et normalement tu obtiens ce que tu veux (à moins que j'ai mal compris ton problème).
Je vous remercie pour vos réponse, PascalOrtiz oui en effet c’était juste un problème de placement de mon After, merci
Naps94, je vais regarder si en faisant avec numpy ça me facilite les choses, après je ne les jamais utilisé donc je vais voir, la je fait sous Tkinter, mais après je vais passer sous Pygame
j'ai un autre problème, je voudrais quelle ne dépasse pas l'écran, j'ai donc mis ça :
def Mouvement():
global dx, dy, cel_nb
j = len(cel_nb)
for i in range(0, j):
co[i] = c.coords(cel_nb[i])
k[i] = randint(0,8)
print(k)
if k[i] == 1 or k[i] == 5 and co[i][2] <= 800:
dx = pas
if k[i] == 2 or k[i] == 6 and co[i][0] >= 0:
dx = -pas
if k[i] == 3 or k[i] == 7 and co[i][1] <= 600:
dy = pas
if k[i] == 4 or k[i] == 8 and co[i][0] >= 0:
dy = -pas
c.move(cel_nb[i], dx, dy)
f.after(25, Mouvement)
Peut-être ceci : tu as écrit des prédicats du genre A or B and C qui s'interprète en Python A or (B and C) alors que tu souhaites plutôt (A or B) and C.
def Mouvement():
global dx, dy, cel_nb
j = len(cel_nb)
for i in range(0, j):
co[i] = c.coords(cel_nb[i])
k[i] = randint(0,8)
print(k)
if co[i][2] <= 600 and ( k[i] == 1 or k[i] == 5 ):
dx = pas
if co[i][0] >= 0 and ( k[i] == 2 or k[i] == 6 ) :
dx = -pas
if co[i][1] <= 600 and ( k[i] == 3 or k[i] == 7 ) :
dy = pas
if co[i][0] >= 0 and ( k[i] == 4 or k[i] == 8 ) :
dy = -pas
print(co[0])
c.move(cel_nb[i], dx, dy)
f.after(100, Mouvement)
j'ai pensais à un truc je l'essaye demain si ca marche
- Edité par Ertale 19 janvier 2020 à 19:43:23
Python mouvement d'IA
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères