Advertisement
MCreeper12731

Lesson 5 - Methods

Mar 31st, 2025
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.35 KB | None | 0 0
  1. import pygame
  2. pygame.init()
  3.  
  4. width = 1200
  5. height = 600
  6. window = pygame.display.set_mode((width, height))
  7. pygame.display.set_caption("Platformer Game")
  8.  
  9. # Spremenljivke, ki jih bomo potrebovali za igralca
  10. # ---
  11.  
  12. class Player:
  13.     def __init__(self, x, y):
  14.         self.size = 75
  15.         self.position = pygame.Rect(x, y, self.size, self.size)
  16.         self.image = pygame.image.load("images/scratch-cat.png")
  17.         self.image = pygame.transform.scale(self.image, (self.size, self.size))
  18.         self.speed_x = 0
  19.         self.speed_y = 0
  20.         self.on_ground = False
  21.        
  22.  
  23. player = Player(100, 100)
  24.  
  25. platforms = [pygame.Rect(0, height - 50, width, 50), pygame.Rect(300, 500, 200, 20), pygame.Rect(600, 350, 200, 20), pygame.Rect(900, 400, 200, 20)]
  26.  
  27. # ---
  28.  
  29. def resolve_collision(rect_a, rect_b):
  30.     # Compute overlap distances in x and y
  31.     dx1 = rect_b.right - rect_a.left
  32.     dx2 = rect_a.right - rect_b.left
  33.     dy1 = rect_b.bottom - rect_a.top
  34.     dy2 = rect_a.bottom - rect_b.top
  35.  
  36.     # Find the smallest displacement to separate them
  37.     min_dx = min(dx1, dx2)
  38.     min_dy = min(dy1, dy2)
  39.  
  40.     if min_dx < min_dy:
  41.         # Move rect_a left or right
  42.         if dx1 < dx2:
  43.             rect_a.x += dx1  # Move right
  44.         else:
  45.             rect_a.x -= dx2  # Move left
  46.     else:
  47.         # Move rect_a up or down
  48.         if dy1 < dy2:
  49.             rect_a.y += dy1  # Move down
  50.         else:
  51.             player.on_ground = True
  52.             rect_a.y -= dy2  # Move up
  53.    
  54.     return True  # Collision was resolved
  55.  
  56. # Glavna zanka igre
  57. clock = pygame.time.Clock()
  58. running = True
  59. while running:
  60.     for event in pygame.event.get():
  61.         if event.type == pygame.QUIT:
  62.             running = False
  63.  
  64.     window.fill((255, 255, 255))
  65.     # background_image = pygame.image.load("images/New Piskel.png")
  66.     # background_image = pygame.transform.scale(background_image, (width, height))
  67.     # window.blit(background_image, (0, 0))
  68.     # Premikanje igralčevega lika
  69.     # ---
  70.  
  71.     # Vsako ponovitev zanke (vsak frame) dobimo pritisnjene tipke
  72.     # in se glede na njih odločimo, kako bomo igralca premaknili
  73.     keys = pygame.key.get_pressed()
  74.     if keys[pygame.K_d]:
  75.         player.speed_x = 5
  76.     elif keys[pygame.K_a]:
  77.         player.speed_x = -5
  78.     else:
  79.         player.speed_x = 0
  80.  
  81.     if keys[pygame.K_SPACE] and player.on_ground == True:
  82.         player.on_ground = False
  83.         player.speed_y = -25
  84.  
  85.     if player.speed_y < 20:
  86.         player.speed_y += 1
  87.  
  88.  
  89.     player.position.x += player.speed_x
  90.     player.position.y += player.speed_y
  91.  
  92.     if player.position.x < 0:
  93.         player.position.x = 0
  94.     if player.position.x > width - player.size:
  95.         player.position.x = width - player.size
  96.     if player.position.y < 0:
  97.         player.position.y = 0
  98.     if player.position.y > height - player.size:
  99.         player.position.y = height - player.size
  100.    
  101.     for platform in platforms:
  102.         if player.position.colliderect(platform):
  103.             resolve_collision(player.position, platform)
  104.        
  105.     # ---
  106.     # Izris likov
  107.     # ---
  108.  
  109.     window.blit(player.image, player.position)
  110.     for platform in platforms:
  111.         pygame.draw.rect(window, (0, 127, 0), platform)
  112.         # window.blit(slika_ovire, platform)
  113.  
  114.     # ---
  115.  
  116.     pygame.display.update()
  117.     clock.tick(60)
  118.  
  119. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement