prevent enemies from shooting themselves and added basic player
collision
This commit is contained in:
parent
bb4ff64e60
commit
8acaaed74b
1 changed files with 17 additions and 3 deletions
20
pyshoot.py
20
pyshoot.py
|
@ -24,11 +24,13 @@ class Globals:
|
||||||
self.die = False
|
self.die = False
|
||||||
self.moving_objects = pygame.sprite.RenderUpdates()
|
self.moving_objects = pygame.sprite.RenderUpdates()
|
||||||
self.bullets_list = pygame.sprite.RenderUpdates()
|
self.bullets_list = pygame.sprite.RenderUpdates()
|
||||||
|
self.bullets_list_player = pygame.sprite.RenderUpdates()
|
||||||
self.bullet_factory = BulletFactory()
|
self.bullet_factory = BulletFactory()
|
||||||
self.enemies_list = pygame.sprite.RenderUpdates()
|
self.enemies_list = pygame.sprite.RenderUpdates()
|
||||||
self.enemies_active_list = pygame.sprite.RenderUpdates()
|
self.enemies_active_list = pygame.sprite.RenderUpdates()
|
||||||
self.enemy_factory = EnemyFactory()
|
self.enemy_factory = EnemyFactory()
|
||||||
self.player = None
|
self.player = None
|
||||||
|
self.players_list = pygame.sprite.RenderUpdates()
|
||||||
|
|
||||||
class Event_Spawn:
|
class Event_Spawn:
|
||||||
def __init__(self, enemy_type, pos):
|
def __init__(self, enemy_type, pos):
|
||||||
|
@ -146,7 +148,7 @@ class Player(Object):
|
||||||
self.shoot_wavepos = 0
|
self.shoot_wavepos = 0
|
||||||
self.shooting = False
|
self.shooting = False
|
||||||
|
|
||||||
globals.bullets_list.add(bullet)
|
globals.bullets_list_player.add(bullet)
|
||||||
|
|
||||||
def start_move(self, vector):
|
def start_move(self, vector):
|
||||||
""" initiate moving sequence """
|
""" initiate moving sequence """
|
||||||
|
@ -390,7 +392,13 @@ def handle_enemies_collisions(collisions):
|
||||||
if enemies != []:
|
if enemies != []:
|
||||||
for e in enemies:
|
for e in enemies:
|
||||||
e.die()
|
e.die()
|
||||||
globals.bullets_list.remove(bullet)
|
globals.bullets_list_player.remove(bullet)
|
||||||
|
|
||||||
|
def handle_player_collisions(collisions):
|
||||||
|
""" take the returned dictionnary from pygame.sprite.groupcollide()"""
|
||||||
|
for bullet, enemies in collisions.iteritems():
|
||||||
|
# show some player reaction ;-)
|
||||||
|
globals.bullets_list.remove(bullet)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Main
|
# Main
|
||||||
|
@ -409,6 +417,7 @@ level = Level()
|
||||||
# create_player
|
# create_player
|
||||||
player = Player(['player1_1.bmp', 'player1_2.bmp'], (50, 50), (0, 0))
|
player = Player(['player1_1.bmp', 'player1_2.bmp'], (50, 50), (0, 0))
|
||||||
globals.player = player
|
globals.player = player
|
||||||
|
globals.players_list.add(player)
|
||||||
|
|
||||||
# background
|
# background
|
||||||
globals.background = pygame.image.load(os.path.join('data', 'background1.bmp')).convert()
|
globals.background = pygame.image.load(os.path.join('data', 'background1.bmp')).convert()
|
||||||
|
@ -422,16 +431,20 @@ while not globals.die:
|
||||||
# erase previously moved objects
|
# erase previously moved objects
|
||||||
globals.moving_objects.clear(globals.screen, globals.background)
|
globals.moving_objects.clear(globals.screen, globals.background)
|
||||||
globals.bullets_list.clear(globals.screen, globals.background)
|
globals.bullets_list.clear(globals.screen, globals.background)
|
||||||
|
globals.bullets_list_player.clear(globals.screen, globals.background)
|
||||||
globals.enemies_list.clear(globals.screen, globals.background)
|
globals.enemies_list.clear(globals.screen, globals.background)
|
||||||
|
|
||||||
# update game logic
|
# update game logic
|
||||||
globals.moving_objects.update()
|
globals.moving_objects.update()
|
||||||
globals.bullets_list.update()
|
globals.bullets_list.update()
|
||||||
|
globals.bullets_list_player.update()
|
||||||
globals.enemies_list.update()
|
globals.enemies_list.update()
|
||||||
|
|
||||||
# collisions
|
# collisions
|
||||||
ret = pygame.sprite.groupcollide(globals.bullets_list, globals.enemies_active_list, False, False)
|
ret = pygame.sprite.groupcollide(globals.bullets_list_player, globals.enemies_active_list, False, False)
|
||||||
handle_enemies_collisions(ret)
|
handle_enemies_collisions(ret)
|
||||||
|
ret = pygame.sprite.groupcollide(globals.bullets_list, globals.players_list, False, False)
|
||||||
|
handle_player_collisions(ret)
|
||||||
|
|
||||||
|
|
||||||
# add player (if it's not already in the group). ugly, but ok for now.
|
# add player (if it's not already in the group). ugly, but ok for now.
|
||||||
|
@ -440,6 +453,7 @@ while not globals.die:
|
||||||
# drawing
|
# drawing
|
||||||
rectlist = globals.moving_objects.draw(globals.screen)
|
rectlist = globals.moving_objects.draw(globals.screen)
|
||||||
rectlist.extend(globals.bullets_list.draw(globals.screen))
|
rectlist.extend(globals.bullets_list.draw(globals.screen))
|
||||||
|
rectlist.extend(globals.bullets_list_player.draw(globals.screen))
|
||||||
rectlist.extend(globals.enemies_list.draw(globals.screen))
|
rectlist.extend(globals.enemies_list.draw(globals.screen))
|
||||||
|
|
||||||
pygame.display.update(rectlist)
|
pygame.display.update(rectlist)
|
||||||
|
|
Loading…
Reference in a new issue