1

学習体験として簡単な RPG を作成しています。私のコードでは、25x25 グリッドに問題なく表示されているタイルの配列と、タイルがソリッドかどうかに関する True/False 値を含む別の配列があります。後者は機能していません。以下の私のコードでは、印刷ステートメントが到達していない場所に正確に配置されていますが、何が問題なのかよくわかりません。

また、レベルのデータは、ブロックを表す 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

最初のループでファイルを 1 回for読み取るため、2 番目のループで読み取るものは何も残っていません。2 番目のループを開始する前に、ファイルの先頭にシークします。

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 に答える