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