Question

I have created a resolution, ((900,700)), a level (900 / 32) and (700/32). Although as far as I know these are right the block at the end don't load.

Images:

https://i.stack.imgur.com/0MUZG.png https://i.stack.imgur.com/jJLcn.png

Startup Code:

import pygame
from player import *
from block import *

pygame.init() #Initializes Pygame

screen = pygame.display.set_mode((900,700)) #Sets screen/window resolution

pygame.display.set_caption("Unnamed") #Name of window

gravity = -0.5 #Gravity

#Colors in RGB
black=(0,0,0)
orange=(255,100,0)
yellow=(100,255,0)
red=(255,0,0)
green=(0,255,0)
blue=(0,0,255)
white=(255,255,255)

clock = pygame.time.Clock() #Variable for the "Clock" function in Pygame
player = Player(400,300) #Player's position

level1 = [
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1]
] #Level 1 created within a list

blocklist = [] #Stores the blocks object

for y in range(0,len(level1)): #Produces a list between 0 and the length of level1
    for x in range(0,len(level1)):
        if (level1[y][x]==1):
            blocklist.append(Block(x*32, y*32))

gameLoop=True #Starts loop
while gameLoop:
    for event in pygame.event.get():

        if (event.type == pygame.QUIT): #X button
            gameLoop = False #Stops the loop

    screen.fill(orange) #Fill color

    for block in blocklist:
        block.render(screen) #Renders the blocks/level on the screen

    player.update(gravity, blocklist) #Updates the player's posistion
    player.render(screen) #Renders the player's position on the screen
    clock.tick(60) #Frames Per Second
    pygame.display.flip() #Updates Screen

pygame.quit() #Quits Pygame
Was it helpful?

Solution

Your bounds iterating over the matrix look wrong:

for y in range(0,len(level1)): #Produces a list between 0 and the length of level1
    for x in range(0,len(level1[0])):
        if (level1[y][x]==1):
            blocklist.append(Block(x*32, y*32))

Because your level is not a square, you have to make sure that you iterate over the actual length of the axis, not the other axis.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top