-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalien_invasion.py
89 lines (68 loc) · 2.26 KB
/
alien_invasion.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import pygame
from game.guns.start_gun import StartGun
from fleet import Fleet
from ship import Ship
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard
from pubsub import pub
from event_map import EventMap
class AlienInvasion:
def __init__(self, game_state, settings, screen):
pygame.init()
self.settings = settings
self.game_state = game_state
self.screen = screen
pygame.display.set_caption('Alien Invaders')
self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.ship = Ship(self)
self.fleet = Fleet(self)
self.gun = StartGun(self);
self.fleet.create()
EventMap(self)
self.drawable_components = {
"ship": self.ship,
"sb": self.sb,
"fleet": self.fleet,
"gun": self.gun,
}
self.updateable_components = {
"ship": self.ship,
"fleet": self.fleet,
"gun": self.gun,
}
def game_loop(self):
while self.game_state.is_game_running():
self._check_events()
self._update()
pub.sendMessage(
'move-completed',
app = self
);
self._draw()
def _update(self):
if self.stats.is_active():
for updateable in self.updateable_components.values():
updateable.update()
def _check_events(self):
for event in pygame.event.get():
if hasattr(event, 'key'):
event_name = "event-" + str(event.type) + "." + str(event.key)
else:
event_name = "event-" + str(event.type)
pub.sendMessage(
event_name,
event=event,
app = self
);
def _draw(self):
background_image = pygame.image.load(self.settings.bg_image).convert()
self.screen.blit(background_image, [0, 0])
for drawable in self.drawable_components.values():
drawable.draw(self.screen)
pygame.display.flip()
def change_gun(self, gun):
self.gun = gun
self.drawable_components["gun"] = self.gun
self.updateable_components["gun"] = self.gun