Pythonで単純な2Dマップ座標ジェネレーターをテストしようとしています。x配列とy配列を使用してタイルオブジェクトを作成し、座標にアクセスしてそれらのプロパティを変更できるようにします。
これにより、マップオブジェクトが作成され、2D座標平面のタイルで塗りつぶされます。
map = [[ Tile(True)
for y in range(MAP_HEIGHT) ]
for x in range(MAP_WIDTH) ]
タイルクラス:
class Tile:
#a tile of the map and its properties
def __init__(self, blocked, type, owner, block_sight = None):
self.blocked = blocked
self.type = type
self.owner = owner
if block_sight is None: block_sight = blocked
self.block_sight = block_sight
プログラムにテキストファイルを1文字ずつ読み取らせて、マップを作成しようとしました。mapxとmapyによって提供される座標にあるオブジェクトをマップに挿入します。
mapx = 0
mapy = 0
filename = str(mapn) + '.txt'
new_map = [[ Tile(True, 0, 0)
for y in range(MAP_HEIGHT) ]
for x in range(MAP_WIDTH) ]
with open(filename) as f:
while True:
c = f.read(1)
if not c:
return new_map
elif (c == '#'):
new_map[mapx][mapy].blocked = False
new_map[mapx][mapy].block_sight = True
new_map[mapx][mapy].type = 0
new_map[mapx][mapy].owner = 0
(さらにいくつかのエリフの後)
if(mapx < MAP_WIDTH):
mapx += 1
elif(mapy < MAP_HEIGHT):
mapy += 1
mapx = 0
これを実行すると、次のエラーが発生します。IndexError:リストインデックスが範囲外です。それはラインを言います
new_map[mapx][mapy].blocked = False
これに責任がある。私が間違っていることについて何か考えはありますか?