예, 코드가 현재 실행 중일 때 내 문제가 있습니다. 맵 전체에서 무작위로 생성되는 작은 섬 점이 완벽하게 작동합니다. 그러나 최대한 빨리 사각형지도의 예를하지 할 수있는 모든 작업에 변수 MAPHEIGHT 또는 MAPWIDTH의 값을 변경하면 :Python에서 예기치 않은 배열 값
MAPWIDTH = 40
MAPHEIGHT = 60
그것은 나에게 오류를 제공합니다. 섬 : "\ 사용자 \ 앤드류 \ 바탕 화면 \ 파이썬 \ MapGeneration \의 test.py C", 라인 59,() 파일 "C :
역 추적 (마지막으로 가장 최근 통화) 파일 \ 사용자 \ 앤드류 [RNX] [RNY] = 타일 IndexError tilemap 섬 에서 \ 바탕 화면 \ 파이썬 \ MapGeneration \의 test.py ", 줄 58 : 목록 할당 인덱스 범위를 벗어난
나는 오류가 내 잘못을 수있다 그림 def island() : 무엇이 문제가 될지 모르지만 도움을 청합니다.
from time import sleep
import pygame, sys, random
from pygame.locals import *
##COLORS
BLACK = (0,0,0)
BROWN = (153,76,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
## CONSTANTS REPRESENTING RESOURCES
WATER = 0
GRASS = 1
DIRT = 2
FOREST = 3
## DICTIONARY LINKING RESOURCES TO TEXTURES
textures = {
DIRT : pygame.image.load('images/mountain.png'),
GRASS : pygame.image.load('images/grass.png'),
WATER : pygame.image.load('images/water.png'),
FOREST : pygame.image.load('images/trees.png')
}
## game dimensions
TILESIZE = 16
MAPWIDTH = 50
MAPHEIGHT = 50
TILERECORDX = []
TILERECORDY = []
ISLANDCOUNT = 30
#A LIST OF THE RESOURCES
resources = [DIRT,GRASS,WATER,FOREST]
#LIST TO CREATE TILEMAP
tilemap = [[WATER for w in range(MAPWIDTH)] for h in range(MAPHEIGHT)]
#set up display
pygame.init()
#SETS THE DISPLAY SIZE BASED ON THE SIZE OF THE TILES AND THE AMOUNT OF CELLS SET OUT IN
#MAPWIDTH MAPHEIGHT
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE))
def island():
global TILERECORDX,TILERECORDY
for cnt in range(ISLANDCOUNT):
#chooses a spot on the map to start landmass
rNx = random.randrange(1,MAPWIDTH)
rNy = random.randrange(1,MAPHEIGHT)
TILERECORDX.append(rNx)
TILERECORDY.append(rNy)
if rNx >= MAPWIDTH:#to keep islands from generating on the edges of the map
rNx -= 1
elif rNy >= MAPHEIGHT:#to keep islands from generating on the edges of the map
rNy -= 1
#chooses what tile type ends up there
randomNumber = random.randint(0,30)
if randomNumber <= 1 or randomNumber == 2:
tile = DIRT
elif randomNumber >= 3 and randomNumber <= 16:
tile = FOREST
elif randomNumber >= 17 and randomNumber <= 30:
tile = GRASS
tilemap[rNx][rNy] = tile
island()
while True:
#get user events
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
for row in range(MAPHEIGHT):
for column in range(MAPWIDTH):
DISPLAYSURF.blit(textures[tilemap[row][column]],(column*TILESIZE,row*TILESIZE))
pygame.display.update()
타일 맵을 인쇄하려고 했습니까? – iFlo
'tilemap [rNx] [rNy] = tile'을'tilemap [rNy] [rNx] = tile'으로 변경하면 문제가 해결됩니까? – doctorlove
예! 고쳐! 주위 사람들을 바꿔 놓는 이유가 그것을 고칠 수 있을까요? – user3619596