Advertisement
Tzuro

lekcja 10 - Waz.py

Jun 29th, 2023
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement