Advertisement
giganciprogramowania

lekcja 13 - Kulka.py

Mar 4th, 2022
608
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.34 KB | None | 0 0
  1. import pygame
  2. import random
  3.  
  4. SZEROKOSC_EKRANU = 1024
  5. WYSOKOSC_EKRANU = 800
  6. vec = pygame.math.Vector2
  7.  
  8. class Kulka(pygame.sprite.Sprite):
  9.     def __init__(self):
  10.         super(Kulka, self).__init__()
  11.         self.obraz = pygame.image.load("images/ball.png")
  12.         self.zresetuj_pozycje()
  13.         self.r = 16
  14.         self.przegrana = False
  15.  
  16.     #resetowanie pozycji
  17.     def zresetuj_pozycje(self):
  18.         self.wspolrzedne = vec(SZEROKOSC_EKRANU/2, WYSOKOSC_EKRANU-140)
  19.         self.pozycja = self.obraz.get_rect(center=self.wspolrzedne)
  20.         self.wektor = vec(0, -10)
  21.         self.kat_nachylenia = random.randrange(-30, 30)
  22.         self.wektor.rotate_ip(self.kat_nachylenia)
  23.         self.przegrana = False
  24.    
  25.     #aktualizacja
  26.     def aktualizuj(self, platforma, klocki):
  27.         self.wspolrzedne += self.wektor
  28.         self.pozycja.center = self.wspolrzedne
  29.         self.sprawdz_kolizje(platforma, klocki)
  30.  
  31.     #sprawdz wszystkie mozliwe kolizje
  32.     def sprawdz_kolizje(self, platforma, klocki):
  33.         #krawedzie ekranu
  34.         if self.pozycja.x <= 0:
  35.             self.wektor.x *= -1
  36.         if self.pozycja.right >= SZEROKOSC_EKRANU:
  37.             self.wektor.x *= -1
  38.         if self.pozycja.top <= 0:
  39.             self.wektor.y *= -1
  40.         if self.pozycja.bottom >= WYSOKOSC_EKRANU:
  41.             self.przegrana = True
  42.  
  43.         #kolizja z platforma
  44.         if self.pozycja.colliderect(platforma.pozycja):
  45.             self.wektor.y *= -1
  46.             self.wektor.x += platforma.porusza_sie*5
  47.             if self.wektor.x < -10: self.wektor.x = -10
  48.             if self.wektor.x > 10: self.wektor.x = 10
  49.  
  50.         #kolizja z klockami
  51.         for klocek in klocki:
  52.             #nastapila kolizja
  53.             if self.kolizja_z_klockiem(self, klocek):
  54.                 klocek.uderzenie()
  55.                 break
  56.  
  57.     #metoda pomocnicza do kolizji z klockiem
  58.     def kolizja_z_klockiem(self, kulka, klocek):
  59.         dystans_x = abs(kulka.pozycja.centerx - klocek.pozycja.centerx) - klocek.pozycja.w / 2
  60.         dystans_y = abs(kulka.pozycja.centery - klocek.pozycja.centery) - klocek.pozycja.h / 2
  61.  
  62.         if dystans_x < kulka.r and dystans_y < kulka.r:
  63.             if dystans_x < dystans_y:
  64.                 self.wektor.y *= -1
  65.             else:
  66.                 self.wektor.x *= -1
  67.             return True
  68.         return False
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement