Python 如何正确解析文本文件中的平铺贴图?

Python 如何正确解析文本文件中的平铺贴图?,python,maps,pygame,tile,Python,Maps,Pygame,Tile,我正在用Python和pygame为一个学校项目制作一个RPG。为了创建这几个贴图,我选择了一些教程中使用的平铺贴图技术,使用*.txt文件 然而,我必须把一些雪碧(树、房子等)切成几块。问题是我没有足够的字符来代表它们了 我还记得,可以将几个字符作为一个字符(例如:将“100”作为一个字符,而不是一个“1”和两个“0”s)和/或在文件中的字符之间放置空格(例如“170 0 2 5 12 48”,读作六个精灵) 但我真的不知道如何使我的程序适应这种方式。我很确定我需要修改文件的读取方式,但是如何

我正在用Python和
pygame
为一个学校项目制作一个RPG。为了创建这几个贴图,我选择了一些教程中使用的平铺贴图技术,使用
*.txt
文件

然而,我必须把一些雪碧(树、房子等)切成几块。问题是我没有足够的字符来代表它们了

我还记得,可以将几个字符作为一个字符(例如:将
“100”
作为一个字符,而不是一个
“1”
和两个
“0”
s)和/或在文件中的字符之间放置空格(例如
“170 0 2 5 12 48”
,读作六个精灵)

但我真的不知道如何使我的程序适应这种方式。我很确定我需要修改文件的读取方式,但是如何修改呢

以下是阅读功能:

class Niveau:
    def __init__(self, fichier):
        self.fichier = fichier
        self.structure = 0

    def generer(self):
        """Méthode permettant de générer le niveau en fonction du fichier.
        On crée une liste générale, contenant une liste par ligne à afficher"""     
        #On ouvre le fichier
        with open(self.fichier, "r") as fichier:
            structure_niveau = []
            #On parcourt les lignes du fichier
            for ligne in fichier:
                ligne_niveau = []
                #On parcourt les sprites (lettres) contenus dans le fichier
                for sprite in ligne:
                    #On ignore les "\n" de fin de ligne
                    if sprite != '\n':
                        #On ajoute le sprite à la liste de la ligne
                        ligne_niveau.append(sprite)
                #On ajoute la ligne à la liste du niveau
                structure_niveau.append(ligne_niveau)
            #On sauvegarde cette structure
            self.structure = structure_niveau

    def afficher(self, fenetre):
        """Méthode permettant d'afficher le niveau en fonction 
        de la liste de structure renvoyée par generer()"""
        #Chargement des images (seule celle d'arrivée contient de la transparence)
        Rocher = pygame.image.load(image_Rocher).convert()
        Buisson = pygame.image.load(image_Buisson).convert()

        #On parcourt la liste du niveau
        num_ligne = 0
        for ligne in self.structure:
            #On parcourt les listes de lignes
            num_case = 0
            for sprite in ligne:
                #On calcule la position réelle en pixels
                x = (num_case+0.5) * taille_sprite
                y = (num_ligne+1) * taille_sprite
                if sprite == 'R':                  #R = Rocher
                    fenetre.blit(Rocher, (x,y))
                if sprite == 'B':
                    fenetre.blit(Buisson,(x,y))

                num_case += 1
            num_ligne += 1
我想你想要的是:

不带任何参数的
split
将把所有连续的空格(包括制表符
'\t'
和换行符
'\n'
)合并到一个拆分中。例如:

"\ta 13 b \t22     6e\n".split() == ['a', '13', 'b', '22', '6e']
请注意,“精灵”的长度不必相同,因此不需要额外的
0
s或
*
s等填充字符。您还可以使用以下方法简化:

可选地,考虑使用逗号分隔的值格式——Python有一个:

a,13,b,22,6e

因此,当前您的文件看起来像
1a13b
,您希望它是
1a13b
,以支持例如
1A13B22A6
?就是这样。我在考虑使用一个不会被读取的字符(例如:1**a**1**3**b**22*a6*),但是空格仍然是一个问题。。
def generer(self):
    with open(self.fichier) as fichier:
        self.structure = [ligne.split() for ligne in fichier]
a,13,b,22,6e