ClearCode

main (finished)

Mar 11th, 2022
4,943
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.06 KB | None | 0 0
  1. import pygame, sys, time
  2. from settings import *
  3. from sprites import BG, Ground, Plane, Obstacle
  4.  
  5. class Game:
  6.     def __init__(self):
  7.        
  8.         # setup
  9.         pygame.init()
  10.         self.display_surface = pygame.display.set_mode((WINDOW_WIDTH,WINDOW_HEIGHT))
  11.         pygame.display.set_caption('Flappy Bird')
  12.         self.clock = pygame.time.Clock()
  13.         self.active = True
  14.  
  15.         # sprite groups
  16.         self.all_sprites = pygame.sprite.Group()
  17.         self.collision_sprites = pygame.sprite.Group()
  18.  
  19.         # scale factor
  20.         bg_height = pygame.image.load('../graphics/environment/background.png').get_height()
  21.         self.scale_factor = WINDOW_HEIGHT / bg_height
  22.  
  23.         # sprite setup
  24.         BG(self.all_sprites,self.scale_factor)
  25.         Ground([self.all_sprites,self.collision_sprites],self.scale_factor)
  26.         self.plane = Plane(self.all_sprites,self.scale_factor / 1.7)
  27.  
  28.         # timer
  29.         self.obstacle_timer = pygame.USEREVENT + 1
  30.         pygame.time.set_timer(self.obstacle_timer,1400)
  31.  
  32.         # text
  33.         self.font = pygame.font.Font('../graphics/font/BD_Cartoon_Shout.ttf',30)
  34.         self.score = 0
  35.         self.start_offset = 0
  36.  
  37.         # menu
  38.         self.menu_surf = pygame.image.load('../graphics/ui/menu.png').convert_alpha()
  39.         self.menu_rect = self.menu_surf.get_rect(center = (WINDOW_WIDTH / 2,WINDOW_HEIGHT / 2))
  40.  
  41.         # music
  42.         self.music = pygame.mixer.Sound('../sounds/music.wav')
  43.         self.music.play(loops = -1)
  44.  
  45.     def collisions(self):
  46.         if pygame.sprite.spritecollide(self.plane,self.collision_sprites,False,pygame.sprite.collide_mask)\
  47.         or self.plane.rect.top <= 0:
  48.             for sprite in self.collision_sprites.sprites():
  49.                 if sprite.sprite_type == 'obstacle':
  50.                     sprite.kill()
  51.             self.active = False
  52.             self.plane.kill()
  53.  
  54.     def display_score(self):
  55.         if self.active:
  56.             self.score = (pygame.time.get_ticks() - self.start_offset) // 1000
  57.             y = WINDOW_HEIGHT / 10
  58.         else:
  59.             y = WINDOW_HEIGHT / 2 + (self.menu_rect.height / 1.5)
  60.  
  61.         score_surf = self.font.render(str(self.score),True,'black')
  62.         score_rect = score_surf.get_rect(midtop = (WINDOW_WIDTH / 2,y))
  63.         self.display_surface.blit(score_surf,score_rect)
  64.  
  65.     def run(self):
  66.         last_time = time.time()
  67.         while True:
  68.            
  69.             # delta time
  70.             dt = time.time() - last_time
  71.             last_time = time.time()
  72.  
  73.             # event loop
  74.             for event in pygame.event.get():
  75.                 if event.type == pygame.QUIT:
  76.                     pygame.quit()
  77.                     sys.exit()
  78.                 if event.type == pygame.MOUSEBUTTONDOWN:
  79.                     if self.active:
  80.                         self.plane.jump()
  81.                     else:
  82.                         self.plane = Plane(self.all_sprites,self.scale_factor / 1.7)
  83.                         self.active = True
  84.                         self.start_offset = pygame.time.get_ticks()
  85.  
  86.                 if event.type == self.obstacle_timer and self.active:
  87.                     Obstacle([self.all_sprites,self.collision_sprites],self.scale_factor * 1.1)
  88.            
  89.             # game logic
  90.             self.display_surface.fill('black')
  91.             self.all_sprites.update(dt)
  92.             self.all_sprites.draw(self.display_surface)
  93.             self.display_score()
  94.  
  95.             if self.active:
  96.                 self.collisions()
  97.             else:
  98.                 self.display_surface.blit(self.menu_surf,self.menu_rect)
  99.  
  100.             pygame.display.update()
  101.             # self.clock.tick(FRAMERATE)
  102.  
  103. if __name__ == '__main__':
  104.     game = Game()
  105.     game.run()
Advertisement
Add Comment
Please, Sign In to add comment