I'm working on a platformer in pygame for a school project. Here's the link to my repl.it for reference.
In terms of collisions, we're just printing "hit" in the console everytime mario touches the block. Moving forward, I have no idea how I should do collisions or how the physics would work. Any sort of help would be appreciated here.
import pygame
pygame.init()
#set the background
screen = pygame.display.set_mode((1600, 800))
clock = pygame.time.Clock()
FPS = 45
vel = 3.5
BLACK = (0,0,0)
back = pygame.image.load('background.png')
background = pygame.transform.scale(back, (800,600))
playerimg = pygame.image.load('mariosprite.png').convert_alpha()
#playerimgflipped = pygame.image.load('normalmarioflipped.png')
#playerimgjump = pygame.image.load('finishedjumpingmario.png')
blockonelol = pygame.image.load('oneblock.png')
blockoneX = 100
blockoneY = 415
blockone = pygame.transform.scale(blockonelol,(36,36))
mario = pygame.transform.scale(playerimg, (35,50))
playerX = 10
playerY = 490
isJump = False
jumpCount = 11
run = True
while run:
clock.tick(FPS)
screen.fill(BLACK)
screen.blit(background, (0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
mario_rect = mario.get_rect(topleft = (playerX, playerY))
blockone_rect = blockone.get_rect(topleft = (blockoneX, blockoneY))
condition = mario_rect.colliderect(blockone_rect)
if keys[pygame.K_LEFT] and vel < playerX:
playerX = playerX - vel
#mario = pygame.transform.scale(playerimgflipped, (35,50))
if mario_rect.bottom+10 <=blockone_rect.top:
print('standing')
if keys[pygame.K_RIGHT] and condition == False:
playerX+=vel
mario = pygame.transform.scale(playerimg, (35,50))
if not(isJump) and condition == False:
if keys[pygame.K_UP]:
isJump = True
if(playerY == 490):
mario = pygame.transform.scale(playerimg, (35, 50))
else:
#mario = pygame.transform.scale(playerimgjump, (45,55))
if jumpCount >= -11:
goingdown = 1
if jumpCount < 0:
goingdown = -1
playerY -= (jumpCount ** 2) * 0.25 * goingdown
jumpCount = jumpCount - 1
if(playerY == 490):
mario = pygame.transform.scale(playerimg, (35, 50))
elif condition == True:
jumpCount = 0
else:
isJump = False
jumpCount = 11
if(playerY == 490):
mario = pygame.transform.scale(playerimg, (35, 50))
if mario_rect.colliderect(blockone_rect):
print("hit")
screen.blit(blockone, (blockoneX, blockoneY))
screen.blit(mario, (playerX, playerY))
pygame.display.update()