Pygame probleme beim Welt erstellen mithilfe einer CSV Datei?
Anbei stelle ich meinen Code zur verfügung (gekürzt)
Für ein Schulprojekt erstelle ich ein spiel mit Pygame.
um eine Welt zu erstellen nutze ich eine CSV Datei.
Diese Datei wird dann ausgewertet aber dabei tritt immer wieder ein Fehler auf:
"line 292, in <module>
world_data[x][y] = int(tile)
IndexError: list assignment index out of range"
Leider habe ich keine Möglichkeit gefunden dieses Problem zu lösen, weshalb ich hier Hilfesuchen möchte. Ich freue mich über jede Antwort.
Vielen Dank fürs Helfen :)
img_list = []
for x in range(Tile_types):
img = pygame.image.load(f"C:/Users/paull/OneDrive/Dokumente/Informatik/img/Tile/{x}.png")
img = pygame.transform.scale(img, (Tile_size *1, Tile_size *1))
img_list.append(img)
class World():
def __init__(self):
self.obstacle_list = []
def process_data(self, data):
self.level_length = len(data[0])
for y, row in enumerate(data):
for x, tile in enumerate(row):
if tile >= 0:
img = img_list[tile]
img_rect = img.get_rect()
img_rect.x = x * Tile_size
img_rect.y = y * Tile_size
tile_data = (img, img_rect)
if tile >= 0 and tile <= 7:
self.obstacle_list.append(tile_data)
elif tile >=8 and tile <= 10:
decoration = Decoration(img, x * Tile_size, y * Tile_size)
decoration_group.add(decoration)
elif tile == 11:
player = Soldier("player", x * Tile_size, y * Tile_size, 1, 3)
health_bar = Health(10, 10, player.health, player.health)
elif tile == 12:
boost = Boost(img, x * Tile_size, y * Tile_size)
boost_group.add(boost)
elif tile == 13:
boost_2 = Boost_2(img, x*Tile_size, y * Tile_size)
boost_2_group.add(boost_2)
elif tile >=14 and tile <= 15:
spike = Spike(img, x*Tile_size, y * Tile_size)
spike_group.add(spike)
return player, health_bar
def draw(self):
for tile in self.obstacle_list:
tile[1][0] += screen_scroll
screen.blit(tile[0], tile[1])
world_data = []
for Row in range(Rows):
r = [-1]* Cols
world_data.append(r)
with open(f"C:/Users/paull/OneDrive/Dokumente/Informatik/img/Level/level{level}_data.csv", newline="") as csvfile:
reader = csv.reader(csvfile, delimiter=";")
for x, row in enumerate(reader):
for y, tile in enumerate(row):
world_data[x][y] = int(tile)
world = World()
player = world.process_data(world_data)
1 Antwort
Hast du den Code (den ich mir jetzt nicht die Mühe mache, komplett zu lesen) denn selbst geschrieben? Mich wundert, dass es an diesem Punkt erst scheitern sollte.
world_data[x][y] = int(tile)
IndexError: list assignment index out of range
Das bedeutet, dass du in einen Index schreiben willst, den es nicht gibt. Die Liste ist also nicht so groß, wie du es erwartest.
Vielleicht sind einfach zu viele Elemente in der Datei. Schau dir an, wie groß du die Liste überhaupt initialisiert hast und welche Werte x und y tatsächlich annehmen. Das geht mit einem Debugger oder notfalls mit ein paar verstreuten print()-Aufrufen.