giganciprogramowania

lekcja 10 - Waz.py

Feb 19th, 2022 (edited)
502
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. import copy
  3. from Kierunek import Kierunek
  4. from Segment import Segment
  5.  
  6. class Waz(pygame.sprite.Sprite):
  7.     def __init__(self):
  8.         #oryginalny obraz glowy
  9.         self.oryginalny_obraz = pygame.image.load("images/head.png")
  10.         #obraz pomocniczny, bedzie sie on zmienial przy zmienie kierunku gracza
  11.         self.obraz = pygame.transform.rotate(self.oryginalny_obraz, 0)
  12.         #wspolrzednie glowy
  13.         self.rect = self.obraz.get_rect(center=(12*32+16, 9*32+16))
  14.         #zmienne odpowiedzialne za kierunek, oraz nowy wyznaczony kierunek
  15.         self.kierunek = Kierunek.GORA
  16.         self.nowy_kierunek = Kierunek.GORA
  17.         #zapisana ostatnia pozycja weza, uzyjemy jej do zmiany pozycji segmentow
  18.         self.ostatnia_pozycja = self.rect
  19.         #informacje o dodaniu nowego segmentu oraz ich lista
  20.         self.dodaj_segment = False
  21.         self.segmenty = []
  22.  
  23.     def zmien_kierunek(self, kierunek):
  24.         zmiana_mozliwa = True
  25.         if kierunek == Kierunek.GORA and self.kierunek == Kierunek.DOL:
  26.             zmiana_mozliwa = False
  27.         if kierunek == Kierunek.DOL and self.kierunek == Kierunek.GORA:
  28.             zmiana_mozliwa = False
  29.         if kierunek == Kierunek.LEWO and self.kierunek == Kierunek.PRAWO:
  30.             zmiana_mozliwa = False
  31.         if kierunek == Kierunek.PRAWO and self.kierunek == Kierunek.LEWO:
  32.             zmiana_mozliwa = False
  33.         if zmiana_mozliwa:
  34.             self.nowy_kierunek = kierunek
  35.  
  36.     def sprawdz_kolizje(self):
  37.         #ugryzienie ogona
  38.         for segment in self.segmenty:
  39.             if self.rect.topleft == segment.pozycja.topleft:
  40.                 return True
  41.  
  42.         #wyjscie poza ekran
  43.         if self.rect.top < 0 or self.rect.top >= 608:
  44.             return True
  45.         if self.rect.left < 0 or self.rect.left >= 800:
  46.             return True
  47.        
  48.         return False
  49.  
  50.     def aktualizuj(self):
  51.         self.kierunek = self.nowy_kierunek
  52.         self.obraz = pygame.transform.rotate(self.oryginalny_obraz, (self.kierunek.value*-90))
  53.  
  54.         self.ostatnia_pozycja = copy.deepcopy(self.rect)
  55.         if self.kierunek == Kierunek.GORA:
  56.             self.rect.move_ip(0, -32)
  57.         if self.kierunek == Kierunek.PRAWO:
  58.             self.rect.move_ip(32, 0)
  59.         if self.kierunek == Kierunek.LEWO:
  60.             self.rect.move_ip(-32, 0)
  61.         if self.kierunek == Kierunek.DOL:
  62.             self.rect.move_ip(0, 32)
  63.        
  64.         #poruszanie segmentami
  65.         for i in range(len(self.segmenty)):
  66.             if i == 0:
  67.                 self.segmenty[i].przesun(self.ostatnia_pozycja)
  68.             else:
  69.                 self.segmenty[i].przesun(self.segmenty[i-1].ostatnia_pozycja)
  70.  
  71.         #dodawanie nowego segmentu
  72.         if self.dodaj_segment:
  73.             nowy_segment = Segment()
  74.  
  75.             nowa_pozycja = None
  76.             if len(self.segmenty) > 0:
  77.                 nowa_pozycja = copy.deepcopy(self.segmenty[-1].pozycja)
  78.             else:
  79.                 nowa_pozycja = copy.deepcopy(self.ostatnia_pozycja)
  80.             nowy_segment.pozycja = nowa_pozycja
  81.             self.segmenty.append(nowy_segment)
  82.             self.dodaj_segment = False
  83.    
  84.     def rysuj_segmenty(self, ekran):
  85.         for segment in self.segmenty:
  86.             ekran.blit(segment.obraz, segment.pozycja)
  87.  
  88.     def jedz_jablko(self):
  89.         self.dodaj_segment = True
Add Comment
Please, Sign In to add comment