我正在用Python和pygame
为学校项目制作一个RPG。为了创建少数地图,我选择了一些教程中介绍的Tile映射技术,使用了*.txt
文件。在
然而,我不得不把一些精灵(树,房子,…)切成几块。问题是我没有足够的字符来代表他们!在
我还记得可以将几个字符作为一个(例如:将"100"
作为一个,而不是作为一个"1"
和两个"0"
)和/或在文件中的字符之间放置空格(例如"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
我想你想要的是^{} :
不带任何参数的
^{pr2}$split
将把所有连续的空格(包括制表符'\t'
和换行符'\n'
)合并为一个拆分。例如:请注意,“sprite”的长度不必相同,因此不需要额外的
0
s或*
s等填充字符或者,考虑使用逗号分隔的值格式-Python有一个whole module (^{}) :
相关问题 更多 >
编程相关推荐