Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  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
    5 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 465
    Points : 8 261
    Points
    8 261

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

  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
    5 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 465
    Points : 8 261
    Points
    8 261

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •