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.moving_objects = pygame.sprite.RenderUpdates()
 | 
			
		||||
		self.bullets_list = pygame.sprite.RenderUpdates()
 | 
			
		||||
		self.bullets_list_player = pygame.sprite.RenderUpdates()
 | 
			
		||||
		self.bullet_factory = BulletFactory()
 | 
			
		||||
		self.enemies_list = pygame.sprite.RenderUpdates()
 | 
			
		||||
		self.enemies_active_list = pygame.sprite.RenderUpdates()
 | 
			
		||||
		self.enemy_factory = EnemyFactory()
 | 
			
		||||
		self.player = None
 | 
			
		||||
		self.players_list = pygame.sprite.RenderUpdates()
 | 
			
		||||
 | 
			
		||||
class Event_Spawn:
 | 
			
		||||
	def __init__(self, enemy_type, pos):
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +148,7 @@ class Player(Object):
 | 
			
		|||
			self.shoot_wavepos = 0
 | 
			
		||||
			self.shooting = False
 | 
			
		||||
 | 
			
		||||
		globals.bullets_list.add(bullet)
 | 
			
		||||
		globals.bullets_list_player.add(bullet)
 | 
			
		||||
 | 
			
		||||
	def start_move(self, vector):
 | 
			
		||||
		""" initiate moving sequence """
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +392,13 @@ def handle_enemies_collisions(collisions):
 | 
			
		|||
		if enemies != []:
 | 
			
		||||
			for e in enemies:
 | 
			
		||||
				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
 | 
			
		||||
| 
						 | 
				
			
			@ -409,6 +417,7 @@ level = Level()
 | 
			
		|||
# create_player
 | 
			
		||||
player = Player(['player1_1.bmp', 'player1_2.bmp'], (50, 50), (0, 0))
 | 
			
		||||
globals.player = player
 | 
			
		||||
globals.players_list.add(player)
 | 
			
		||||
 | 
			
		||||
# background
 | 
			
		||||
globals.background = pygame.image.load(os.path.join('data', 'background1.bmp')).convert()
 | 
			
		||||
| 
						 | 
				
			
			@ -422,16 +431,20 @@ while not globals.die:
 | 
			
		|||
	# erase previously moved objects
 | 
			
		||||
	globals.moving_objects.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)
 | 
			
		||||
 | 
			
		||||
	# update game logic
 | 
			
		||||
	globals.moving_objects.update()
 | 
			
		||||
	globals.bullets_list.update()
 | 
			
		||||
	globals.bullets_list_player.update()
 | 
			
		||||
	globals.enemies_list.update()
 | 
			
		||||
 | 
			
		||||
	# 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)
 | 
			
		||||
	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.
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +453,7 @@ while not globals.die:
 | 
			
		|||
	# drawing
 | 
			
		||||
	rectlist = globals.moving_objects.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))
 | 
			
		||||
 | 
			
		||||
	pygame.display.update(rectlist)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue