Reputation: 569
I'm trying to make a simple platformer game in Pygame, and have created a basic outline of what I want the level to look like. However, in order to move the character around I need to continually fill the screen with colour, which overlaps the map. How should I proceed?
My code:
import pygame
from pygame import *
import sys
WIN_WIDTH = 680
WIN_HEIGHT = 500
DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display
DEPTH = 32 #standard
FLAGS = 0 #standard
RED = (0, 0, 255)
class Hero():
def __init__(self, x, y):
self.x = x
self.y = y
def appearance(self):
return pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png')
def move_right(self):
self.x += 10
return self.x
def move_left(self):
self.x -= 10
return self.x
player = Hero(56, 420)
player_img = player.appearance()
x = 0
y = 0
platformx = 0
platformy = 0
WHITE = (255, 255, 255)
pygame.init()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
screen.fill(WHITE)
pygame.display.set_caption("Rum Islands")
timer = pygame.time.Clock()
level = [
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", #45 x 25
"P P",
"P P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P PPPPPPPP P",
"P P",
"P PPPPPPP P",
"P PPPPPP P",
"P P",
"P PPPPPPP P",
"P P",
"P PPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P P",
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]
pygame.key.set_repeat(10,10)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x = player.move_left()
elif event.key == pygame.K_RIGHT:
x = player.move_right()
screen.fill(WHITE)
for row in level:
for col in row:
if col == "P":
pygame.draw.rect(screen, RED, (platformx, platformy, 40, 20))
platformx += 15
platformy += 20
platformx = 0
screen.blit(player_img, (x, y))
pygame.display.update()
Upvotes: 0
Views: 141
Reputation: 143216
Your code after modification.
Your problem was platformy
because you never set it to zero again.
import pygame
# --- constants ---
WIN_WIDTH = 680
WIN_HEIGHT = 500
DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display
DEPTH = 32 #standard
FLAGS = 0 #standard
RED = (0, 0, 255)
WHITE = (255, 255, 255)
# --- classes ---
class Hero():
def __init__(self, x, y):
self.image = pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def move_right(self):
self.rect.x += 10
def move_left(self):
self.rect.x -= 10
def draw(self, screen):
screen.blit(self.image, self.rect)
# --- main ---
level = [
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", #45 x 25
"P P",
"P P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P PPPPPPPP P",
"P P",
"P PPPPPPP P",
"P PPPPPP P",
"P P",
"P PPPPPPP P",
"P P",
"P PPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P P",
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",
]
# - init -
pygame.init()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
pygame.display.set_caption("Rum Islands")
pygame.key.set_repeat(10,10)
# - objects -
player = Hero(56, 420)
# - mainloop -
timer = pygame.time.Clock()
while True:
# - events -
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.move_left()
elif event.key == pygame.K_RIGHT:
player.move_right()
# - updates -
# - draws -
screen.fill(WHITE)
platform_x = 0
platform_y = 0
for row in level:
for col in row:
if col == "P":
pygame.draw.rect(screen, RED, (platform_x, platform_y, 40, 20))
platform_x += 15
platform_y += 20
platform_x = 0
player.draw(screen)
pygame.display.update()
timer.tick(25)
Upvotes: 2