text: # KidsCanCode - Game Development with Pygame video series
  # Shmup game - part 1
  # Video link: https://www.youtube.com/watch?v=nGufy7weyGY
  # Player sprite and movement
  import pygame
  import random
  
  WIDTH = 480
  HEIGHT = 600
  FPS = 60
  
  # define colors
  WHITE = (255, 255, 255)
  BLACK = (0, 0, 0)
  RED = (255, 0, 0)
  GREEN = (0, 255, 0)
  BLUE = (0, 0, 255)
  YELLOW = (255, 255, 0)
  
  # initialize pygame and create window
  pygame.init()
  pygame.mixer.init()
  screen = pygame.display.set_mode((WIDTH, HEIGHT))
  pygame.display.set_caption("Shmup!")
  clock = pygame.time.Clock()
  
  class Player(pygame.sprite.Sprite):
      def __init__(self):
          pygame.sprite.Sprite.__init__(self)
          self.image = pygame.Surface((50, 40))
          self.image.fill(GREEN)
          self.rect = self.image.get_rect()
          self.rect.centerx = WIDTH / 2
          self.rect.bottom = HEIGHT - 10
          self.speedx = 0
          self.speedy = 0
  
      def update(self):
          self.speedx = 0
          self.speedy = 0
          keystate = pygame.key.get_pressed()
          if keystate[pygame.K_LEFT]:
              self.speedx = -8
          if keystate[pygame.K_RIGHT]:
              self.speedx = 8
          self.rect.x += self.speedx
          if self.rect.right > WIDTH:
              self.rect.right = WIDTH
          if self.rect.left < 0:
              self.rect.left = 0
  
          if keystate[pygame.K_UP]:
              self.speedy = -4
          if keystate[pygame.K_DOWN]:
              self.speedy = 4
          self.rect.y += self.speedy
          if self.rect.top < 0:
              self.rect.top = 0
          if self.rect.bottom > HEIGHT:
              self.rect.bottom = HEIGHT
  
  all_sprites = pygame.sprite.Group()
  player = Player()
  all_sprites.add(player)
  
  # Game loop
  running = True
  while running:
      # keep loop running at the right speed
      clock.tick(FPS)
      # Process input (events)
      for event in pygame.event.get():
          # check for closing window
          if event.type == pygame.QUIT:
              running = False
  
      # Update
      all_sprites.update()
  
      # Draw / render
      screen.fill(BLACK)
      all_sprites.draw(screen)
      # *after* drawing everything, flip the display
      pygame.display.flip()
  
  pygame.quit()
  