p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    4
    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 : 4
    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) :

    # 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 :

    # 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

    "La définition de l'éternité, c'est la jouissance infinie de l'existence" - Hugo Cornuel

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 601
    Points : 10 168
    Points
    10 168

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in range(...):
         for y in range(...):
              create_alien(canvas, x, y)

    Bon courage
    - W
    Architectures Post-Modernes

  3. #3
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    4
    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 : 4
    Points : 0
    Points
    0

    Par défaut

    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

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 601
    Points : 10 168
    Points
    10 168

    Par défaut

    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

Discussions similaires

  1. [XL-2010] Problème lors des déplacements des fichiers sources
    Par lomig29 dans le forum Excel
    Réponses: 6
    Dernier message: 28/06/2014, 15h30
  2. Réponses: 0
    Dernier message: 23/04/2014, 15h54
  3. [WD-2003] PUBLIPOSTAGE, Problème de déplacement des champs en mode publipostage
    Par Vin_SuFu_R@T dans le forum Word
    Réponses: 2
    Dernier message: 25/06/2010, 16h20
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo