Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème jeu python

    30 mars 2014 à 18:16:57

    Bonjour tout le monde !

    J'ai un problème avec un jeu que je suis actuellement en train de coder.

    Lorsque j'appuie sur F5 pour le lancer, le shell me met une erreur : "invalid syntax" ( et oui, je suis déja allé voir dans les erreur courantes ) et en me mettant en rouge le symbole "<" à la fin du code.

    Je précise que j'utilise python 3.3.2 64 bits Win 8.1 Pro

    from tkinter import *
    
    # Version 1 : Dessin du décors
    
    # Quand on appuie sur une touche, on l'ajoute à la liste
    def enfoncee(event) :
        if event.keysym not in Touches :
            Touches.append(event.keysym)
    
    # Quand on relache la touche, on la retire
    def relachee(event) :
        if event.keysym in Touches :
            Touches.remove(event.keysym)
    
    # Boucle principale :
    def animation() :
        global XS, YS
        if "Up" in Touches :
            YS = YS - 8
        if "Down" in Touches :
            YS = YS + 8
        if "Left" in Touches :
            XS = XS - 8
        if "Right" in Touches :
            XS = XS + 8
        Fond.coords(souris, XS, YS)
        fenetre.after(40,animation)
    
    
    def lisDecors(fichier):
        """
        Fonction qui lis le contenu du fichier fichier et la place dans
        la liste 2D Decors
        """
        filin = open(fichier,'r')
        R = [list(line.replace('\n','')) for line in filin]
        filin.close()
        return R
    
    def dessine():
        """
        Fonction qui dessine le plateau de jeu avec les données de la liste Decors
        """
        ligne, colonne = 0, 0
        while ligne < 17 :
          if Decors[ligne][colonne] == 'X' :
            Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW)
          if Decors[ligne][colonne] == 'T' :
            Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW)
          if Decors[ligne][colonne] == 'H' :
            Fond.create_image(colonne*40, ligne*40, image=H, anchor=NW)
          if Decors[ligne][colonne] == 'S' :    # Si on a une souris dans le décors
            XS, YS = colonne*40+20, ligne*40+20 # On initialise les coordonnées
            Decors[ligne][colonne] = ' '        # On l'efface du décors  
          colonne=colonne+1
          if colonne == 25 :
            colonne = 0
            ligne = ligne + 1
    
    
    fenetre=Tk()
    fenetre.resizable(width=False, height=False)
    
    fenetre.title("Projet Deadalus - Prepare 4 F3AR")
    fenetre.geometry("1200x680")
    
    # Chargement des fichiers :
    T=PhotoImage(file="images/FondS.gif")
    H=PhotoImage(file="images/FondH.gif")
    X=PhotoImage(file="images/brick.gif")
    
    
    # Dessin de l'interface
    Fond=Canvas(fenetre,width=1200,height=680,bg="#000000")
    Fond.place(x=0,y=0)
    Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
    Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
    Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
    
    #images de la souris
    sourisFICHIERG0=PhotoImage(file="images/sourisG0.gif") #fichier de la souris gauche position 0
    sourisFICHIERD0=PhotoImage(file="images/sourisD0.gif") #fichier de la souris droite position 0
    sourisFICHIERG1=PhotoImage(file="images/sourisG1.gif") #fichier de la souris gauche position 1
    sourisFICHIERD1=PhotoImage(file="images/sourisD1.gif") #fichier de la souris droite position 1
    sourisFICHIERM0=PhotoImage(file="images/sourisM0.gif") #fichier de la souris monte position 1
    sourisFICHIERM1=PhotoImage(file="images/sourisM1.gif") #fichier de la souris monte position 1
    sourisFICHIERT0=PhotoImage(file="images/sourisT0.gif") #fichier du souris qui tombe
    sourisFICHIERT1=PhotoImage(file="images/sourisT1.gif") #fichier du souris qui tombe
    XS, YS = 0, 0 # Position
    
    
    
    # On lis le décors. On garde les informations du décors dans une liste pour
    # pouvoir tester si on tombe, si on peut monter, ....
    Decors = lisDecors('niveaux/niv1.txt')
    dessine()
    
    souris=Fond.create_image(XS, YS, image=sourisFICHIERG0)
    
    # Surveillance des touches
    Touches = []
    fenetre.bind_all("<keypress>",enfoncee)
    fenetre.bind_all("<keyrelease>",relachee)
    
    animation()
    
    fenetre.mainloop()
    </keyrelease></keypress>
    


    Je vous passe le lien pour les ressources : https://www.dropbox.com/sh/f18hhixhesy8rud/zfrjtoRJ-q ( 'images' et 'niveaux' )

    Bonne journée à tous !

    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2014 à 19:09:55

      salut,

      on peut avoir l'erreur en entier?

      MaxFR68 a écrit:

      en me mettant en rouge le symbole "<" à la fin du code.

      euh.... lequel? celui là : </keyrelease></keypress> ou bien c'est une erreur quand tu as recopié le code?

      • Partager sur Facebook
      • Partager sur Twitter
      Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
        30 mars 2014 à 19:50:41

        o_O
        Est-ce que tu peux m’expliquer à quoi servent ces lignes : </keyrelease></keypress>?
        • Partager sur Facebook
        • Partager sur Twitter
        Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
        Anonyme
          30 mars 2014 à 20:36:12

          C'est ça de copier-coller du code que l'on ne comprend pas à partir d'un forum aussi buggé que celui-ci. ^^

          • Partager sur Facebook
          • Partager sur Twitter
            30 mars 2014 à 20:51:49

            ça tombe bien c'est pas un copier-coller d'un forum de ce site : j'ai pris des bouts de code d'un autre site ( http://prototheque.free.fr/ellipse/ )

            C'est "inspiré" du jeu JOEJOEY

            • Partager sur Facebook
            • Partager sur Twitter
              30 mars 2014 à 21:19:22

              enfin bref: supprime ces lignes, elle ne servent à rien : ce sont des résidus d'un code html qui n'auraient pas du apparaître.

              -
              Edité par pythan 30 mars 2014 à 21:19:56

              • Partager sur Facebook
              • Partager sur Twitter
              Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
                31 mars 2014 à 8:06:43

                MaxFR68 a écrit:

                ça tombe bien c'est pas un copier-coller d'un forum de ce site : j'ai pris des bouts de code d'un autre site

                Tu es bien conscient que la source de laquelle tu recopies du code n'a aucune incidence sur le fait que ce soit dangereux d'exécuter un code dont tu ne sais pas exactement ce qu'il fait sur ta machine ?

                -
                Edité par nohar 31 mars 2014 à 8:09:09

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  2 avril 2014 à 18:35:33

                  je ne suis pas un "noob".

                  je sais que c'est un jeu ( je vois bien ce que fais le code) qui vient d'un bouquin de programmation qui commente parfaitement bien le programme "dangereux".

                  PS : je précise que je suis en ISN ( mais que ma prof ( de math ) ne sait pas trop comment programmer avec tkinter, elle connapit surtout les applications mathématique du genre tri à bulle, calculs etc... )

                  Donc : ISN + Site d'un bouquin + R0XX0R = je sais ce que fait le code ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 avril 2014 à 18:46:18

                    Donc : ISN + Site d'un bouquin + R0XX0R = je sais ce que fait le code ;)

                    Et pourtant à aucun moment tu n'as relu le code pour te rendre compte que la dernière ligne était tout sauf du Python, et tu as préféré poster directement un thread sur ce forum plutôt qu'essayer de comprendre l'erreur très détaillée et évidente que t'a fait remonter l'interpréteur. Je ne dis pas ça pour te rabaisser, mais je suis quand même au regret de t'annoncer que c'est précisément ce qui définit un noob. :)

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Zeste de Savoir, le site qui en a dans le citron !
                      3 avril 2014 à 18:00:14

                      Merci O grand maître pour ton conseil ^^

                      ma noobitude n'est rien devant ta magnificience....

                      Blague à part, que donnerait le code en python ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 avril 2014 à 18:19:40

                        Blague à part, vire la dernière ligne. Ensuite tu pourras t'extasier devant ta roxxoritude.

                        -
                        Edité par nohar 3 avril 2014 à 18:29:48

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Zeste de Savoir, le site qui en a dans le citron !
                          3 avril 2014 à 21:20:15

                          J'ai modifié le code :

                          from tkinter import *
                          import pygame # Note : importation pygame pour pouvoir jouer des sons (musique)
                          
                          pygame.mixer.init()
                          pygame.mixer.music.load("alerte.wav") # musique d'intro
                          pygame.mixer.music.play() 
                          
                          # Version 1 : Dessin du décors
                           
                          # Quand on appuie sur une touche, on l'ajoute à la liste
                          def enfoncee(event) :
                              if event.keysym not in Touches :
                                  Touches.append(event.keysym)
                           
                          # Quand on relache la touche, on la retire
                          def relachee(event) :
                              if event.keysym in Touches :
                                  Touches.remove(event.keysym)
                           
                          # Boucle principale :
                          def animation() :
                              global XP, YP
                              if "Up" in Touches :
                                  YP = YP - 8
                              if "Down" in Touches :
                                  YP = YP + 8
                              if "Left" in Touches :
                                  XP = XP - 8
                              if "Right" in Touches :
                                  XP = XP + 8
                              Fond.coords(souris, XP, YP)
                              fenetre.after(40,animation)
                           
                           
                          def lisDecors(fichier):
                              """
                              Fonction qui lis le contenu du fichier fichier et la place dans
                              la liste 2D Decors
                              """
                              filin = open(fichier,'r')
                              R = [list(line.replace('\n','')) for line in filin]
                              filin.close()
                              return R
                           
                          def dessine():
                              """
                              Fonction qui dessine le plateau de jeu avec les données de la liste Decors
                              """
                              ligne, colonne = 0, 0
                              while ligne < 17 :
                                if Decors[ligne][colonne] == 'X' :
                                  Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW)
                                if Decors[ligne][colonne] == 'T' :
                                  Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW)
                                if Decors[ligne][colonne] == 'P' :    # Si on a un perso dans le décors
                                  XP, YP = colonne*40+20, ligne*40+20 # On initialise les coordonnées
                                  Decors[ligne][colonne] = ' '        # On l'efface du décors 
                                colonne=colonne+1
                                if colonne == 25 :
                                  colonne = 0
                                  ligne = ligne + 1
                           
                           
                          fenetre=Tk()
                          fenetre.resizable(width=False, height=False)
                           
                          fenetre.title("Projet Deadalus - Prepare 4 F3AR")
                          fenetre.geometry("1200x680")
                           
                          # Chargement des fichiers :
                          T=PhotoImage(file="images/FondS.gif")
                          X=PhotoImage(file="images/brick.gif")
                          P=PhotoImage(file="images/perso.gif") 
                           
                          # Dessin de l'interface
                          Fond=Canvas(fenetre,width=1200,height=680,bg="#000000")
                          Fond.place(x=0,y=0)
                          Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
                          Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
                          Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
                           
                          #images du perso
                          perso_normal=PhotoImage(file="images/perso.gif") #fichier du perso au départ
                          XP, YP = 0, 0 # Position
                           
                           
                           
                          # On lis le décors. On garde les informations du décors dans une liste pour
                          # pouvoir tester si on tombe, si on peut monter, ....
                          Decors = lisDecors('niveaux/niv1.txt')
                          dessine()
                           
                          départ=Fond.create_image(XP, YP, image=perso_normal)
                           
                          # Surveillance des touches
                          Touches = []
                          fenetre.bind_all("<keypress>",enfoncee)
                          fenetre.bind_all("<keyrelease>",relachee)
                           
                          animation()
                           
                          fenetre.mainloop()
                          

                          le probleme c'est qu'il me met une autre erreur :



                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            3 avril 2014 à 23:28:43

                            Et donc ? L'erreur me semble claire, pourtant je suis un vrai noob en Python et je ne connais pas Tkinter. Par contre, il y a un outil génial, c'est Google. Avec ça, je suis allé voir la doc de ta fonction qui te renvoie une erreur. Et j'ai trouvé comment régler ton problème. Tu devrais essayer, conseil d'éponge.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 avril 2014 à 14:55:41

                              J'ai résolu l'erreur du shell mais le problème est que quand j'appuie sur la touche de déplacement ( que ce soit la flèche haut, bas , droite ou gauche, le perso ne se déplace pas )

                              from tkinter import *
                              import pygame # Note : importation pygame pour pouvoir jouer des sons (musique)
                              
                              pygame.mixer.init()
                              pygame.mixer.music.load("alerte.wav") # musique d'intro
                              pygame.mixer.music.play() 
                              
                              # Version 1 : Dessin du décors
                               
                              # Quand on appuie sur une touche, on l'ajoute à la liste
                              def enfoncee(event) :
                                  if event.keysym not in Touches :
                                      Touches.append(event.keysym)
                               
                              # Quand on relache la touche, on la retire
                              def relachee(event) :
                                  if event.keysym in Touches :
                                      Touches.remove(event.keysym)
                               
                              # Boucle principale :
                              def animation() :
                                  global XP, YP
                                  if "KP_Up" in Touches :
                                      YP = YP - 8
                                  if "KP_Down" in Touches :
                                      YP = YP + 8
                                  if "KP_Left" in Touches :
                                      XP = XP - 8
                                  if "KP_Right" in Touches :
                                      XP = XP + 8
                                  Fond.coords(perso_normal, XP, YP)
                                  fenetre.after(40,animation)
                               
                               
                              def lisDecors(fichier):
                                  """
                                  Fonction qui lis le contenu du fichier fichier et la place dans
                                  la liste 2D Decors
                                  """
                                  filin = open(fichier,'r')
                                  R = [list(line.replace('\n','')) for line in filin]
                                  filin.close()
                                  return R
                               
                              def dessine():
                                  """
                                  Fonction qui dessine le plateau de jeu avec les données de la liste Decors
                                  """
                                  ligne, colonne = 0, 0
                                  while ligne < 17 :
                                    if Decors[ligne][colonne] == 'X' :
                                      Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW)
                                    if Decors[ligne][colonne] == 'T' :
                                      Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW)
                                    if Decors[ligne][colonne] == 'P' :    # Si on a un perso dans le décors
                                      XP, YP = colonne*40+20, ligne*40+20 # On initialise les coordonnées
                                      Decors[ligne][colonne] = ' '        # On l'efface du décors 
                                    colonne=colonne+1
                                    if colonne == 25 :
                                      colonne = 0
                                      ligne = ligne + 1
                               
                               
                              fenetre=Tk()
                              fenetre.resizable(width=False, height=False)
                               
                              fenetre.title("Projet Deadalus - Prepare 4 F3AR")
                              fenetre.geometry("1200x680")
                               
                              # Chargement des fichiers :
                              T=PhotoImage(file="images/FondS.gif")
                              X=PhotoImage(file="images/brick.gif")
                              P=PhotoImage(file="images/perso.gif") 
                               
                              # Dessin de l'interface
                              Fond=Canvas(fenetre,width=1200,height=680,bg="#000000")
                              Fond.place(x=0,y=0)
                              Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
                              Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
                              Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
                               
                              #images du perso
                              perso_normal=PhotoImage(file="images/perso.gif") #fichier du perso au départ
                              XP, YP = 80, 80 # Position
                               
                               
                               
                              # On lis le décors. On garde les informations du décors dans une liste pour
                              # pouvoir tester si on tombe, si on peut monter, ....
                              Decors = lisDecors('niveaux/niv1.txt')
                              dessine()
                               
                              départ=Fond.create_image(XP, YP, image=perso_normal)
                               
                              # Surveillance des touches
                              Touches = []
                              fenetre.bind_all("<KeyPress>",enfoncee)
                              fenetre.bind_all("<KeyRelease>",relachee)
                               
                              animation()
                               
                              fenetre.mainloop()

                              Qu'est-ce qui cloche cette fois ?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 avril 2014 à 15:05:29

                                En dehors du fait que le nom commun "décor" ne prend pas de s au singulier, tu veux dire ?

                                Réflexe de roxxor : commence par insérer des print() à droite à gauche pour vérifier que les pressions sur les touches de ton clavier sont bien détectées et que les coordonnées sont correctement modifiées en conséquence. Si ça ne vient pas de là, alors c'est probablement qu'il te manque un appel à une fonction de tkinter pour mettre à jour l'interface.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Zeste de Savoir, le site qui en a dans le citron !
                                  4 avril 2014 à 15:34:15

                                  est-ce que la syntaxe pour mettre a jour un canvas est la même pour tkinter que pour pygame ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    4 avril 2014 à 20:16:10

                                    Nouveau code de déplacement : cette fois le print me met bien quelle touche est appuyée mais le perso ne bouge toujours pas...

                                    EDIT : cette fois j'ai mis un print dans les 'if', le shell m'affiche bien que la touche a été pressée mais le perso ne bouge toujours pas. Je commence à croire que Tkinter n'aime pas les .gif ...

                                    from tkinter import *
                                    import pygame # Note : importation pygame pour pouvoir jouer des sons (musique)
                                     
                                     
                                     
                                    pygame.mixer.init()
                                    pygame.mixer.music.load("alerte.wav") # musique d'intro
                                    pygame.mixer.music.play() 
                                     
                                    # Version 1 : Dessin du décors
                                     
                                    # Position 
                                      
                                    # Boucle principale :
                                    def Clavier(event) :
                                        global XP,YP
                                        touche = event.keysym
                                        # déplacement vers le haut
                                        if touche == 'Up':
                                            print('haut')
                                            YP -= 40
                                        # déplacement vers le bas
                                        if touche == 'Down':
                                            print('bas')
                                            YP += 40
                                        # déplacement vers la droite
                                        if touche == 'Right':
                                            print('droite')
                                            XP += 40
                                        # déplacement vers la gauche
                                        if touche == 'Left':
                                            print('gauche')
                                            XP -= 40
                                        Fond.coords(perso_normal,XP -40, YP -40, XP +40, YP +40)
                                        Fond.update()
                                     
                                      
                                      
                                    def lisDecors(fichier):
                                        """
                                        Fonction qui lis le contenu du fichier fichier et la place dans
                                        la liste 2D Decors
                                        """
                                        filin = open(fichier,'r')
                                        R = [list(line.replace('\n','')) for line in filin]
                                        filin.close()
                                        return R
                                      
                                    def dessine():
                                        """
                                        Fonction qui dessine le plateau de jeu avec les données de la liste Decors
                                        """
                                        ligne, colonne = 0, 0
                                        while ligne < 17 :
                                          if Decors[ligne][colonne] == 'X' :
                                            Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW)
                                          if Decors[ligne][colonne] == 'T' :
                                            Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW)
                                          if Decors[ligne][colonne] == 'P' :    # Si on a un perso dans le décors
                                            XP, YP = colonne*40+20, ligne*40+20 # On initialise les coordonnées
                                            Decors[ligne][colonne] = ' '        # On l'efface du décors 
                                          colonne=colonne+1
                                          if colonne == 25 :
                                            colonne = 0
                                            ligne = ligne + 1
                                      
                                      
                                    fenetre=Tk()
                                    fenetre.resizable(width=False, height=False)
                                      
                                    fenetre.title("Projet Deadalus - Prepare 4 F3AR")
                                    fenetre.geometry("1200x680")
                                    XP, YP = 80, 80 
                                    # Chargement des fichiers :
                                    T=PhotoImage(file="images/FondS.gif")
                                    X=PhotoImage(file="images/brick.gif")
                                    P=PhotoImage(file="images/perso.gif") 
                                      
                                    # Dessin de l'interface
                                    Fond=Canvas(fenetre,width=1200,height=680,bg="#000000")
                                    Fond.place(x=0,y=0)
                                    Fond.focus_set()
                                    Fond.bind('<Key>',Clavier)
                                    Fond.pack(padx =5, pady =5)
                                    Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
                                    Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
                                    Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
                                      
                                    #images du perso
                                    perso_normal=PhotoImage(file="images/perso.gif") #fichier du perso au départ
                                     
                                      
                                      
                                      
                                    # On lis le décors. On garde les informations du décors dans une liste pour
                                    # pouvoir tester si on tombe, si on peut monter, ....
                                    Decors = lisDecors('niveaux/niv1.txt')
                                    dessine()
                                      
                                    départ=Fond.create_image(XP, YP, image=perso_normal)
                                      
                                      
                                     
                                     
                                     
                                    fenetre.mainloop()
                                    

                                    Est-ce quelqu'un pourrait bien m'indiquer ce que j'ai fait de faux cette fois ?

                                    -
                                    Edité par MaxFR68 11 avril 2014 à 17:24:13

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 avril 2014 à 20:18:28

                                      le lien vers le script + les ressources : https://www.dropbox.com/sh/uh0jkaext8kyw00/0xvA3GE2N8
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        4 avril 2014 à 20:41:59

                                        Edite tes messages au lieu d'en mettre plein à la suite, ça aide pas à la lisibilité du sujet... :-°

                                        Bref, pour ton problème, mets le print dans le if plutôt. Tu vas te rendre d'un truc, et logiquement, si tu suis le conseil que je t'ai donné plus haut, tu vas trouver tout seul comme un grand ce qui ne va pas.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          9 mai 2014 à 14:51:01

                                          Allelujah ! le perso se déplace enfin ! J'ai juste du remplacer le .gif du perso par un pion ( un ovale).

                                          Le problème est que je n'ai aucune idée quant à la détection des collisions : le pion passe à travers les murs ! J'ai essayé la méthode des bounding boxes mais j'ai du me tromper car ce pion traverse toujours les murs...

                                          Quelqu'un aurait une méthode simple pour détecter les collisions entre un ovale et des .gif ?

                                          Voici le code :

                                          from tkinter import *
                                          import pygame # Note : importation pygame pour pouvoir jouer des sons (musique)
                                            
                                            
                                            
                                          pygame.mixer.init()
                                          pygame.mixer.music.load("alerte.wav") # musique d'intro
                                          pygame.mixer.music.play() 
                                            
                                          # Version 1 : Dessin du décors
                                            
                                          # Position 
                                             
                                          # Boucle principale :
                                          def Clavier(event) :
                                              global XP,YP
                                              touche = event.keysym
                                              # déplacement vers le haut
                                              if touche == 'Up':
                                                  YP -= 20
                                              # déplacement vers le bas
                                              if touche == 'Down':
                                                  YP += 20
                                              # déplacement vers la droite
                                              if touche == 'Right':
                                                  XP += 20
                                              # déplacement vers la gauche
                                              if touche == 'Left':
                                                  XP -= 20
                                              Fond.coords(Pion,XP -10, YP -10, XP +10, YP +10)
                                              Fond.update()
                                            
                                             
                                             
                                          def lisDecors(fichier):
                                              """
                                              Fonction qui lis le contenu du fichier fichier et la place dans
                                              la liste 2D Decors
                                              """
                                              filin = open(fichier,'r')
                                              R = [list(line.replace('\n','')) for line in filin]
                                              filin.close()
                                              return R
                                             
                                          def dessine():
                                              """
                                              Fonction qui dessine le plateau de jeu avec les données de la liste Decors
                                              """
                                              ligne, colonne = 0, 0
                                              while ligne < 17 :
                                                if Decors[ligne][colonne] == 'X' :
                                                  Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW)
                                                if Decors[ligne][colonne] == 'T' :
                                                  Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW)
                                                colonne=colonne+1
                                                if colonne == 25 :
                                                  colonne = 0
                                                  ligne = ligne + 1
                                             
                                             
                                          fenetre=Tk()
                                          fenetre.resizable(width=False, height=False)
                                             
                                          fenetre.title("Projet Deadalus - Prepare 4 F3AR")
                                          fenetre.geometry("1200x680")
                                          XP, YP = 80, 80
                                          
                                          # Dessin de l'interface
                                          Fond=Canvas(fenetre,width=1200,height=680,bg="#000000")
                                          Pion = Fond.create_oval(XP-10,YP-10,XP+10,YP+10,width=2,outline='black',fill='red')
                                          Fond.place(x=0,y=0)
                                          Fond.focus_set()
                                          Fond.bind('<Key>',Clavier)
                                          Fond.pack(padx =5, pady =5)
                                          Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
                                          Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
                                          Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
                                          
                                          #images du perso
                                          #perso_normal=PhotoImage(file="images/perso.gif") #fichier du perso au départ
                                            
                                          # Chargement des fichiers :
                                          T=PhotoImage(file="images/FondS.gif")
                                          X=PhotoImage(file="images/brick.gif")
                                          
                                                
                                          
                                             
                                          # On lis le décors. On garde les informations du décors dans une liste pour
                                          # pouvoir tester si on tombe, si on peut monter, ....
                                          Decors = lisDecors('niveaux/niv1.txt')
                                          dessine()
                                             
                                          
                                             
                                             
                                            
                                            
                                            
                                          fenetre.mainloop()
                                          
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 mai 2014 à 18:11:28

                                            Bonjour tout le monde ! Désolé pour le silence mais j'ai bossé comme un malade sur mon jeu et il est enfin (quasi) prêt.

                                            Le lien vers les ressources : https://www.dropbox.com/sh/3qnqtzama5d4oqy/AADoC23ygAOsl1oV1wgFdwXSa

                                            et mon script :

                                            from tkinter import * # importation Tkinter pour le jeu, les niveaux...
                                            import pygame # Note : importation pygame pour pouvoir jouer des sons (musique)
                                            from tkinter.messagebox import * # Import de la librairie pour les boites de dialogues
                                            import time # Import de la librairie gérant le temps pour le compte à rebours
                                            
                                            
                                              
                                             
                                            pygame.mixer.init()
                                            pygame.mixer.music.load("alerte.wav") # musique d'intro
                                            pygame.mixer.music.play() 
                                              
                                            
                                              
                                            # Création de la fonction’Clavier’ qui se chargera de capter les commandes et de faire bouger le personnage sur la Canvas 
                                               
                                            def Clavier(event) :
                                                Arrivée_check(Pion)
                                                global XP,YP
                                                # l’instruction global permettra d’incrémenter la position sur l’axe X et sur l’axe Y à chaque fois que la fonction Clavier sera appellée, autrement dit à chaque fois qu’une touche sera pressée
                                                touche = event.keysym
                                                # déplacement vers le haut
                                                if touche == 'Up':
                                                    YP -= 10
                                                # déplacement vers le bas
                                                if touche == 'Down':
                                                    YP += 10
                                                # déplacement vers la droite
                                                if touche == 'Right':
                                                    XP += 10
                                                # déplacement vers la gauche
                                                if touche == 'Left':
                                                    XP -= 10
                                                Fond.coords(Pion,XP -10, YP -10, XP +10, YP +10)
                                                CollisionMur(Pion)
                                                CollisionB1(Pion)
                                                
                                              
                                               
                                               
                                            def lisDecors(fichier):
                                                """
                                                Fonction qui lis le contenu du fichier fichier et la place dans
                                                la liste 2D Decors
                                                """
                                                filin = open(fichier,'r')
                                                # on ouvre le fichier en mode ‘lecture’
                                                R = [list(line.replace('\n','')) for line in filin]
                                                filin.close()
                                                # Une fois que l’on a lu le fichier, on le ferme
                                                return R
                                            # On retourne la ligne contenant l’information (Mur, coque) du niveau
                                               
                                            def dessine():
                                                """
                                                Fonction qui dessine le plateau de jeu avec les données de la liste R
                                                """
                                                ligne, colonne = 0, 0
                                                while ligne < 17 : #Tant que l’on est pas arrivé à la ligne 17
                                                  if Decors[ligne][colonne] == 'X' :
                                                    Fond.create_image(colonne*40, ligne*40, image=X, anchor=NW) #Lorsque l’on tombe sur un ‘X’ dans le fichier du niveau, on dessine l'image du mur intérieur sur 40 pixels de large(colonne) et 40 pixels de long (ligne) (a cause de la dimension de l'image) 
                                                  if Decors[ligne][colonne] == 'T' :
                                                    Fond.create_image(colonne*40, ligne*40, image=T, anchor=NW) #Lorsque l’on tombe sur un ‘T’ dans le fichier du niveau, on dessine l'image de la coque du vaisseau sur 40 pixels de large (colonne) et 40 pixels de long (ligne) a cause de la dimension de l'image.
                                                  colonne=colonne+1 #on a dessiné l'image, on passe à la colonne suivante
                                                  if colonne == 25 :
                                                    colonne = 0 # si l’on a passé la 25ème colonne, on remet le compteur de colonne à 0
                                                    ligne = ligne + 1 # et on passe à la ligne du dessous
                                            
                                            
                                            #Création de la fenêtre de jeu  (taille, icone, e.t.c.) 
                                            largeur=1200
                                            hauteur=680
                                            fenetre=Tk()
                                            #fenetre.iconbitmap(r"C:\Users\Maxime\Downloads\favicon.ico")
                                            fenetre.resizable(width=False, height=False)
                                               
                                            fenetre.title("Projet Deadalus - Prepare 4 F3AR")
                                            fenetre.geometry("1200x680")
                                            #Coordonnées de départ du pion
                                            XP, YP = 80,60
                                            
                                            # Dessin de l'interface
                                            Fond=Canvas(fenetre,width=largeur,height=hauteur,bg="#000000")
                                            Pion = Fond.create_oval(XP-10,YP-10,XP+10,YP+10,width=2,outline='blue',fill='red')
                                            Fond.place(x=0,y=0)
                                            Fond.focus_set()
                                            #On lie les touches du clavier à l'événement 'Clavier'
                                            Fond.bind('<Key>',Clavier)
                                            Fond.pack(padx =5, pady =5)
                                            #On crée un rectangle noir qui fera office d'afficheur de texte
                                            Fond.create_rectangle(1000,0,1200,680,fill="black",width=5,outline="black")
                                            Txt=Fond.create_text(1100,275,text="Projet Deadalus",font=("OCRAExtended","15"),fill="#0B0")
                                            Texte=Fond.create_text(1100,300,text="Prepare 4 F3AR",font=("OCRAExtended","15"),fill="#0B0")
                                            
                                              
                                            # Chargement des fichiers image :
                                            T=PhotoImage(file="murSF.gif")
                                            X=PhotoImage(file="murSF2.gif")
                                            V=PhotoImage(file="porte.gif")
                                            
                                            # Placement de la porte de sortie
                                            Fond.create_image(70,620, image=V,anchor=CENTER)
                                            
                                            #Création de la fonction définissant la destruction de la fenêtre principale
                                            def quit(fenetre):
                                                fenetre.destroy()
                                                
                                            #Création de la fonction définissant la destruction du compte à rebours et l'arrêt de l'alarme
                                            def quit(CAR):
                                                CAR.destroy()
                                                root.destroy()
                                                pygame.mixer.music.stop()
                                            
                                            # Fonction définissant la collision du pion avec l'un des murs de la coque : si le mur dépasse une certaine position, on lui applique une force opposée (blocage) et on affiche un message de 'Game Over'
                                            def CollisionMur(Pion):
                                                global XP,YP
                                                print('XP= ',XP)#Valeur de débogage pour les coordonnées
                                                print('YP= ',YP)#Idem
                                                if XP > 945 :
                                                    XP -= 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(CAR)
                                                    quit(fenetre)
                                            
                                                if XP < 51 :
                                                    XP += 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(CAR)
                                                    quit(fenetre)
                                            
                                                if YP < 51 :
                                                    YP += 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(CAR)
                                                    quit(fenetre)
                                            
                                                if YP > 629:
                                                    YP -= 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(CAR)
                                                    quit(fenetre)
                                            
                                            # Fonction définissant la collision du pion avec les murs intérieurs du vaisseau
                                            # Concrètement, il s'agit d'encadrer la position en X et en Y du personnage dans un certain set de coordonnées ; dès qu'il entre dans ce 'champ', il est repoussé et c'est le 'Game Over'
                                            def CollisionB1(Pion):
                                                global XP,YP
                                                if XP<930 and XP>51 and YP>65 and YP<110:
                                                    YP -= 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                    
                                                if XP<930 and XP>51 and YP>105 and YP<135:
                                                    YP += 10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<945 and XP>75 and YP>145 and YP<160:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<945 and XP>75 and YP>185 and YP<215:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                                if XP<930 and XP>51 and YP>225 and YP<275:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<930 and XP>51 and YP>265 and YP<295:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                                if XP<945 and XP>75 and YP>305 and YP<355:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<945 and XP>75 and YP>345 and YP<375:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                                if XP<930 and XP>51 and YP>385 and YP<435:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<930 and XP>51 and YP>425 and YP<455:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                                if XP<945 and XP>75 and YP>465 and YP<515:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<945 and XP>75 and YP>505 and YP<535:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                                if XP<930 and XP>51 and YP>545 and YP<595:
                                                    YP -=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                                if XP<930 and XP>51 and YP>585 and YP<615:
                                                    YP +=10
                                                    showerror('Game Over !',"Tu es mort dans d'atroces souffrances, car tu as été électrifié par le mur...")
                                                    quit(fenetre)
                                                    quit(CAR)
                                            
                                            
                                            
                                            # Créarion d'une fonction vérifiant si le pion est arrivé sur la case arrivée
                                            def Arrivée_check(Pion):
                                                global XP,YP
                                                if XP == 70 and YP == 620:
                                                    quit(CAR)
                                                    showinfo("Ecran de fin","Bravo, tu as gagné ! Tu as réussi à ouvrir la porte et à sortir du vaisseau ! ")
                                                  
                                            # Création du compte à rebours (on n'affiche pas le temps restant pour laisser l'utilisateur dans le doute...
                                            root = Tk()
                                            CAR = Canvas(root)
                                            CAR.config(width=0,height=0)
                                            CAR.pack()
                                            time = 65
                                            def tick():
                                                #actualisation du compte à rebours
                                                CAR.delete(ALL)
                                                global time
                                                time -= 1
                                                if time == 0:
                                                     showerror('Game Over !',"Tu es mort d'asphysixie, car tu n'a pas pu sortir du vaisseau à temps !")
                                                     quit(fenetre)
                                                     quit(CAR)
                                            
                                                else:
                                                   CAR.after(1000, tick)
                                            
                                            #Icône du compte à rebours
                                            #root.iconbitmap(r"C:\Users\Maxime\Downloads\favicon.ico")
                                            
                                            # Appel du compte à rebours
                                            tick()
                                                
                                            # On lis le décor.
                                            Decors = lisDecors('niveaux/niv1.txt')
                                            dessine()
                                              
                                            # Boucle principale du jeu  
                                            fenetre.mainloop()
                                            
                                            

                                            Amusez-vous bien !

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Problème jeu python

                                            × 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