我正在创建一个简单的RPG作为学习体验。在我的代码中,我有一个显示在25x25网格上的瓷砖数组,以及一个单独的数组,其中包含与瓷砖是否为实体有关的真/假值。后者不起作用;在我的下面的代码中,我已经将打印声明准确地放在了未达到的位置,并且我不太确定问题是什么。
此外,该级别的数据只是一个文本文件,其网格为25x25个字符,代表块。
def loadLevel(self, level):
fyle = open("levels/" + level,'r')
count = 0
for lyne in fyle:
if lyne.startswith("|"):
dirs = lyne.split('|')
self.north = dirs[1]
self.south = dirs[2]
self.east = dirs[3]
self.west = dirs[4]
continue
for t in range(25):
tempTile = Tiles.Tile()
tempTile.value = lyne[t]
tempTile.x = t
tempTile.y = count
self.levelData.append(tempTile)
count += 1
rowcount = 0
colcount = 0
for rows in fyle:
print('Doesnt get here!')
for col in rows:
if col == 2:
self.collisionLayer[rowcount][colcount] = False
else:
self.collisionLayer[rowcount][colcount] = True
colcount += 1
print(self.collisionLayer[rowcount[colcount]])
if rows == 2:
self.collisionLayer[rowcount][colcount] = False
else:
self.collisionLayer[rowcount][colcount] = True
rowcount += 1
print(self.collisionLayer)
问题究竟在哪里?我觉得好像是快速修复,但我根本没有看到它。谢谢!
答案 0 :(得分:5)
您使用第一个for
循环读取文件一次,因此没有任何内容可供第二个循环读取。在开始第二个循环之前回到文件的开头:
fyle.seek(0)
虽然我只是将行缓存为列表,如果可能的话:
with open('filename.txt', 'r') as handle:
lines = list(handle)
此外,您可以替换它:
if rows == 2:
self.collisionLayer[rowcount][colcount] = False
else:
self.collisionLayer[rowcount][colcount] = True
使用:
self.collisionLayer[rowcount][colcount] = rows != 2
答案 1 :(得分:1)
循环:
for lyne in fyle:
...读取fyle
的所有内容,并且不会让循环读取任何内容:
for rows in fyle:
答案 2 :(得分:0)
我认为您只需要重新打开该文件即可。如果我记得,python将继续从你离开的地方开始。如果没有任何东西,它就无法读取任何东西。 您可以重新打开它,或使用fyle.seek(0)转到第一行中的第一个字符。