Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de transfert d'un fichier dans une liste

Sujet résolu
    23 juillet 2011 à 19:36:34

    Salut oui encore moi :D ),

    J'essaye de charger un niveau depuis un fichier pour essayer de faire du tile mapping.
    J'ai donc un fichier comme ceci:

    11111100111111111111
    10000000000000000001
    10000000000000000001
    10000011111100000001
    10000000000000000001
    10000000000000000001
    10000000000000000001
    10000000000000000001
    10000000000000000001
    10000000000000000001
    10000000000000000001
    10000011111100000001
    10000000000000000001
    10000000000000000001
    11111111111111111111


    Avec donc 1 = mur et 0 = vide.
    Le problème vient du transfert de ce fichier vers une liste à 2 dimensions pour pouvoir charger le niveau depuis celle -ci...

    Voilà le code que j'utilise :

    def chargermap(ecran,choixmap):
    	fichier = open("map/"+choixmap+"/collision.col",'r')
    	map = fichier.read()
    	nombre_bloc_largeur = 20
    	nombre_bloc_hauteur = 15
    	largeur_bloc = 32
    	
    	niveau = nombre_bloc_hauteur * [nombre_bloc_largeur*[0]] #Initialisation du tableau
    	
    	i=0
    	j=0
    	while(i<nombre_bloc_largeur):
    		while(j<nombre_bloc_hauteur):
    			if(map[i * nombre_bloc_largeur + j] == '1'):
    				niveau[i][j]= 1
    			if(map[i * nombre_bloc_largeur + j] == '0'):
    				niveau[i][j]= 0
    			j=j+1
    		i=i+1
    


    Le problème c'est que je me retrouve avec comme liste de sortis:
    [[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]]


    J'ai donc la première ligne qui se répète avec une fin avec des 0 :(

    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2011 à 22:03:49

      Déjà ton tableau "niveau" n'est pas un tableau de lignes indépendantes mais un tableau de lignes identiques entre elles. Quand tu modifies une ligne ça se répercute sur toutes les autres...

      Pour créer un tableau qui fasse ce que tu souhaites (si j'ai bien compris ton code) :

      niveau = []
      for a in range(nombre_bloc_hauteur):
          niveau.append(nombre_bloc_largeur*[0])


      Essaye voir si c'est mieux ?
      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2011 à 22:09:21

        Le problème c'est que je me retrouve avec ce tableau en sortie : :euh:
        [[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 juillet 2011 à 22:19:48

          pourquoi n'utilises-tu pas readlines() au lieu de read()


          with open(FILE, 'r') as f:
              for line in f.readlines():
                  print([i for i in line.strip('\n')])
          
          • Partager sur Facebook
          • Partager sur Twitter
            23 juillet 2011 à 22:33:49

            En effet sa marche mieux :p

            Par contre comment je fait pour récuperer ma liste puisque c'est des print :(

            Je m'était inspiré de ce code : http://www.siteduzero.com/tutoriel-3-1 [...] tml#ss_part_4
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 juillet 2011 à 22:59:03

              Citation

              Par contre comment je fait pour récuperer ma liste puisque c'est des print



              Euh, pas besoin tu traites ta ligne directement

              with open(FILE, 'r') as f:
                  for line in f.readlines():
                      ma_liste = [i for i in line.strip('\n')]
                      # traitement de ma liste --> exemple : traiter(ma_liste)
              
              def traiter(liste):
                  return liste
              
              • Partager sur Facebook
              • Partager sur Twitter
                23 juillet 2011 à 23:10:03

                Sans vouloir paraitre lourd :p je vois pas trop comment faire :(

                Parce que après il faut que je puisse accéder facilement aux éléments de cette liste via par exemple ma_liste[x][y] = 1 ou 0 :euh:
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  23 juillet 2011 à 23:15:58

                  with open(FILE, 'r') as f:
                      conteneur = []
                      for line in f.readlines():
                          ma_liste = [i for i in line.strip('\n')]
                          conteneur.append(ma_liste)
                          
                  print(conteneur)
                  
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème de transfert d'un fichier dans une liste

                  × 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