-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGame.py
More file actions
131 lines (102 loc) · 3.25 KB
/
Game.py
File metadata and controls
131 lines (102 loc) · 3.25 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import os, sys, pygame
sys.path.append(os.getcwd())
from random import randrange, uniform
import Battlecruiser as battle
import Enermy as enermy
import Background as background
pygame.init()
FPS = 45
win_w = 800
win_h = 600
fpsClock = pygame.time.Clock()
screen = pygame.display.set_mode((win_w, win_h))
color = (255, 0, 0)
enermies_num = 10
object_draws = []
event_handlers = []
keyhold_handlers = []
object_updates = []
enermies = []
b = battle.Battlecruiser(screen, [400, 300])
bg = background.Background(screen, [0, 0])
def register_sprite(sprite):
event_handlers.append(sprite.event_handler)
object_draws.append(sprite.draw)
keyhold_handlers.append(sprite.keyhold_handler)
object_updates.append(sprite.update)
def unregiter_sprite(sprite):
event_handlers.remove(sprite.event_handler)
object_draws.remove(sprite.draw)
keyhold_handlers.remove(sprite.keyhold_handler)
object_updates.remove(sprite.update)
def enermy_creator(num):
if enermies.__len__() < num :
gen = True
e = enermy.Enermy(screen, (randrange(10, 790), -10))
for en in enermies : #
if en.do_rect_detect(e.rect, en.rect):
gen = False; break
if gen :
e.speed = (0, randrange(2, 8))
enermies.append(e)
register_sprite(e)
else :
e.kill()
def del_unactive_enermy():
for en in enermies :
if en.y > 600 and not en.active :
enermies.remove(en)
unregiter_sprite(en)
en.kill()
def fire_at_enermy(battle_):
for en in enermies :
en.collision_test(battle_.lasers, battle_.update_score)
def quit_game(event): # quit game
if event.type == pygame.QUIT :
pygame.quit();sys.exit()
if event.type == pygame.KEYDOWN :
if event.key == pygame.K_ESCAPE:
pygame.quit();sys.exit();
def lose_life(battle_):
for en in enermies :
enermies.remove(en)
unregiter_sprite(en)
en.kill()
battle_.reset()
battle_.lives -= 1
battle_.active = True
def game_over(battle_):
if battle_.lives <= 0 :
myfont = pygame.font.SysFont("monospace", 40)
myfont.set_bold(True)
label = myfont.render("Game Over", 10, (255, 0, 0))
screen.blit(label, (250, 300))
battle_.active = False
def update():
screen.fill((40, 40, 40))
if b.lives > 0 :
enermy_creator(10) # maintain 5 enermies
fire_at_enermy(b)
del_unactive_enermy()
for event in pygame.event.get():
quit_game(event) # quit game
for handler_fn in event_handlers:
handler_fn(event) # fire all event handlers
for keyhold_fn in keyhold_handlers:
keyhold_fn() # fire all key hold handlers
for update_fn in object_updates:
update_fn() # fire all objects' update functions
for render_fn in object_draws:
render_fn() # fire all render functions
if b.collision_test(enermies) :
lose_life(b)
game_over(b)
pygame.display.flip()
def game():
# b = battle.Battlecruiser(screen, [400, 300])
register_sprite(bg)
register_sprite(b)
while(True):
update()
fpsClock.tick(FPS)
game() # run