Partage
  • Partager sur Facebook
  • Partager sur Twitter

"Tableau" 2d

Sujet résolu
    10 décembre 2014 à 16:15:42

    Bonjour,

    je travail en python 3.x

    Je souhaiterais crée un tableau en deux dimensions dans lequel je pourrais déplacer un élément. (Finalement un peu comme une carte de jeu sur laquelle je déplacerais un personnage.)

    Pour cela il faut apparemment que j'utilise des boucles "for" (les imbriquées), mais je ne comprend pas comment agir avec une fois fait, quelle commande utilisé, comment la modifié ou la stocker. (Pour déplacé le personnage)

    (Je "débute", j'ai fais 6 mois de prog en python a la fac donc j'ai un niveau relativement bas)

    j'ai ça, mais je vois absolument pas quoi en faire ou comment l'utiliser(Déplacé personnage a partir des coordonnées(?)) =>

    for i in range(3):
        for j in range(3):
            print (i, j)



    • Partager sur Facebook
    • Partager sur Twitter
      10 décembre 2014 à 16:21:03

      Si ca peut aider a juger de ce que je veux, voila ce que j'avais fais précédemment  (Attention, en cas de décès ou de saignements des yeux, je ne pourrais être tenus pour responsable) (c'était un gros fichier test avec pour but de me familiarisé avec python, donc normal que ca ne ressemble a rien !

      import os
      import time
      import pygame
      from pygame.locals import *
      
      
      pygame.init()
      
      fenetre = pygame.display.set_mode((100, 100))
      
      
      def Move(deplacement):
          global Vertical
          global Horizontal
          global m
          
          if deplacement == 1: #haut = 1: bas = 2: gauche = 3: droite = 4:
              if Mapp[Horizontal - 1][Vertical] != m:
                  del Mapp[Horizontal][Vertical] #delete "1" sur map
                  Mapp[Horizontal].insert(Vertical,0) #insert "0" a la place de "1"
                  Horizontal = Horizontal - 1            
              else :
                  pass
      
          elif deplacement == 2: #haut = 1: bas = 2: gauche = 3: droite = 4:
              if Mapp[Horizontal + 1][Vertical] != m: #Test que mur n'est pas en directin de move       
                  del Mapp[Horizontal][Vertical] #delete "1" sur map
                  Mapp[Horizontal].insert(Vertical,0) #insert "0" a la place de "1"
                  Horizontal = Horizontal + 1 #Horizontal vaut +1
              else :
                  pass
              
          elif deplacement == 3 and Mapp[Horizontal][Vertical - 1] != m: #haut = 1: bas = 2: gauche = 3: droite = 4: #MODIF EN COURS!!!*6
              if Mapp[Horizontal][Vertical - 1] != m:
                  del Mapp[Horizontal][Vertical]#Delete "1" sur map
                  Vertical = Vertical - 1 #Vertical vaut + 1         
              else :
                  pass
              
          elif deplacement == 4 and Mapp[Horizontal][Vertical + 1] != m: #haut = 1: bas = 2: gauche = 3: droite = 4: #SAFESAFESAFE!!!*6
              if Mapp[Horizontal][Vertical + 1] != m: 
                  del Mapp[Horizontal][Vertical]
                  Vertical = Vertical + 1
              else :
                  pass
              
          if deplacement == 1 or deplacement == 2:
              del Mapp[Horizontal][Vertical] #delete le "0" sur la new ligne
              Mapp[Horizontal].insert(Vertical,1) #remplace par "1"
      
          if Mapp[Horizontal][Vertical - 1] != m:
              if deplacement == 3 : 
                  Mapp[Horizontal].insert(Vertical,1)
          if Mapp[Horizontal][Vertical + 1] != m:
              if deplacement == 4 : 
                  Mapp[Horizontal].insert(Vertical,1)
          else:
              pass
      
              
      
      
          
      
      
      
      m = 8 #mur
      
      
      
      Horizontal = 0
      Vertical  = 0
      
      
      
      Mapp = [1,0,0,0,0],[0,0,0,0,0],[0,0,m,m,0],[0,0,0,0,0],[0,0,0,0,0]
      
      J1 = Mapp[Horizontal][Vertical]
      
      
      
      continuer = 0
      
      while continuer == 0:
          J1 = Mapp[Horizontal][Vertical]
          
          for lettre in Mapp:
              print(lettre)
              
          for event in pygame.event.get(): #possibilité del deplacement = 1:::
              if event.type == KEYDOWN: #haut = 1: bas = 2: gauche = 3: droite = 4:
                  if event.key == K_w:
                      deplacement = 1
                      Move(1)
                  if event.key == K_s:
                      deplacement = 2
                      Move(2)
                  if event.key == K_a:
                      deplacement = 3
                      Move(3)
                  if event.key == K_d:
                      deplacement = 4
                      Move(4)
             
          print ("H=>",Horizontal,"V=>",Vertical)
          pygame.time.Clock().tick(30)
          os.system('cls')
      



      • Partager sur Facebook
      • Partager sur Twitter
        10 décembre 2014 à 21:35:44

        Dis toi que si tu veux accéder à un élément, il suffit de faire

        liste[y][x]

        Le reste devrait venir tout seul ;)

        • Partager sur Facebook
        • Partager sur Twitter
          16 décembre 2014 à 5:31:20

          salut,

          tu pourrais aussi essayer de faire un dico dont la clef serait un tuple (x,y) , la valeur associée serait l' item correspondant :

          joueur,ennemis,astéroïdes,bonus  etc.

          regardes l' échiquier ici : http://openclassrooms.com/courses/apprenez-a-programmer-en-python/les-dictionnaires-2

          Ensuite tu parses ton dico :

          for clef,valeur in mon_dico.items():
          
              if valeur = 'ceci':
                  cela()

          Ou sinon une liste par catégorie d' item, avec pour chaque valeur un tuple de coordonnées ? Faudra faire attention aux collisions.


          Et pour finir, voici une petite source d'inspiration pour tes astéroïdes :

          => Dodger game : http://inventwithpython.com/pygcurse/

          -
          Edité par buffalo974 16 décembre 2014 à 5:53:32

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            16 décembre 2014 à 8:15:28

            Si ca peut aider a juger de ce que je veux, voila ce que j'avais fais précédemment (Attention, en cas de décès ou de saignements des yeux, je ne pourrais être tenus pour responsable) (c'était un gros fichier test avec pour but de me familiarisé avec python, donc normal que ca ne ressemble a rien !

            Il faudrait avant tout cela que tu te familiarises avec

            • Une simple boucle for
            • Une double boucle for
            • Les fonctions
            • Le fait d'éviter le mot clé global

            Il y a plein de tutoriels déjà existants pour chacun des cas ci-dessus...

            Après des choses paraissent pas mal comme le fait de détecter les directions avec des entiers, mais plus simple serait de créer des constantes.

            HAUT = 1
            BAS = 2
            GAUCHE = 3
            DROITE = 4

            Ce qui rend les choses suffisamment claires, et évite de répéter mille fois les mêmes commentaires sur ton code.

            if deplacement is HAUT:
                # ...

            os.system sera dérangeant plus tard si tu veux faire de code portable, dans ton cas on peut le gérer assez facilement

            def cls():
                os.system(['clear','cls'][os.name == 'nt'])

            Mais on préférera encore une fois le module subprocess 

            import subprocess
            
            subprocess.call("cls", shell=True)

            À vue de nez dans le code ci-dessous je verrais bien une fonction pour rendre plus propre, voir pourquoi pas un dictionnaire avec comme clé la touche événement et comme valeur, la fonction liée à cet événement.

                    if event.type == KEYDOWN: #haut = 1: bas = 2: gauche = 3: droite = 4:
                        if event.key == K_w:
                            deplacement = 1
                            Move(1)
                        if event.key == K_s:
                            deplacement = 2
                            Move(2)
                        if event.key == K_a:
                            deplacement = 3
                            Move(3)
                        if event.key == K_d:
                            deplacement = 4
                            Move(4)



            -
            Edité par Anonyme 16 décembre 2014 à 8:18:34

            • Partager sur Facebook
            • Partager sur Twitter

            "Tableau" 2d

            × 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