파이썬에서 간단한 2 차원지도 좌표 생성기를 테스트하려고합니다. x 및 y 배열을 가진 Tile 객체를 만들어 좌표에 액세스하고 속성을 수정할 수 있습니다.Python, 목록 색인 범위를 벗어남 오류
이지도 객체를 생성하고 비행기를 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
는 문자 텍스트 파일의 문자를 읽어 지도를 만들 수 있습니다. mapx와 mapy가 제공하는 좌표에 객체를 삽입합니다. 범위를 벗어리스트 인덱스 : IndexError : (몇 가지 더 elifs 후)
if(mapx < MAP_WIDTH):
mapx += 1
elif(mapy < MAP_HEIGHT):
mapy += 1
mapx = 0
이 실행
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
, 나는이 오류가 발생합니다. 줄을 말합니다
입니다. 내가 뭘 잘못하고 있는거야?
문제를 보여주는 * 최소 * 예를 표시 할 수 있습니까? 그렇지 않으면 우리가 말할 수있는 유일한 것은 인덱스가 범위 내에 있는지 정확하게 확인하지 못한다는 것입니다. – Bakuriu
파일에 정확히'mapx * mapy' 문자가 있습니까? – tom
@ tom 오 예. 파일에 줄이 더 있으면'mapx'는 절대로 '0'으로 재설정되지 않으며 다음 루프에서 값은 범위를 벗어난'MAP_WIDTH'입니다. 'else : break' 또는'else : mapx = 0'을 추가하는 것은'IndexError'를 해결할 것입니다. (이 문제를 피하기 위해 더 똑똑한 방법이 있다고 생각합니다.) – Bakuriu