Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme Tile mapping

Sujet résolu
    10 janvier 2013 à 13:51:06

    Bonjour à tous,

    Je crée un petit jeu pour un projet scolaire en python, et j'ai voulu faire un mapping avec un tableau et une boucle qui le lit, seulement le jeu marche, mais cela n'affiche pas les tiles de la map.

    from tkinter import *
    x=18
    y=18
    
    carte = [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
    
    def draw_map():
        global carte
        carte_x=18
        carte_y=18
        for i in range (0,399):
            if carte[i]==1:
                mur = PhotoImage(file ='b.gif')
                mur_item = can1.create_image(carte_x, carte_y, image =mur)
            carte_x += 32
            if carte_x==626:
                carte_x=18
                carte_y+=32
        
                
            
    def droite(event):
        global x, y
        if x<626:
            x += 32
            can1.coords(item, x, y)
    
    def gauche(event):
        global x, y
        if x>18:
            x -= 32
            can1.coords(item, x, y)
    
    def haut(event):
        global x, y
        if y>32:
            y -= 32
            can1.coords(item, x, y)
    
    def bas (event):
        global x, y
        if y<608:
            y +=32
            can1.coords(item, x, y)
            
    
    
        
    fen1 = Tk()
    
    can1 = Canvas(fen1, width =640, height =640, bg ='blue')
    photo = PhotoImage(file ='a.gif')
    item = can1.create_image(x, y, image =photo)
    
    draw_map()
    
    can1.pack()
    fen1.bind('<Right>', droite)
    fen1.bind('<Left>', gauche)
    fen1.bind('<Up>', haut)
    fen1.bind('<Down>', bas)
    fen1.mainloop()
    

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2013 à 19:50:28

      Bonjour,

      effectivement, rien ne s'affiche car tes variables se confondent. En effet, tu utilises certaines variables (globales ou non) qui portent les même noms. De plus, il y a trop de variables globales à mon goût.

      Essayes quelquechose comme: (non testé)

      from tkinter import *
      x=18
      y=18
       
      global carte = [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
       

      Supprimes la ligne n°27 de ton code source.

      Bonne journée.

      Realmagma.

      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2013 à 21:16:01

        Merci de ta réponse, quand je fait cela il me dit "invalid syntax" sur le '=' aprés "global carte"..
        • Partager sur Facebook
        • Partager sur Twitter
          10 janvier 2013 à 21:36:01

          global carte
          carte = #Insérer ton tableau ici [0,0,0...... ]
          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2013 à 21:49:22

            Là sa marche, mais ça n'affiche toujours pas mes tiles, je pense que sa vient de la commande pour afficher l'image qu'il y as dans ma fonction draw_map()
            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2013 à 22:05:17

              Il ne faut pas redéfinir le variable carte vu qu'elle est à présent en global

              from tkinter import *
              x=18
              y=18
               
              global carte
              carte = [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
               
              def draw_map():
                  carte_x=18
                  carte_y=18
                  for i in range (0,399):
                      if carte[i]==1:
                          mur = PhotoImage(file ='b.gif')
                          mur_item = can1.create_image(carte_x, carte_y, image =mur)
                      carte_x += 32
                      if carte_x==626:
                          carte_x=18
                          carte_y+=32
                   
              
               
                   
              fen1 = Tk()
               
              can1 = Canvas(fen1, width =640, height =640, bg ='blue')
              photo = PhotoImage(file ='a.gif')
              item = can1.create_image(x, y, image =photo)
               
              draw_map()
               
              can1.pack()
              fen1.mainloop()

              Essaye avec ce code.

              • Partager sur Facebook
              • Partager sur Twitter
                10 janvier 2013 à 22:38:27

                Avec ce code là cela marche:

                from tkinter import *
                x=18
                y=18
                
                global carte
                
                carte = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                          1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]
                 
                def draw_map():
                    carte_x=18
                    carte_y=18
                    for i in range (0,399):
                        if carte[i]==1:
                           mur_item = can1.create_image(carte_x, carte_y, image =mur)
                        carte_x += 32
                        if i/19==int(i/19) and i != 0:
                            carte_x=18
                            carte_y+=32
                     
                             
                         
                def droite(event):
                    global x, y
                    if x<626:
                        x += 32
                        can1.coords(item, x, y)
                 
                def gauche(event):
                    global x, y
                    if x>18:
                        x -= 32
                        can1.coords(item, x, y)
                 
                def haut(event):
                    global x, y
                    if y>32:
                        y -= 32
                        can1.coords(item, x, y)
                 
                def bas (event):
                    global x, y
                    if y<608:
                        y +=32
                        can1.coords(item, x, y)
                         
                 
                 
                     
                fen1 = Tk()
                 
                can1 = Canvas(fen1, width =640, height =640, bg ='pink')
                photo = PhotoImage(file ='a.gif')
                item = can1.create_image(x, y, image =photo)
                mur = PhotoImage(file ='b.gif')
                draw_map()
                 
                can1.pack()
                fen1.bind('<Right>', droite)
                fen1.bind('<Left>', gauche)
                fen1.bind('<Up>', haut)
                fen1.bind('<Down>', bas)
                fen1.mainloop()
                
                

                En fait il ne fallait pas définir l'image b, mais maintenant le probleme, c'est que les tiles ne saffichent pas là ou ils devraient, pourquoi ?



                • Partager sur Facebook
                • Partager sur Twitter
                  10 janvier 2013 à 22:41:16

                  Parce que les chiffres magiques c'est de la magie noire !
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    10 janvier 2013 à 23:01:32

                    @Drawer

                    T'as rempli de 0 la liste carte en brut?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 janvier 2013 à 23:12:10

                      Les chiffres magique c'est de la magie noire ?

                      C'est à dire en brut fred1599 ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 janvier 2013 à 23:17:27

                        Ça ne sert absolument à rien de déclarer en global une variable qui se trouve déjà dans le scope global d'un module. Pire encore ; c'est SALE.

                        Quitte à utiliser le mot-clé global partout, autant déclarer toutes ces variables en variables de module. C'est sûr que visuellement c'est moins joli, mais ça a le mérite de donner un aperçu visuel direct de ce qui se passe vraiment dans le code, sans reposer sur un mot-clé à n'utiliser qu'avec parcimonie (i.e. au mieux, jamais).

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Zeste de Savoir, le site qui en a dans le citron !
                        Anonyme
                          10 janvier 2013 à 23:25:46

                          Drawer a écrit:

                              C'est à dire en brut fred1599 ?


                          As-tu rempli les 0 un par un dans ta liste?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 janvier 2013 à 15:11:25

                            J'ai réussi à afficher les images, mais le problème est que cela n'affiche que la premiere ligne d'image:

                            from tkinter import *
                            
                            x=18
                            y=18
                            
                            
                            
                            carte = [ 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]
                            
                            def draw_map():
                                global carte
                                carte_x=18
                                carte_y=18
                                z=0
                                for i in range (0,19):
                                    for j in range(0,19):
                                        if carte[z]==1:
                                            mur_item = can1.create_image(carte_x, carte_y, image =mur)
                                        carte_x +=32
                                        z+=1
                                carte_x =18
                                carte_y +=32
                                
                                        
                                    
                                      
                            
                            def droite(event):
                                global x, y
                                if x<626:
                                    x += 32
                                    can1.coords(item, x, y)
                            
                            def gauche(event):
                                global x, y
                                if x>18:
                                    x -= 32
                                    can1.coords(item, x, y)
                            
                            def haut(event):
                                global x, y
                                if y>32:
                                    y -= 32
                                    can1.coords(item, x, y)
                            
                            def bas (event):
                                global x, y
                                if y<608:
                                    y +=32
                                    can1.coords(item, x, y)
                                    
                            
                            
                                
                            fen1 = Tk()
                            
                            can1 = Canvas(fen1, width =640, height =640, bg ='pink')
                            photo = PhotoImage(file ='a.gif')
                            item = can1.create_image(x, y, image =photo)
                            mur = PhotoImage(file ='b.gif')
                            draw_map()
                            can1.pack()
                            fen1.bind('<Right>', droite)
                            fen1.bind('<Left>', gauche)
                            fen1.bind('<Up>', haut)
                            fen1.bind('<Down>', bas)
                            fen1.mainloop()
                            
                            
                            

                            Merci d'avance

                            @fred: Non, que la premiere ligne et j'ai copié coller

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              11 janvier 2013 à 16:48:09

                              t'as déjà essayé cette ligne ci-dessous?

                              carte = [0 for i in range(400)]



                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 janvier 2013 à 19:33:51

                                Je sais meme pas à quoi elle sert ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 janvier 2013 à 9:46:33

                                  Suffit d'essayer dans la console...

                                  >>> [0 for _ in range(12)]
                                  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                                  >>> [0 for _ in range(15)]
                                  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                                  

                                  Et vire donc tous ces global x, y et global carte qui ne servent à rien.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Zeste de Savoir, le site qui en a dans le citron !
                                    12 janvier 2013 à 13:30:32

                                    Oui mais aprés dans mon tableau il n'y aura que trés peu de '0', c'est pour les tests là,

                                    Et je les mets ou les global du coup ?

                                    Maintenant, la map marche parfaitement, mais je voudrais changer l'image du perso à chaque déplacement, comment on change l'image d'un élément durant le déroulement du programme ?

                                    Merci d'avance.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      12 janvier 2013 à 13:48:07

                                      Drawer a écrit:

                                      Oui mais aprés dans mon tableau il n'y aura que trés peu de '0', c'est pour les tests là,

                                      Et je les mets ou les global du coup ?

                                      Pour les '0', tu peux mettre d'autres valeurs, j'ai pas pigé ce que tu comprends pas...

                                      Les global tu les vires complètement, comme dis plus haut, c'est une mauvaise manière de faire.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 janvier 2013 à 14:07:01

                                        Le problème c'est que cela ne marche plus sans les "global"!

                                        Dans le tableau 'carte' je veux mettre plusieurs chiffres, des 0, des 1, des 2 etc..

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          12 janvier 2013 à 14:15:26

                                          Ton code est strictement celui montré plus haut, ou tu l'as modifié entre temps?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 janvier 2013 à 14:18:16

                                            Actuellement, j'ai ça:

                                            from tkinter import *
                                            x=18+32
                                            y=18+32
                                            
                                            global carte
                                             
                                            carte = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
                                                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
                                              
                                            def draw_map():
                                                carte_x=18
                                                carte_y=18
                                                for i in range (0,400):
                                                    if carte[i]==1:
                                                       mur_item = can1.create_image(carte_x, carte_y, image =mur)
                                                    elif carte[i]==0:
                                                        mur_sol = can1.create_image(carte_x, carte_y, image= sol)
                                                    carte_x += 32
                                                    if i==19 or i==39 or i==59 or i==79 or i==99 or i==119 or i==139 or i==159 or i==179 or i==199 or i ==219 or i==239 or i==259 or i==279 or i==299 or i==319 or i==339 or i==339 or i==359 or i==379 or i==399:
                                                        carte_x=18
                                                        carte_y+=32
                                                  
                                                          
                                                      
                                            def droite(event):
                                                global x, y
                                                if x<626:
                                                    p=int((((x-18)/32+1)+((((y-18)/32+1)-1)*20)))
                                                    if carte[p]==0:
                                                        x += 32
                                                        can1.coords(item, x, y)
                                              
                                            def gauche(event):
                                                global x, y
                                                if x>18:
                                                    p=int((((x-18)/32+1)+((((y-18)/32+1)-1)*20))-2)
                                                    if carte[p]==0:
                                                        x -= 32
                                                        can1.coords(item, x, y)
                                              
                                            def haut(event):
                                                global x, y
                                                if y>32:
                                                    p=int((((x-18)/32+1)+((((y-18)/32+1)-1)*20))-21)
                                                    if carte[p]==0:
                                                        y -= 32
                                                        can1.coords(item, x, y)
                                              
                                            def bas (event):
                                                global x, y
                                                if y<608:
                                                    p=int((((x-18)/32+1)+((((y-18)/32+1)-1)*20))+19)
                                                    if carte[p]==0:
                                                        y +=32
                                                        can1.coords(item, x, y)
                                                      
                                              
                                              
                                                  
                                            fen1 = Tk()
                                              
                                            can1 = Canvas(fen1, width =640, height =640, bg ='pink')
                                            photo = PhotoImage(file ='a_bas.gif')
                                            mur = PhotoImage(file ='b.gif')
                                            sol = PhotoImage(file ='c.gif')
                                            draw_map()
                                            item = can1.create_image(x, y, image =photo)
                                            
                                            can1.pack()
                                            fen1.bind('<Right>', droite)
                                            fen1.bind('<Left>', gauche)
                                            fen1.bind('<Up>', haut)
                                            fen1.bind('<Down>', bas)
                                            fen1.mainloop()
                                            



                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 janvier 2013 à 14:28:58

                                              J'avais déja tester le double for, mais je ne sais pas pourquoi, ça n'affiche que la premiere ligne du tableau..
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                12 janvier 2013 à 14:41:29

                                                if i==19 or i==39 or i==59 or i==79 or i==99 or i==119 or i==139 or i==159 or i==179 or i==199 or i ==219 or i==239 or i==259 or i==279 or i==299 or i==319 or i==339 or i==339 or i==359 or i==379 or i==399:



                                                2 remarques, tu ne respectes pas la PEP8 (79 caractères maxi) et il y a beaucoup plus simple

                                                liste = [i for i in range(19, 400, 20)]
                                                if n in liste:
                                                    # traitement

                                                 global n'est pas responsable du mauvais fonctionnement de ton code, il faut que tu places ta variable x, y et carte en dessous de tes fonctions.

                                                Tu peux donc virer global...

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  12 janvier 2013 à 14:48:23

                                                  Meme si je les place en dessous cela ne marche pas,

                                                  Et merci pour la liste, c'est exactement ce que je cherchais à faire mais je n'y arrivais pas !

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    12 janvier 2013 à 15:12:29

                                                    ok, en effet, j'avais oublié ça fonctionne avec les listes ou les dicos, mais pas les valeurs

                                                    On peut passer par une toute simple classe pour garder nos valeurs de x et y

                                                    class var(int):
                                                        def __init__(self, value):
                                                            self.val = value


                                                    Etant donné que tu fais du tkinter, tu dois comprendre les classes :)

                                                    Un petit test

                                                    class var(int):
                                                        def __init__(self, value):
                                                            self.val = value
                                                    
                                                    x = var(5)
                                                    
                                                    x.val += 12
                                                    
                                                    print(x.val)

                                                    Ce qui donne

                                                    fred1599@fred1599-Aspire-5741G:~/Desktop$ python3 test.py
                                                    17
                                                    

                                                    Et là on évite les globales...

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      12 janvier 2013 à 15:26:58

                                                      En fait, comme je l'ai déja dit, c'est pour un projet scolaire, en fait c'est une option en terminale S et on présente le programme au jury à la fin de l'année et on as une note pour le bac, et donc en cours on as vu les bases de python, et tkinter, mais jamais on n'as vu les classes .. :/
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        12 janvier 2013 à 15:46:59

                                                        Oui mais si c'est toi qui les apprend? :)

                                                        Je trouve les globales très moches.

                                                        Lorsqu'on utilise Tkinter, on utilise des classes, pourquoi ne pas les créer dans ton code.

                                                        Quand tu fais 

                                                        can = Canvas(root)

                                                        tu crées un objet can de la classe Canvas...

                                                        Bref ton code je l'aurais transformé en

                                                        from tkinter import *
                                                        
                                                        class Map:
                                                        
                                                            def __init__(self, canv):
                                                                self.x = self.y = 18
                                                                self.carte = [0 for i in range(400)]
                                                                self.fichier = {'mur':PhotoImage(file='b.gif'),
                                                                                'sol':PhotoImage(file='c.gif'),
                                                                                'photo':PhotoImage(file='a_bas.gif')}
                                                                self.my_canvas = canv
                                                                self.item = self.my_canvas.create_image(self.x, self.y, image=self.fichier['photo'])
                                                                
                                                            def draw_map(self):
                                                                carte_x = carte_y = 18
                                                                liste = [i for i in range(19, 400, 20)]
                                                                for i in range (0,400):
                                                                    if carte[i]==1:
                                                                        mur_item = self.my_canvas.create_image(carte_x, carte_y, image=self.fichier['mur'])
                                                                    elif carte[i]==0:
                                                                        mur_sol = self.my_canvas.create_image(carte_x, carte_y, image=self.fichier['sol'])
                                                                    carte_x += 32
                                                                    if i in liste:
                                                                        carte_x=18
                                                                        carte_y+=32
                                                                        
                                                            def droite(self, event):
                                                                # Suite
                                                             
                                                        fen1 = Tk()
                                                        can1 = Canvas(fen1, width =640, height =640, bg ='blue')
                                                         
                                                        my_map = Map(can1) # Initialisation de la map
                                                        my_map.draw_map()
                                                        
                                                        # Quand tu auras fais toutes ces fonctions...
                                                        
                                                        fen1.bind('<Right>', my_map.droite)
                                                        fen1.bind('<Left>', my_map.gauche)
                                                        fen1.bind('<Up>', my_map.haut)
                                                        fen1.bind('<Down>', my_map.bas)
                                                        fen1.mainloop()

                                                        Si tu ne peux pas c'est bien dommage, je trouve ça limite de l'incompétence que de t'imposer de ne pas utiliser les classes.

                                                        Même si je sais que les enseignants en ISN sont aussi débutants en python, il ne devrait dans ce cas pas vous faire utiliser Tkinter.

                                                        Edit : pas testé évidemment

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          13 janvier 2013 à 12:23:49

                                                          Au départ on ne devait pas utilisé tkinter, mais on as appris nous mêmes parce que sa nous était indispensable, aprés pour les classes, faut expliquer son code devant un jury et j'ai peur qu'on ne maitrise pas tous celà.

                                                          Sinon pour modifier l'image attribué à un objet du coup, comment on fait ?

                                                          Merci d'avance.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            13 janvier 2013 à 12:32:46

                                                            Quand dois-tu rendre ce devoir ?

                                                            Le mieux c'est de regarder le tutoriel officiel. Lis le de A à Z, tu perdras moins de temps qu'une réponse sur le forum.

                                                            Bonne journée,

                                                            Realmagma.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              13 janvier 2013 à 12:41:51

                                                              C'est pour le bac donc quelques moi, j'ai déjà regarder le tuto officiel y'a pas grand choses sur tkinter ..
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Probleme Tile mapping

                                                              × 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