Partage
  • Partager sur Facebook
  • Partager sur Twitter

copie du jeu Space Invador sous python avec Tkinte

problème au niveau de ma fonction pour tirer

    28 décembre 2016 à 18:11:07

    Bonjour je suis embêté par un problème soi disant de déclaration de variable . Je souhaite réaliser une copie de Space Invador mais lorsque je veux tirer la fonction qui créer le missile tte les 5 ms ne marche pas voici le script:

    ---------------------------------------------------------------------------------------------------------------------------

    from Tkinter import *
    import math,random
    mw=Tk()
    def clavier(event):  #fonction permettant de récupérer ce queje tape au clavier
        global PosX,PosY
        touche=event.keysym

        if touche=='Right':
            PosX+= 20
            if PosX==860:
                PosX-=20
        if touche=='Left':
            PosX-= 20
            if PosX==0:
                PosX+=20
        if touche=='space':
            tirer(PosX,PosY)
        Canevas.coords(Vaisseau,PosX-10,PosY-10,PosX+10,PosY+10)
       
    def tirer(x,y): # ce qui me permet de tirer tout d'abord création d'un canevas puis création d'autre
        global missile
        missile=Canevas.create_rectangle(x-5,y-10,x+5,y+10,fill='white')
        Canevas.focus_set()
        Canevas.grid(row=1,column=1)
        mouvement_tir()
       
    def mouvement_tir():#fonction qui pose problème
        print "go"
        global PosTirx
        global PosTiry
        if PosTiry+10+vitesse>Hauteur:
            missile.destroy
        else:
            PosTiry-=10
            Canevas.coords(missile,PosTirx-10,PosTiry-20,PosTirx+10,PosTiry+20)
            mw.after(100,mouvement_tir)

       

    def commencer():
        Canevas.delete(ALL)
        vaisseau()
        alien(PosAx,PosAy)
       
       
    def vaisseau():
        PosX=800
        PosY=800
        global Vaisseau
        Vaisseau=Canevas.create_rectangle(PosX-10,PosY-10,PosX+10,PosY+10,fill='white')
        Canevas.focus_set()
        Canevas.bind('<Key>',clavier)
        Canevas.grid(row=1,column=1)
       
    def score(point):
        point+=20
        return point
       
    def alien(x,y): #création d'un Alien
        global Alien
        Alien=Canevas.create_rectangle(x-20,y-20,x+20,y+20,fill='red')
        Canevas.focus_set()
        Canevas.grid(row=1,column=1)
        mouvementA()
    def mouvementA(): #fonction permettant àl'Alien de bouger
        global PosAx
        global PosAy
        global vitesse
        if PosAx+20+vitesse>Largeur:
            PosAx=2 * (Largeur - 20)-PosAx
            vitesse=-vitesse
        if PosAx-20+vitesse<0:
            PosAx=2*(20)-PosAx
            vitesse=-vitesse
        PosAx+=vitesse
        Canevas.coords(Alien,PosAx-20,PosAy-20,PosAx+20,PosAy+20)
        mw.after(500,mouvementA)
       

          
       

     
       

    PosX=800
    PosY=800
    #Création d'un interface graphique
    Largeur=1000
    Hauteur=1000
    Canevas=Canvas(mw,width=Largeur,height=Hauteur,bg='black')
    Canevas.grid(row=1,column=1)
    Canevas.focus_set()
    Canevas.bind('<Key>',clavier)
    buttonCommencer=Button(mw,text="Let's go",command=commencer)
    buttonCommencer.grid(row=1,column=2)

    buttonQuit=Button(mw,text="goodbye",command=mw.destroy)
    buttonQuit.grid(row=1,column=3)
    point_ini=0
    text_tscore=Canevas.create_text(100,8,text="Score actuel" ,fill="white")
    text_score=Canevas.create_text(160,8,text=score(point_ini) ,fill="white")
    PosAx,PosAy=20,20
    vitesse=20
    mw.mainloop()

    ---------------------------------------------------------------------------------

    mais voici ce que la console me renvoie lorsque j'appuie sur la touche espace :

    NameError: global name 'PosTiry' is not defined

    Merci de votre aide! :)

    • Partager sur Facebook
    • Partager sur Twitter
      28 décembre 2016 à 18:14:58

      c'est plutôt clair, tu ne définis pas ce que sont PosTirx et PosTiry
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2016 à 11:14:45

        Pourtant je les définit en mettant global PosTirx et PosTiry  dans ma fonction
        • Partager sur Facebook
        • Partager sur Twitter

        copie du jeu Space Invador sous python avec Tkinte

        × 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.
        • Editeur
        • Markdown