Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope
Python & Zope Forum d'entraide sur la programmation en Python et Zope. Avant de poster -> F.A.Q Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 15h44   #1
cornufreud
Invité de passage
 
Femme
Étudiant
Inscription : décembre 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2012
Messages : 2
Points : 0
Points : 0
Par défaut Problème de déplacement des rectangles

Bonjour à tous,

J'ai quelques petits problèmes, je suis en train de développer un Space Invaders sur Space Python.

J'avais fait un programme beaucoup trop redondant et répétitif au niveau du code.

Le professeur m'a donc demandé de simplifier le code et de faire un programme plus léger en modifiant les coordonnées avec "canvas.coords".

Pourtant ça ne marche pas.

Est ce que par hasard vous sauriez comment m'aider ?

Voici mon code (original) :

Citation:
# Créé par rdesplat, le 19/11/2012
from __future__ import division
from lycee import *
import Tkinter

fenetre = Tkinter.Tk()
fond=Tkinter.Canvas(fenetre, width=400, height=300, background='darkgray')

x = 0
y = 0
u = 340
v = 20
a = 350
b = 10

def createrectangle(u,v,a,b,c1,c2):
fond.create_rectangle(x+u,y+v,x+a,y+b,fill=c1,outline=c2)
fond.create_rectangle(x+u-3,y+v,x+a,y+b,fill=c1,outline=c2)

def createennemi():
fond.create_rectangle

fond.pack()
# LIGNE 1

# l1 h2 l2 h1
ca='dark green'
cb='gray'

"""
Il faut impérativement créer une fonction de dessin des aliens
pour éviter la redondance du code et pouvoir faire des modifs facilement
"""

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite


u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

#Ligne 2

x = 0
y = 0
u = 340
v = 20
a = 350
b = 10


# l1 h2 l2 h1
ca='dark green'
cb='gray'

v = v+20
b = b+20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite

u = u-20
a = a-20

createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite




#VAISSEAU DU HEROS

# l1 h2 l2 h1
fond.create_rectangle(185,280,190,260,fill='gray',outline='black')#Tireur gauche
fond.create_rectangle(210,280,215,260,fill='gray',outline='black')#Tireur droite
# xbas ybas xsommet ysommet xbasdroite y basdroite
fond.create_polygon(185, 280, 200, 250, 215, 280, fill="black", outline="gray")
# l1 h2 l2 h1
fond.create_oval(185,286,193,278,fill='yellow', outline="red")#Propulseur gauche
fond.create_oval(207,286,215,278,fill='yellow', outline="red")#Propulseur droit
fond.create_oval(192,292,208,278,fill='yellow', outline="red")#Effet vitesse
# x1 y1 x2 y2
fond.create_line(187,245,187,255, fill='red')#Tir gauche
fond.create_line(212,245,212,255, fill='red')#Tir droite

fenetre.mainloop()
Et celui que j'ai essayé de changer :

Citation:
# Créé par rdesplat, le 19/11/2012
from __future__ import division
from lycee import *
import Tkinter

fenetre = Tkinter.Tk()
fond=Tkinter.Canvas(fenetre, width=400, height=300, background='darkgray')

x = 0
y = 0
u = 340
v = 20
a = 350
b = 10

def createrectangle(u,v,a,b,c1,c2):
L=[]
L.append(fond.create_rectangle(x+u,y+v,x+a,y+b,fill=c1,outline=c2))
fond.create_rectangle(x+a,y+v+3,x+a+3,y+b+3,fill=c1,outline=c2)
return L

def deplacerect(L,):
fond.coords(L[0], u-20, a+20)

def brasgauche(u,v,a,b,c1,c2):
L=[]
fond.create_rectangle(x+u-3,y+v+3,x+u,y+b+3,fill=c1,outline=c2)

def coord():
fond.coords(createrectangle, u-20, a+20)

fond.pack()
ca='dark green'
cb='gray'


# LIGNE 1

# l1 h2 l2 h1


createrectangle(u,v,a,b,ca,cb)#deuxième 1

createrectangle(u,v,a,b,ca,cb)#deuxième 1




#VAISSEAU DU HEROS

# l1 h2 l2 h1
fond.create_rectangle(185,280,190,260,fill='gray',outline='black')#Tireur gauche
fond.create_rectangle(210,280,215,260,fill='gray',outline='black')#Tireur droite
# xbas ybas xsommet ysommet xbasdroite y basdroite
fond.create_polygon(185, 280, 200, 250, 215, 280, fill="black", outline="gray")
# l1 h2 l2 h1
fond.create_oval(185,286,193,278,fill='yellow', outline="red")#Propulseur gauche
fond.create_oval(207,286,215,278,fill='yellow', outline="red")#Propulseur droit
fond.create_oval(192,292,208,278,fill='yellow', outline="red")#Effet vitesse
# x1 y1 x2 y2
fond.create_line(187,245,187,255, fill='red')#Tir gauche
fond.create_line(212,245,212,255, fill='red')#Tir droite

fenetre.mainloop()

Merci à tout ceux qui pourront m'aider,

Cordialement,
cornufreud

Citation:
"La définition de l'éternité, c'est la jouissance infinie de l'existence" - Hugo Cornuel
cornufreud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 20h03   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 719
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 719
Points : 4 559
Points : 4 559
Salut,

Il serait peut être judicieux de regrouper les séquences d'opérations associées à une opération sur un objet.
Exemple pour:
Code :
1
2
3
4
5
6
u = u-20
a = a-20
 
createrectangle(u,v,a,b,ca,cb)#deuxième 15
createrectangle(u-3,v+3,u,b+3,ca,cb)#gauche
createrectangle(a,v+3,a+3,b+3,ca,cb)#droite
Si cela crée un alien, pourquoi ne pas avoir une fonction create_alien(canvas, x, y)?

Plutôt que de répéter la séquence, une imbrication de boucle for:
Code :
1
2
3
for x in range(...):
     for y in range(...):
          create_alien(canvas, x, y)

Bon courage
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 15h42   #3
cornufreud
Invité de passage
 
Femme
Étudiant
Inscription : décembre 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2012
Messages : 2
Points : 0
Points : 0
Oui pour alien :

c'est ce que j'ai fait ici non ?

def createrectangle(u,v,a,b,c1,c2):
L=[]
L.append(fond.create_rectangle(x+u,y+v,x+a,y+b,fill=c1,outline=c2))
fond.create_rectangle(x+a,y+v+3,x+a+3,y+b+3,fill=c1,outline=c2)
return L


Cette idée de :
for x in range(...):
for y in range(...):
create_alien(canvas, x, y)

Est excellente mais je n'arrive pas à l'appliquer à mon programme
cornufreud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 15h59   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 719
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 719
Points : 4 559
Points : 4 559
Citation:
Envoyé par cornufreud Voir le message
c'est ce que j'ai fait ici non ?
où est la méthode create_alien prenant canvas et x, y en arguments qui dessine un alien sur le canvas à la position (x, y)?
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h08.


 
 
 
 
Partenaires

Hébergement Web