1

我正在创建一个简单的 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)

问题究竟出在哪里?我觉得这好像是一个快速修复,但我根本没有看到它。谢谢!

4

3 回答 3

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
于 2013-04-04T22:07:12.420 回答
1

循环:

for lyne in fyle:

...读取所有内容,fyle并且没有任何内容可供循环读取:

for rows in fyle:
于 2013-04-04T22:08:25.847 回答
0

我想你只需要重新打开文件。如果我记得,python 会从你离开的地方继续前进。如果什么都没有,它就无法读取任何内容。您可以重新打开它,也可以使用 fyle.seek(0) 转到第一行的第一个字符。

于 2013-04-04T22:09:54.543 回答