Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import math
- from random import randint
- from pygame import mixer
- # <editor-fold desc="Setup and loading graphics">
- #setup
- pygame.init()
- pygame.display.set_caption("Bullet Hell")
- pygame.mouse.set_visible(0)
- fpsClock = pygame.time.Clock()
- running = True
- #base settings
- FPS = 60
- RESOLUTION = (800, 600)
- screen = pygame.display.set_mode(RESOLUTION)
- #basic colors
- RED = (255, 0, 0)
- GREEN = (0, 255, 0)
- BLUE = (0, 0, 255)
- #attack type flags
- wave_on = 0
- single_on = 0
- bomb_on = 0
- #loading images
- heroine = pygame.image.load('assets/heroines/heroine.png')
- background = pygame.image.load('assets/backgrounds/castle_bg.png')
- blue_bullet = pygame.image.load('assets/bullets/blue_bullet.png')
- purple_bullet = pygame.image.load('assets/bullets/purple_bullet.png')
- red_bullet = pygame.image.load('assets/bullets/red_bullet.png')
- boss = pygame.image.load('assets/bosses/boss.png')
- boss = pygame.transform.smoothscale(boss, (100,100))
- #loading music
- mixer.music.load('assets/music/Night of Nights.mp3')
- mixer.music.set_volume(mixer.music.get_volume() - 0.6)
- mixer.music.play()
- # </editor-fold>
- origin = [400, 20]
- class Bullet():
- def __init__(self, pos, angle, birth, speed_mod, bullet_skin):
- self.pos = pos
- self.dir = Angle(angle)
- self.angle = angle
- self.birth = birth
- self.image = bullet_skin
- self.rotated = 0
- self.speed_mod = speed_mod
- def draw(self):
- a = self.get_pos()
- x = a[0]
- y = a[1]
- if not self.rotated:
- self.image = pygame.transform.rotate(self.image, -self.angle + 90)
- self.rotated = 1
- screen.blit(self.image, (x - 10, y - 10))
- def move(self, speed_mod):
- self.pos[0] += speed_mod * bullet.dir[0]
- self.pos[1] += speed_mod * bullet.dir[1]
- def get_pos(self):
- return [round(self.pos[0]), round(self.pos[1])]
- def on_screen(pos):
- return pos[0] > 0 and pos[0] < 800 and pos[1] > 10 and pos[1] < 600
- def is_dead(self):
- return pygame.time.get_ticks() - self.birth > 3000 or not Bullet.on_screen(self.get_pos())
- Bullets = []
- class Player():
- def __init__(self, pos):
- self.pos = pos
- self.moved = pos
- self.image = heroine
- def get_pos(self):
- return [round(self.pos[0]), round(self.pos[1])]
- def draw(self):
- to_blit = [x for x in self.pos]
- to_blit[0] -= 31
- to_blit[1] -= 51
- screen.blit(self.image, to_blit)
- pygame.draw.circle(screen, RED, self.pos, 3)
- def change_pos(self):
- self.old_pos = self.pos
- self.pos = pygame.mouse.get_pos()
- player = Player([400, 450])
- origin = [400, 20]
- class Spawn():
- global origin
- def __init__(self, delay, state, offset):
- self.delay = delay
- self.state = state
- self.offset = offset
- def wave(self, Bullets):
- for x in range(36):
- Bullets.append(Bullet(origin, 10 * x + self.offset, pygame.time.get_ticks(), 5, blue_bullet))
- def single(self, Bullets):
- Bullets.append(Bullet([400, 20], randint(60, 120), pygame.time.get_ticks(), 3, purple_bullet))
- def bomb(self, Bullets):
- for x in range(18):
- Bullets.append(Bullet([100, 100], 20 * x + self.offset, pygame.time.get_ticks(), 6, red_bullet))
- spawn_stuff = Spawn(1, 2, 1)
- def collision(player, bullet, distance):
- return (player.pos[0] - bullet[0]) ** 2 + (player.pos[1] - bullet[1]) ** 2 < distance ** 2
- def Angle(n):
- if n == 0: n = 1
- n = math.pi * n / 180
- x = math.cos(n)
- y = math.sin(n)
- return (x, y)
- spawn = True
- timer = pygame.time.get_ticks()
- while running:
- time = pygame.time.get_ticks()
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- if time - timer > 150:
- spawn = True
- timer = time
- if spawn:
- spawn_stuff.wave(Bullets)
- spawn_stuff.single(Bullets)
- spawn_stuff.bomb(Bullets)
- spawn = False
- screen.blit(background, (0, 0))
- #moving and drawing character
- player.change_pos()
- player.draw()
- #deletes useless bullets
- Bullets = [bullet for bullet in Bullets if not bullet.is_dead()]
- #moving and drawing bullets
- for bullet in Bullets:
- if collision(player, bullet.get_pos(), 5): print("dead")
- bullet.move(bullet.speed_mod)
- bullet.draw()
- screen.blit(boss, (340, 0))
- if timer % 5 == 0:
- print(fpsClock.get_fps())
- pass
- spawn_stuff.offset += 0.5
- fpsClock.tick(FPS)
- pygame.display.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement