ClearCode

sprites

Mar 11th, 2022
5,152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.97 KB | None | 0 0
  1. import pygame
  2. from settings import *
  3. from random import choice, randint
  4.  
  5. class BG(pygame.sprite.Sprite):
  6.     def __init__(self,groups,scale_factor):
  7.         super().__init__(groups)
  8.         bg_image = pygame.image.load('../graphics/environment/background.png').convert()
  9.  
  10.         full_height = bg_image.get_height() * scale_factor
  11.         full_width = bg_image.get_width() * scale_factor
  12.         full_sized_image = pygame.transform.scale(bg_image,(full_width,full_height))
  13.        
  14.         self.image = pygame.Surface((full_width * 2,full_height))
  15.         self.image.blit(full_sized_image,(0,0))
  16.         self.image.blit(full_sized_image,(full_width,0))
  17.  
  18.         self.rect = self.image.get_rect(topleft = (0,0))
  19.         self.pos = pygame.math.Vector2(self.rect.topleft)
  20.  
  21.     def update(self,dt):
  22.         self.pos.x -= 300 * dt
  23.         if self.rect.centerx <= 0:
  24.             self.pos.x = 0
  25.         self.rect.x = round(self.pos.x)
  26.  
  27. class Ground(pygame.sprite.Sprite):
  28.     def __init__(self,groups,scale_factor):
  29.         super().__init__(groups)
  30.         self.sprite_type = 'ground'
  31.        
  32.         # image
  33.         ground_surf = pygame.image.load('../graphics/environment/ground.png').convert_alpha()
  34.         self.image = pygame.transform.scale(ground_surf,pygame.math.Vector2(ground_surf.get_size()) * scale_factor)
  35.        
  36.         # position
  37.         self.rect = self.image.get_rect(bottomleft = (0,WINDOW_HEIGHT))
  38.         self.pos = pygame.math.Vector2(self.rect.topleft)
  39.  
  40.         # mask
  41.         self.mask = pygame.mask.from_surface(self.image)
  42.  
  43.     def update(self,dt):
  44.         self.pos.x -= 360 * dt
  45.         if self.rect.centerx <= 0:
  46.             self.pos.x = 0
  47.  
  48.         self.rect.x = round(self.pos.x)
  49.  
  50. class Plane(pygame.sprite.Sprite):
  51.     def __init__(self,groups,scale_factor):
  52.         super().__init__(groups)
  53.  
  54.         # image
  55.         self.import_frames(scale_factor)
  56.         self.frame_index = 0
  57.         self.image = self.frames[self.frame_index]
  58.  
  59.         # rect
  60.         self.rect = self.image.get_rect(midleft = (WINDOW_WIDTH / 20,WINDOW_HEIGHT / 2))
  61.         self.pos = pygame.math.Vector2(self.rect.topleft)
  62.  
  63.         # movement
  64.         self.gravity = 600
  65.         self.direction = 0
  66.  
  67.         # mask
  68.         self.mask = pygame.mask.from_surface(self.image)
  69.  
  70.         # sound
  71.         self.jump_sound = pygame.mixer.Sound('../sounds/jump.wav')
  72.         self.jump_sound.set_volume(0.3)
  73.  
  74.     def import_frames(self,scale_factor):
  75.         self.frames = []
  76.         for i in range(3):
  77.             surf = pygame.image.load(f'../graphics/plane/red{i}.png').convert_alpha()
  78.             scaled_surface = pygame.transform.scale(surf,pygame.math.Vector2(surf.get_size())* scale_factor)
  79.             self.frames.append(scaled_surface)
  80.  
  81.     def apply_gravity(self,dt):
  82.         self.direction += self.gravity * dt
  83.         self.pos.y += self.direction * dt
  84.         self.rect.y = round(self.pos.y)
  85.  
  86.     def jump(self):
  87.         self.jump_sound.play()
  88.         self.direction = -400
  89.  
  90.     def animate(self,dt):
  91.         self.frame_index += 10 * dt
  92.         if self.frame_index >= len(self.frames):
  93.             self.frame_index = 0
  94.         self.image = self.frames[int(self.frame_index)]
  95.  
  96.     def rotate(self):
  97.         rotated_plane = pygame.transform.rotozoom(self.image,-self.direction * 0.06,1)
  98.         self.image = rotated_plane
  99.         self.mask = pygame.mask.from_surface(self.image)
  100.  
  101.     def update(self,dt):
  102.         self.apply_gravity(dt)
  103.         self.animate(dt)
  104.         self.rotate()
  105.  
  106. class Obstacle(pygame.sprite.Sprite):
  107.     def __init__(self,groups,scale_factor):
  108.         super().__init__(groups)
  109.         self.sprite_type = 'obstacle'
  110.  
  111.         orientation = choice(('up','down'))
  112.         surf = pygame.image.load(f'../graphics/obstacles/{choice((0,1))}.png').convert_alpha()
  113.         self.image = pygame.transform.scale(surf,pygame.math.Vector2(surf.get_size()) * scale_factor)
  114.        
  115.         x = WINDOW_WIDTH + randint(40,100)
  116.  
  117.         if orientation == 'up':
  118.             y = WINDOW_HEIGHT + randint(10,50)
  119.             self.rect = self.image.get_rect(midbottom = (x,y))
  120.         else:
  121.             y = randint(-50,-10)
  122.             self.image = pygame.transform.flip(self.image,False,True)
  123.             self.rect = self.image.get_rect(midtop = (x,y))
  124.  
  125.         self.pos = pygame.math.Vector2(self.rect.topleft)
  126.  
  127.         # mask
  128.         self.mask = pygame.mask.from_surface(self.image)
  129.  
  130.     def update(self,dt):
  131.         self.pos.x -= 400 * dt
  132.         self.rect.x = round(self.pos.x)
  133.         if self.rect.right <= -100:
  134.             self.kill()
  135.  
Advertisement
Add Comment
Please, Sign In to add comment