0

チュートリアルを途中でつまずきながら、繰り返し問題が発生しました (繰り返しと言っているのは、その日をあきらめた後、自然に解決したように見え、後で再び表示されるようになったためです。それを実現するためにやりました)エラーで:

Traceback (most recent call last):
  File "roguelike.py", line 215, in <module>
    make_map()
  File "roguelike.py", line 131, in make_map
    create_room(new_room)
  File "roguelike.py", line 84, in create_room
    map[x][y].blocked = False
IndexError: list index out of range

以下の関連コード:

def create_room(room):
    global map
    #set all tiles inside the room to passable
    for x in range(room.x1 + 1, room.x2):
        for y in range(room.y1 + 1, room.y2):
            map[x][y].blocked = False
            map[x][y].block_sight = False

文字ごとに書いたコードと、チュートリアルで書いたサンプルコードを比較していたところに行き着きましたが、うまくいきませんでした。プログラムで「マップ」を使用するのはこれが初めてで、python のリストに関してはかなり迷っています。

最後に、同じ精神で他の質問を調べましたが、知識が限られているため、それらを自分の状況に適用することはできませんでした.

4

1 に答える 1

0

room.x1 + 1room.x2room.y1 + 1およびの少なくとも 1 つがroom.y2マップを超えています。地図のサイズを確認するか、アクセスを制限してください。

オプション1:

class RoomOutsideError(Exception):
    pass

# ...

def create_room(room):
    global map
    #set all tiles inside the room to passable

    # check for limits and raise exception
    #    (this will need handling outside this function)
    max_x, max_y = len(map) - 1, len(max[0]) - 1
    if room.x1+1 > max_x or room.x2 > max_x or \
       room.y1+1 > max_y or room.y2 > max_y:
           raise RoomOutsideError("Room outside map.")

    for x in range(room.x1 + 1, room.x2):
        for y in range(room.y1 + 1, room.y2):
            map[x][y].blocked = False
            map[x][y].block_sight = False

オプション 2:

def create_room(room):
    global map
    #set all tiles inside the room to passable

    # limit room coordinates. This is free of additional handlings but
    # might create odd rooms in the corner of the map.
    max_x, max_y = len(map) - 1, len(map[0]) - 1
    for x in range(room.x1 + 1, room.x2):
        for y in range(room.y1 + 1, room.y2):
            map[min(max_x, x)][min(max_y, y)].blocked = False
            map[min(max_x, x)][min(max_y, y)].block_sight = False
于 2015-03-01T17:22:20.930 に答える