Advertisement
Guest User

Untitled

a guest
Sep 4th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.62 KB | None | 0 0
  1. import pygame
  2. import math
  3. from random import randint
  4. from pygame import mixer
  5.  
  6.  
  7. # <editor-fold desc="Setup and loading graphics">
  8. #setup
  9. pygame.init()
  10. pygame.display.set_caption("Bullet Hell")
  11. pygame.mouse.set_visible(0)
  12. fpsClock = pygame.time.Clock()
  13. running = True
  14.  
  15.  
  16. #base settings
  17. FPS = 60
  18. RESOLUTION = (800, 600)
  19. screen = pygame.display.set_mode(RESOLUTION)
  20.  
  21. #basic colors
  22. RED = (255, 0, 0)
  23. GREEN = (0, 255, 0)
  24. BLUE = (0, 0, 255)
  25.  
  26. #attack type flags
  27. wave_on = 0
  28. single_on = 0
  29. bomb_on = 0
  30.  
  31. #loading images
  32. heroine = pygame.image.load('assets/heroines/heroine.png')
  33. background = pygame.image.load('assets/backgrounds/castle_bg.png')
  34. blue_bullet = pygame.image.load('assets/bullets/blue_bullet.png')
  35. purple_bullet = pygame.image.load('assets/bullets/purple_bullet.png')
  36. red_bullet = pygame.image.load('assets/bullets/red_bullet.png')
  37. boss = pygame.image.load('assets/bosses/boss.png')
  38. boss = pygame.transform.smoothscale(boss, (100,100))
  39.  
  40. #loading music
  41. mixer.music.load('assets/music/Night of Nights.mp3')
  42. mixer.music.set_volume(mixer.music.get_volume() - 0.6)
  43. mixer.music.play()
  44. # </editor-fold>
  45.  
  46. origin = [400, 20]
  47. class Bullet():
  48.     def __init__(self, pos, angle, birth, speed_mod, bullet_skin):
  49.         self.pos = pos
  50.         self.dir = Angle(angle)
  51.         self.angle = angle
  52.         self.birth = birth
  53.         self.image = bullet_skin
  54.         self.rotated = 0
  55.         self.speed_mod = speed_mod
  56.     def draw(self):
  57.         a = self.get_pos()
  58.         x = a[0]
  59.         y = a[1]
  60.         if not self.rotated:
  61.             self.image = pygame.transform.rotate(self.image, -self.angle + 90)
  62.             self.rotated = 1
  63.         screen.blit(self.image, (x - 10, y - 10))
  64.  
  65.     def move(self, speed_mod):
  66.         self.pos[0] += speed_mod * bullet.dir[0]
  67.         self.pos[1] += speed_mod * bullet.dir[1]
  68.  
  69.     def get_pos(self):
  70.         return [round(self.pos[0]), round(self.pos[1])]
  71.  
  72.     def on_screen(pos):
  73.         return pos[0] > 0 and pos[0] < 800 and pos[1] > 10 and pos[1] < 600
  74.  
  75.     def is_dead(self):
  76.         return pygame.time.get_ticks() - self.birth > 3000 or not Bullet.on_screen(self.get_pos())
  77. Bullets = []
  78.  
  79. class Player():
  80.     def __init__(self, pos):
  81.         self.pos = pos
  82.         self.moved = pos
  83.         self.image = heroine
  84.     def get_pos(self):
  85.         return [round(self.pos[0]), round(self.pos[1])]
  86.     def draw(self):
  87.         to_blit = [x for x in self.pos]
  88.         to_blit[0] -= 31
  89.         to_blit[1] -= 51
  90.         screen.blit(self.image, to_blit)
  91.         pygame.draw.circle(screen, RED, self.pos, 3)
  92.     def change_pos(self):
  93.         self.old_pos = self.pos
  94.         self.pos = pygame.mouse.get_pos()
  95. player = Player([400, 450])
  96. origin = [400, 20]
  97. class Spawn():
  98.     global origin
  99.     def __init__(self, delay, state, offset):
  100.         self.delay = delay
  101.         self.state = state
  102.         self.offset = offset
  103.     def wave(self, Bullets):
  104.         for x in range(36):
  105.             Bullets.append(Bullet(origin, 10 * x + self.offset, pygame.time.get_ticks(), 5, blue_bullet))
  106.     def single(self, Bullets):
  107.         Bullets.append(Bullet([400, 20], randint(60, 120), pygame.time.get_ticks(), 3, purple_bullet))
  108.     def bomb(self, Bullets):
  109.         for x in range(18):
  110.             Bullets.append(Bullet([100, 100], 20 * x + self.offset, pygame.time.get_ticks(), 6, red_bullet))
  111. spawn_stuff = Spawn(1, 2, 1)
  112.  
  113. def collision(player, bullet, distance):
  114.     return (player.pos[0] - bullet[0]) ** 2 + (player.pos[1] - bullet[1]) ** 2 < distance ** 2
  115.  
  116. def Angle(n):
  117.     if n == 0: n = 1
  118.     n = math.pi * n / 180
  119.     x = math.cos(n)
  120.     y = math.sin(n)
  121.     return (x, y)
  122.  
  123. spawn = True
  124. timer = pygame.time.get_ticks()
  125.  
  126. while running:
  127.  
  128.     time = pygame.time.get_ticks()
  129.     for event in pygame.event.get():
  130.         if event.type == pygame.QUIT:
  131.             running = False
  132.     if time - timer > 150:
  133.         spawn = True
  134.         timer = time
  135.     if spawn:
  136.         spawn_stuff.wave(Bullets)
  137.         spawn_stuff.single(Bullets)
  138.         spawn_stuff.bomb(Bullets)
  139.         spawn = False
  140.  
  141.     screen.blit(background, (0, 0))
  142.  
  143.     #moving and drawing character
  144.     player.change_pos()
  145.     player.draw()
  146.  
  147.     #deletes useless bullets
  148.     Bullets = [bullet for bullet in Bullets if not bullet.is_dead()]
  149.  
  150.     #moving and drawing bullets
  151.     for bullet in Bullets:
  152.         if collision(player, bullet.get_pos(), 5): print("dead")
  153.         bullet.move(bullet.speed_mod)
  154.         bullet.draw()
  155.  
  156.     screen.blit(boss, (340, 0))
  157.     if timer % 5 == 0:
  158.         print(fpsClock.get_fps())
  159.         pass
  160.     spawn_stuff.offset += 0.5
  161.     fpsClock.tick(FPS)
  162.     pygame.display.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement