1
我正在爲一個學校項目製作一個使用Python的RPG和pygame
。爲了創建少量地圖,我選擇了我在一些教程中看到的Tile Mapping技術,使用*.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
所以目前你的文件看起來像'1a13b'你'd喜歡它是'1 a 1 3 b'而不是,以支持例如'1 a 1 3 b 22 a6'? – jonrsharpe
就是這樣。我正在考慮使用一個不會得到幫助的角色(例如:1 ** a ** 1 ** 3 ** b ** 22 * a6 *),但這個空間仍然是個問題。 – user3599170