-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmap.py
73 lines (59 loc) · 2.35 KB
/
map.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from constants import (INITIAL_ROCK_SPAWN_RATE, INITIAL_ENEMY_SPAWN_RATE,
ENEMY_SPAWN_EVENT, ROCK_SPAWN_EVENT)
import pygame as pg
from models.mine import Mine
from models.star import Star
from engine.geometry import reached_edge, move
from ui.hud import HUD
class Map:
def __init__(self, player):
self.player = player
self.hud = HUD(pg.display.get_surface())
self.rocks = []
self.enemies = []
self.bullets = []
self.score = 0;
self.enemy_spawn_rate = INITIAL_ENEMY_SPAWN_RATE
self.rock_spawn_rate = INITIAL_ROCK_SPAWN_RATE
pg.time.set_timer(ENEMY_SPAWN_EVENT, self.enemy_spawn_rate)
def spawn_enemies(self):
if len(self.enemies) % 2 == 0:
self.enemies.append(Star(self.player.get_position()))
else:
self.enemies.append(Mine(self.player.get_position()))
def update(self):
for bullet in self.bullets:
bullet.update_position(bullet.direction, bullet.speed)
if reached_edge(bullet.get_hit_box_point(),
self.player.get_position()):
self.bullets.remove(bullet)
for enemy in self.enemies:
enemy.update_position(enemy.direction, enemy.speed)
if reached_edge(enemy.position,
self.player.get_position()):
self.enemies.remove(enemy)
continue
enemy.damage(self.bullets)
if enemy.health <= 0:
self.score += enemy.max_health
self.enemies.remove(enemy)
continue
if enemy.is_point_inside_hit_box(
self.player.space_ship.get_apex_point_relative_to(self.player.get_position())):
self.player.health -= enemy.collision_damage
self.enemies.remove(enemy)
continue
def draw(self):
for bullet in self.bullets:
bullet.draw()
for enemy in self.enemies:
enemy.draw()
self.draw_hud()
def draw_hud(self):
self.hud.print_score(self.score)
self.hud.print_health(self.player.health)
def move_objects(self, direction, speed):
for enemy in self.enemies:
enemy.update_position(direction, speed)
for bullet in self.bullets:
bullet.update_position(direction, speed)