IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de déplacement des rectangles


Sujet :

Python

  1. #1
    Candidat au Club
    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 : 3
    Points
    3
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    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 : 3
    Points
    3
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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. [Symfony2][Calendrier] problème de déplacement des événements dans wdCalendar.
    Par basboustunis dans le forum EDI, CMS, Outils, Scripts et API
    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