Tawnymender12


Code/Games

Home Code/Games About me

Bullet Dodger

an endless game were you dodge incoming bullets


The code:


      import pygame
      from sys import exit
      from random import randint

      pygame.init()

      window_size = [800, 400]
      screen = pygame.display.set_mode(window_size, 0, 32)
      pygame.display.set_caption("bullet dodger")
      icon = pygame.image.load('data/gun.png')
      pygame.display.set_icon(icon)

      start_sfx = pygame.mixer.Sound('data/start.wav')
      shoot_sfx = pygame.mixer.Sound('data/shoot.wav')
      jump_sfx = pygame.mixer.Sound('data/jump.wav')
      death_sfx = pygame.mixer.Sound('data/death.wav')

      background_img = pygame.image.load('data/background.png')
      ground_img = pygame.image.load('data/ground.png')

      font = pygame.font.Font('data/Pixeltype.ttf', 50)

      def menu():
          game_name = font.render('bullet dodger', False, (20, 20, 20))
          game_name_rect = game_name.get_rect(center = (400, 50))

          instructions = font.render('press any button to start', False, (20, 20, 20))
          instructions_rect = instructions.get_rect(center = (400, 350))

          while 1:
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      pygame.quit()
                      exit()
                  if event.type == pygame.KEYDOWN:
                      time = int(pygame.time.get_ticks() / 1000)
                      start_sfx.play()
                      game(time)

              screen.fill((230, 230, 230))
              player_img_scaled = pygame.image.load('data\player_resized.png')
              player_img_scaled_rect = player_img_scaled.get_rect(center = (400, 200))
              screen.blit(player_img_scaled, player_img_scaled_rect)
              screen.blit(game_name, game_name_rect)
              screen.blit(instructions, instructions_rect)

              pygame.display.update()

      def game(start_time = 0):
          player_img = pygame.image.load('data/player.png')
          player_rect = player_img.get_rect(midbottom = (50, 300))

          gun_img = pygame.image.load('data/gun.png')
          gun_rect = gun_img.get_rect(bottomright = (800, 300))

          bullet_img = pygame.image.load('data/bullet.png')
          bullet_rect = bullet_img.get_rect(topleft = gun_rect.topright)

          score = 0
          score_text = font.render(f'score: {score}', False, (20, 20, 20))
          score_rect = score_text.get_rect(center = (400, 50))

          gravity = 0
          can_jump = False

          running = True
          while running:
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      exit()
                  if (event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE and can_jump) or (event.type == pygame.KEYDOWN and event.key == pygame.K_UP and can_jump):
                      gravity = -7.5
                      jump_sfx.play()
                      can_jump = False

              score = int(pygame.time.get_ticks() / 1000) - start_time
              score_text = font.render(f'score: {score}', False, (20, 20, 20))

              gravity += 0.25
              player_rect.y += gravity
              if player_rect.bottom >= 300: player_rect.bottom = 300; gravity = 0; can_jump = True

              screen.blit(background_img, (0,0))
              screen.blit(ground_img, (0, 300))
              screen.blit(player_img, player_rect)
              screen.blit(score_text, score_rect)

              bullet_rect.x -= 2.25 + (score / 10)
              screen.blit(bullet_img, bullet_rect)
              if bullet_rect.x <= 0:
                  places_list = [[800, 300], [800, 300], [800, 250]]
                  place = places_list[randint(0, 2)]
                  gun_rect.bottomright = place
                  bullet_rect.topleft = gun_rect.topright
                  shoot_sfx.play()
              if bullet_rect.colliderect(player_rect): death_sfx.play(); dead(score)

              screen.blit(gun_img, gun_rect)


              pygame.display.update()
          else:
              menu()

      def dead(score):
          death_text = font.render(f'score: {score}', False, (20, 20, 20))
          death_text_rect = death_text.get_rect(center = (400, 50))

          instructions = font.render('press any button to restart', False, (20, 20, 20))
          instructions_rect = instructions.get_rect(center = (400, 350))

          while 1:
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      pygame.quit()
                      exit()
                  if event.type == pygame.KEYDOWN:
                      time = int(pygame.time.get_ticks() / 1000)
                      start_sfx.play()
                      game(time)

              screen.fill((230, 230, 230))
              player_img_scaled = pygame.image.load('data\player_resized_dead.png')
              player_img_scaled_rect = player_img_scaled.get_rect(center = (400, 200))
              screen.blit(player_img_scaled, player_img_scaled_rect)
              screen.blit(death_text, death_text_rect)
              screen.blit(instructions, instructions_rect)

              pygame.display.update()

      menu()