1

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()
Rabbid76
  • 202,892
  • 27
  • 131
  • 174
user61698
  • 11
  • 1
  • It was already printing hit when I tested it. – Have a nice day Mar 12 '21 at 04:45
  • The console wasn't cleared. I think I didn't give the share link, let me update that – user61698 Mar 12 '21 at 04:51
  • 1
    A link to an off-site resource is not sufficient. You must add the relevant code to the question! Please read [How to create a Minimal, Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) and [How do I ask a good question?](https://stackoverflow.com/help/how-to-ask). – Rabbid76 Mar 12 '21 at 05:22

0 Answers0