This code here generates a tiled map
for tiley in range(0,len(level)):
for tilex in range(0,len(level[tiley])):
for tiletype in level[tiley]:
if tiletype == 0:
screen.blit(air, ((tilex*50,tiley*50)))
if tiletype == 1:
screen.blit(grass, ((tilex*50,tiley*50)))
from this 2D list.
level = [[1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1],[1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]]
The pygame window, however, displays a different tilemap entirely from the list provided. Why does it do this?
CodePudding user response:
It looks like you have an extra level of iteration beyond what you need; you only want to loop for x and y, and blit once at each coordinate. Like this:
for tiley in range(len(level)):
for tilex in range(len(level[tiley])):
if level[tiley][tilex] == 0:
screen.blit(air, (tilex * 50, tiley * 50))
else:
screen.blit(grass, (tilex * 50, tiley * 50))
However, you could also make your code cleaner, I think, by avoiding the range(len(...)) antipattern:
for y, row in enumerate(level):
for x, cell in enumerate(row):
if cell == 0:
screen.blit(air, (x * 50, y * 50))
else:
screen.blit(grass, (x * 50, y * 50))
