コード例 #1
0
    def check_collisions(self):
        collided_aliens = sprite.groupcollide(self.aliens, self.player_bullets,
                                              False, False)
        collided_bonus = sprite.groupcollide(self.bonus, self.player_bullets,
                                             False, False)
        hit_players = sprite.groupcollide(self.players, self.alien_bullets,
                                          False, False)
        collided_players_with_aliens = sprite.groupcollide(
            self.players, self.aliens, False, False)

        for alien in collided_aliens:
            for bullet in collided_aliens[alien]:
                bullet.hit(alien)

        for bonus in collided_bonus:
            for bullet in collided_bonus[bonus]:
                bullet.hit(bonus)

        for player in hit_players:
            for bullet in hit_players[player]:
                bullet.hit(player)

        for player in collided_players_with_aliens:
            for alien in collided_players_with_aliens[player]:
                alien.hit(player)
コード例 #2
0
    def collision(self):
        bullets = Group()
        bullets.add(self.player.bullets)
        bullets.add(self.room.enemies_bullets)

        groupcollide(bullets, self.room.walls, True, False)
        spritecollideany(self.player,
                         self.room.enemies_bullets,
                         collided=self.__collide_with('bullet'))
        groupcollide(self.room.enemies,
                     self.player.bullets,
                     False,
                     False,
                     collided=self.__collide_with('bullet'))

        spritecollideany(self.player,
                         self.room.hearts,
                         collided=self.__collide_with('heart'))
        spritecollideany(self.player,
                         self.room.coins,
                         collided=self.__collide_with('coin'))
        spritecollideany(self.player,
                         self.room.energy_orbs,
                         collided=self.__collide_with('energy_orb'))

        if self.room.portal is not None:
            entered = self.player.rect.colliderect(self.room.portal.rect)
            if entered:
                self.new_room()
                self.player.rooms_survived += 1
コード例 #3
0
def run_game():
    pygame.init()  # intitialize all the pygame modules
    game_settings = Settings()
    screen = pygame.display.set_mode(
        game_settings.screen_size)  # Set the screen size with set_mode
    pygame.display.set_caption(
        "Monster Attack")  # set teh message on the status bar
    hero = Hero(
        screen)  # set a variable equal to the class and pass it the screen
    bullets = Group()  #set the bullets to group
    bad_guy = Group()
    bad_guy.add(Bad_guy(screen))

    tick = 0

    while 1:  # run this loop forever...
        gf.check_events(
            hero, bullets, game_settings, screen
        )  # call gf (aliased for game_functions module) and get the check_events method
        hero.update()  #update the hero location
        bad_guy.update(hero, game_settings.enemy_speed)
        groupcollide(bullets, bad_guy, True, True)
        tick += 1
        if tick % 150 == 0:
            bad_guy.add(Bad_guy(screen))
        bullets.update()  # call the update method in the while loop
        gf.update_screen(game_settings, screen, hero, bullets,
                         bad_guy)  # call the update_screen
        for bullet in bullets:  #get rid of bullets that are off the screen
            if bullet.rect.left <= 1000:  #bullet bottom is at the top of the screen
                bullets.remove(bullet)  #call remove() against the group
コード例 #4
0
ファイル: 6-main.py プロジェクト: tkepassport39/game-tutorial
 def simulate(self, time_delta):
     super().simulate(time_delta)
     player = self.groups["player"]
     bullets = self.groups["bullets"]
     enemies = self.groups["enemy"]
     groupcollide(player, enemies, True, True)
     groupcollide(enemies, bullets, True, True)
コード例 #5
0
ファイル: main.py プロジェクト: Grug16/Save-the-Robots-Game
    def update(self):
        if self.is_gameover():
            self.player.kill()

        self.spawnticker += 1
        
        if self.spawnticker >= self.spawntime:
            #print "ICE SPAWNED"
            self.meteors.add(IceMeteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "ice"))
	    
        if self.spawnticker >= self.spawntime:
            #print "spawned!"
            self.meteors.add(RockMeteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "rock"))
            self.spawnticker = 0
		
	#update
        self.meteors.update()
        ImpactGroup.impacts.update()
        self.player.update()
	ShieldGroup.shields.update()
	FallingGroup.fallings.update()
    
	#collisions
        coll = groupcollide(self.player_grp, ImpactGroup.impacts, False, False)
        for robot in coll:
            robot.damage(coll[robot][0])
	    
        coll = groupcollide(self.robot_grp, ImpactGroup.impacts, False, False)
        for robot in coll:
            robot.damage(coll[robot][0])
コード例 #6
0
ファイル: 18.py プロジェクト: s2t2/game-tutorial
 def simulate(self, time_delta):
     super().simulate(time_delta)
     player = self.groups[sprites.Player.group]
     bullets = self.groups[sprites.Bullet.group]
     enemies = self.groups[sprites.Enemy.group]
     groupcollide(player, enemies, True, True)
     groupcollide(enemies, bullets, True, True)
コード例 #7
0
def run_game():
    tick = 0
    while 1923014810498219048120948:
        if game_settings.game_active:
            game_func.check_events(screen, game_settings, squares, characters,
                                   bullets)
            # screen.fill(game_settings.bg_color);
            tick += 1
            if tick % 30 == 0 or tick == 1:
                dinosaurs.add(Dinosaur(screen, game_settings))

            dinosaur_got_shot = groupcollide(dinosaurs, bullets, False, False)
            character_got_hit = groupcollide(dinosaurs, characters, False,
                                             True)
            for dinosaur in dinosaur_got_shot:
                # print dinosaur;
                if dinosaur.yard_row == dinosaur_got_shot[dinosaur][
                        0].yard_row:
                    bullets.remove(dinosaur_got_shot[dinosaur][0])
                    dinosaur.hit(1)
                    if (dinosaur.health <= 0):
                        dinosaurs.remove(dinosaur)
                        # os.system("say ow")
                        game_settings.dinosaur_in_row[dinosaur.yard_row] -= 1

        game_func.update_screen(screen, game_settings, background, dinosaurs,
                                squares, characters, bullets, tick)
        pygame.display.flip()
コード例 #8
0
def run_game():
	tick = 0;
	while 1:
		gf.check_events(screen,game_settings, squares, plants,bullets,icons);
		if game_settings.game_active:
			tick += 1;
			if tick % 30 == 0:
				zombies.add(Zombie(screen,game_settings));

			zombies_hit = groupcollide(zombies, bullets, False, False);
			# print zombies_hit;
			for zombie in zombies_hit:
				# print zombie;
				# print zombies_hit[zombie];
				if zombie.yard_row == zombies_hit[zombie][0].yard_row:
					# print "Same row!!!";
					bullets.remove(zombies_hit[zombie][0]);
					zombie.hit(1);
					if(zombie.health <= 0):
						zombies.remove(zombie);
						game_settings.zombie_in_row[zombie.yard_row] -= 1;
						game_settings.zombies_killed += 1;
			# Create a dictionary with a key of Zombie and a value of a list of Plants that zombie has colided with
			zombies_eating = groupcollide(zombies, plants, False, False);
			# Loop through the dictionary
			for zombie in zombies_eating:
				# Set a var for the Plant (to save our eyes)
				damaged_plant = zombies_eating[zombie][0];
				# Check to see if the zombie and plant are in the same row
				if zombie.yard_row == damaged_plant.yard_row:
					# Zombie has run into a plant in it's row
					# start/continue eating... stop moving if neccessary
					zombie.moving = False;
					# Check to see if zombie takes a bite
					if time.time() - zombie.started_eating > zombie.damage_time:
						# print "Zombie just took a bite";
						# Run chomp
						zombie.zombie_chomp(damaged_plant);
						# plant.take_damage();
						# update zombies last bite time
						zombie.started_eating = time.time()
						# remove the plant if it's 0 or below
						if damaged_plant.health <= 0:
							plants.remove(damaged_plant);
							# start the zombie march again
							zombie.moving = True;

# zombies_eating = {
# 	"key": 2,
# 	<Zombie>: [
# 			<Plant>,
# 			<Plant>,
# 			<Plant>,
# 			<Plant>
# 		]
# }

		gf.update_screen(screen,game_settings,background,zombies,squares,plants,bullets,tick,icons);		
		pygame.display.flip();
コード例 #9
0
 def simulate(self, time_delta):
     super().simulate(time_delta)
     self.spawner.spawn(time_delta)
     player = self.groups[Player.group]
     lasers = self.groups[Laser.group]
     enemies = self.groups[Enemy.group]
     groupcollide(player, enemies, True, True)
     groupcollide(enemies, lasers, True, True)
コード例 #10
0
def run_game():
	global frame
	# ** -- INIT ALL PYGAME STUFF -- **
	pygame.init()
	# ** -- set up a tuple for the screen size, horiz, vert -- **
	screen_size = (1000, 800)
	# ** -- setting background color with RGB -- **
	background_color = (Red, Green, Blue)
	# if (frame % 600 == 0):
	# 	background_color = (randint(0,255), randint(0,255), randint(0,255))
	# ** -- create screen size -- **
	screen = pygame.display.set_mode(screen_size)
	# **  -- set a caption on terminal window -- **
	pygame.display.set_caption("A Heroic 3rd Person Shooter")

	the_player = Player(screen, './images/Hero.png', 100, 100)
	bad_dude = Enemy(screen)
	the_player_group = Group()
	the_player_group.add(the_player)
	enemies = Group()
	enemies.add(bad_dude)
	bullets = Group()



# ** -- Main game loop. Run forever or until break -- **
	while 1:
		frame += 1
		if (frame % 100 == 0):
			enemies.add(Enemy(screen))
# ** -- Fill screen with background color -- **
		screen.fill(background_color)
		if (frame % 3600 == 0):
			background_color = (randint(0,255), randint(0,255), randint(0,255))	
		# snail_rave(screen,frame,background_color)	
		# ** -- the escape hatch (from while) -- **
		check_events(screen,the_player,bullets)
		# clear the screen for the next time through the loop

		for player in the_player_group:
			the_player.draw_me()
		
		for bad_dude in enemies: 
			bad_dude.draw_me()
			bad_dude.update_me(the_player)

		# update and draw the bullets
		for bullet in bullets:
			bullet.draw_bullet()
			bullet.update()
	
		hero_died = groupcollide(the_player_group,enemies,True,False)
		bullet_death = groupcollide(bullets,enemies,True,True)

		pygame.display.flip()
コード例 #11
0
def run_game():
	# Init all the pygame stuff
	pygame.init()
	# Set up a tuple for the screensize, (horiz,vert)
	screen_size = (1000,800)
	# Set up a tuple for the bg color
	background_color = (82,111,53)

	# Create a pygame screen to use 
	screen = pygame.display.set_mode(screen_size)
	# Set a caption on the terminal window
	pygame.display.set_caption("A heroic 3rd person shooter")

	the_player = Player(screen,'./images/Hero.png',100,100)
	the_player_group = Group()
	the_player_group.add(the_player)
	bad_guy = Enemy(screen)
	enemies = Group()
	enemies.add(bad_guy)
	bullets = Group()

	tick = 0

	# Main game loop. Run forever... (or until break)
	while 1:
		tick += 1
		if tick % 50 == 0:
			enemies.add(Enemy(screen))
		screen.fill(background_color)

		check_events(the_player, screen, bullets)

		# Draw the player
		for player in the_player_group:
			player.draw_me()

		# Update and Draw the bad guy
		for bad_guy in enemies:
			bad_guy.update_me(the_player)
			bad_guy.draw_me()

		# Update and draw the bullets
		for bullet in bullets:
			bullet.update()
			bullet.draw_bullet()

		# Check for collisions...
		hero_died = groupcollide(the_player_group, enemies, True, False)
		# print hero_died
		bullet_hit = groupcollide(bullets,enemies,True,True)
		print bullet_hit


		# Clear the screen for the next time through the loop
		pygame.display.flip()
コード例 #12
0
def run_game():
    #Init all pygame stuff
    pygame.init()  #pygame is an object and init() is a method
    #Set up a tuple for the screen_size(horiz, vert)
    screen_size = (1000, 800)
    #Set up a tuple for the background color
    background_color = (82, 111, 53)  #RGB
    #Create a pygame screen to use
    screen = pygame.display.set_mode(
        screen_size)  #set_mode is looking for a tuple from the pygame docs
    #Set a caption on the terminal window
    pygame.display.set_caption("A Heroic 3rd Person Shooter")

    the_player = Player(screen, "./images/Hero.png", 100, 100)
    bad_guy = Enemy(screen)
    the_player_group = Group()
    the_player_group.add(
        the_player)  #"add" is like append since this is owned by pygame
    enemies = Group()
    enemies.add(bad_guy)
    bullets = Group()

    tick = 0

    #Main game loop. Run forever... (or until break)
    while 1:  #use "while 1" if the code is fairly simple (game_on = True for more complex)
        tick += 1
        if tick % 50 == 0:
            enemies.add(Enemy(screen))
        screen.fill(background_color)

        check_events(the_player, screen, bullets)

        #Draw the player
        for player in the_player_group:  #player will only be drawn based on hero_died below
            player.draw_me()

        #Update and draw the bullets
        for bullet in bullets:
            bullet.update()
            bullet.draw_bullet()

        #Update and draw the bad guy
        for bad_guy in enemies:
            bad_guy.update_me(the_player)
            bad_guy.draw_me()

        #Check for collisions...
        hero_died = groupcollide(the_player_group, enemies, True,
                                 False)  #will make hero die when they collide
        # print hero_died
        groupcollide(bullets, enemies, True, True)

        #Clear the screen for the next time through the loop
        pygame.display.flip()
コード例 #13
0
 def simulate(self, time_delta):
     self.run_time += time_delta
     while self.next_spawn <= self.run_time:
         sprites.Enemy(self, self.next_x)
         self.next_spawn, self.next_x = next(self.spawn)
     super().simulate(time_delta)
     player = self.groups[sprites.Player.group]
     bullets = self.groups[sprites.Bullet.group]
     enemies = self.groups[sprites.Enemy.group]
     groupcollide(player, enemies, True, True)
     groupcollide(enemies, bullets, True, True)
コード例 #14
0
ファイル: game.py プロジェクト: MichaelGaynor/shooter_pygame
def run_game():
    # INITIALIZE ALL THE PYGAME STUFF
    pygame.init()
    # Set up a tuple for the screen size: (horizontal, vertical)
    screen_size = (1000, 800)
    # Set up a tuple for the bg color
    # background_color = (140,200,150)
    background_color = (255, 245, 255)

    # Create a pygame screen to use
    screen = pygame.display.set_mode(screen_size)
    # Set a caption on the terminal window
    pygame.display.set_caption("MIND BULLETS")

    the_player = Player(screen, "./images 2/Hero.png", 100, 100)
    # a_bullet = Bullet(screen,the_player,)
    the_player_group = Group()
    the_player_group.add(the_player)
    the_enemy = Enemy(screen)
    enemies = Group()
    enemies.add(the_enemy)
    bullets = Group()

    tick = 0

    # Main game loop run forever or until break
    while 1:
        tick += 1
        if tick % 50 == 0:
            enemies.add(Enemy(screen))
        screen.fill(background_color)
        # The escape hatch from while

        check_events(the_player, screen, bullets)

        # Draw the player
        for player in the_player_group:
            player.draw_me()

        for enemy in enemies:
            enemy.draw_me()
            enemy.update_me(the_player)

        for bullet in bullets:
            bullet.update()
            bullet.draw_bullet()

        player_died = groupcollide(the_player_group, enemies, True, False)
        bullet_hit = groupcollide(bullets, enemies, True, True)
        # Clear the screen for the next time through the loop
        pygame.display.flip()
コード例 #15
0
 def update(self):
     self.player.move()
     self.shots.update()
     self.alien_shots.update()
     self.aliens.update()
     for a in self.aliens:
         shot = a.get_shot()
         if shot:
             self.alien_shots.add(shot)
     self.draw()
     groupcollide(self.shots, self.aliens, True, True, collided=collide_mask)
     if spritecollideany(self.player, self.alien_shots, collided=collide_mask):
         self.game.exit()
     if not self.aliens:
         self.game.exit()
コード例 #16
0
ファイル: game.py プロジェクト: coleary9/RockBrawl
 def collide(self, keysGroup, valuesGroup, playerPos):
     """Uses pygame collision to collide two sprite groups."""
     collDict = sprite.groupcollide(
         keysGroup, valuesGroup, False, False)
     for collided in collDict.keys():
         for collider in collDict[collided]:
             collided.setCollided(collider)
コード例 #17
0
def run_game():
	tick = 0;
	while 1:
		if game_settings.game_active:
			gf.check_events(screen, game_settings, squares, plants, bullets);
			# screen.fill(game_settings.bg_color);
			tick += 1;
			if tick % 30 == 0:
				zombies.add(Zombie(screen, game_settings));

			zombies_hit = groupcollide(zombies, bullets, False, False); #zombies_hit = dictionary of sprites; bullets will go straight through the zombies if both are false

			# print zombies_hit
			for zombie in zombies_hit: #empty dictionary - zombies are objects put in zombies list (.add() above)
				# print zombie;
				if zombie.yard_row == zombies_hit[zombie][0].yard_row:
					# print "Same row!";
					bullets.remove(zombies_hit[zombie][0]);
					zombie.hit(1); #calling the zombie's local hit method - passed 1 damage - .hit adjusts their health
					if (zombie.health <= 0):
						zombies.remove(zombie); #removes zombie from game
						game_settings.zombie_in_row[zombie.yard_row] -= 1; #removes the 1 zombie from the row as its' killed - plant will keep shooting until # of zombies in row = 0


		gf.update_screen(screen, game_settings, background, zombies, squares, plants, bullets, tick);
		pygame.display.flip();
コード例 #18
0
    def game_loop():
        """Internal game loop function that has access to clock, screen, etc."""
        player = Player()
        asteroid_cooldown = 0
        while player:
            for event in get_events():
                if event.type == QUIT:
                    raise SystemExit('Thanks for playing!')

            laser_collide = groupcollide(player.lasers, Asteroid.group, True, True, collide_circle)

            player_collide = spritecollide(player, Asteroid.group, True, collide_circle)
            if player_collide:
                Asteroid.number_destroyed -= 1
                player.kill()
                player = None

            if asteroid_cooldown <= 0:
                # Spawn a new asteroid at a random point on the
                # border of the screen, at a random angle and speed
                x = 0
                y = 0
                side = randrange(1, 4)
                if side == 1:
                    x = 0
                    y = randrange(0, SCREEN_HEIGHT)
                if side == 2:
                    x = randrange(0, SCREEN_WIDTH)
                    y = 0
                if side == 3:
                    x = SCREEN_WIDTH
                    y = randrange(0, SCREEN_HEIGHT)
                if side == 4:
                    x = randrange(0, SCREEN_WIDTH)
                    y = SCREEN_HEIGHT

                angle = randrange(0, 360)
                speed = randrange(1, 5)

                asteroid = Asteroid(3, speed, angle, pos=(x, y))
                asteroid_cooldown = 450

            # Draw the background to the screen
            screen.blit(background, (0, 0))

            # Draw score in top left
            text = font.render(str(Asteroid.number_destroyed), 1, COLOR.WHITE)
            screen.blit(text, (10, 10))

            # Update all entities and draw them
            Entity.group.update()
            Entity.group.draw(screen)

            # Display what has been drawn
            display.update()

            asteroid_cooldown -= 1

            # Advance the clock
            clock.tick(FPS)
コード例 #19
0
    def update(self):
        sprite_dict = groupcollide(self.__bullets, self.__dvd_logos, False,
                                   True)

        self.__bullets.remove(*sprite_dict.keys())
        self.__dvd_logos.remove(
            *sprite_dict.keys())  # THIS SHOULDN'T LOOK LOOK LIKE THIS !!!
コード例 #20
0
 def update(self, player: PlayerSprite, screen: Surface):
     # enemies need reference to other enemies and the player
     self._enemies.update(player, self._enemies, screen)
     hit = sprite.groupcollide(
         self._enemies, player._weapon._bullets, False, True, lambda sp1,
         sp2: not sp1._data.invulnerable and sprite.collide_mask(sp1, sp2))
     for enemy in hit:
         enemy.take_damage(player._damage)
コード例 #21
0
    def detect_collision(self):
        if self.elements['ship'].sprite:
            self.ship_collides = spritecollideany(self.elements['ship'].sprite,
                                                  self.elements['asteroids'])

        if groupcollide(self.elements['lasers'], self.elements['asteroids'],
                        True, True):
            self.score_add(50)
コード例 #22
0
 def update(self, ms):
     game_objects = self.game_objects
     game_objects.update(ms)
     collisions = groupcollide(game_objects, game_objects, False, False)
     for key, value in collisions.items():
         value.pop(0)
         if value:
             key.collide(value)
コード例 #23
0
 def contact(self, hostile_fire):
     """Detect collision between player's and hostile fire.
     hostile_fire:   hostile Swarm of projectiles"""
     for enemy_projectile in sprite.groupcollide(
             hostile_fire, self, True, True,
             collided=sprite.collide_circle):
         hostile_fire.increase_score(SCORE_DESTROY_ENEMY *
                                     enemy_projectile.n * 2)
コード例 #24
0
def run_game():
    # Init all the pygame stuff
    pygame.init()
    # set up a tuple for a screen size (horizontal, vertical)
    screen_size = (1000, 800)
    # tuple for background color (R, G, B)
    background_color = (82, 111, 53)
    # create a pygame to us
    screen = pygame.display.set_mode(screen_size)
    # set a caption on the terminal window
    pygame.display.set_caption("3rd Person Shooter")

    the_shooter = Player(screen, './images/Hero.png', 100, 100)
    the_shooter_group = Group()
    the_shooter_group.add(the_shooter)
    bad_guy = Enemy(screen)
    enemies = Group()
    enemies.add(bad_guy)
    bullets = Group()

    tick = 0

    # Main game loop run forever...(or until break)
    # could also use Boolean instead of 1...
    while 1:
        tick += 1
        if tick % 40 == 0:
            enemies.add(Enemy(screen))

        screen.fill(background_color)
        check_events(the_shooter, screen, bullets)

        # Draw the shooter
        for shooter in the_player_group:
            the_shooter.draw_me()

        for bad_gu in enemies:
            bad_guy.update_me(the_shooter)
            bad_guy.draw_me()

        hero_died = groupcollide(the_shooter_group, enemies, True, False)
        bullet_hit = groupcollide(bullets, enemies, True, True)
        print bullet_hit

        # clear the screen for the next time throught the loop
        pygame.display.flip()
コード例 #25
0
 def check_for_collisions(self):
     # check for collisions between enemies and player bullets
     # and increasing the score in case of a collision
     if groupcollide(bullets, enemy_sprites, True, True):
         ENEMY_EXPLOSION.play()
         self.score += SCORE_PER_KILL
     # check for collisions between enemies and player and
     # decreasing player lives in case of a collision
     if groupcollide(player_sprite, enemy_sprites, False, True):
         self.player_lives -= 1
         # ending the game if player is out of lives
         if self.player_lives == 0:
             self.player.kill()
             PLAYER_EXPLOSION.play()
             self.playing = False
         else:
             PLAYER_CRASH.play()
コード例 #26
0
ファイル: Collision.py プロジェクト: salian2/Semestralka-UNIX
    def detectCollisionSpellBound(self,spellGroup, boundGroup):

        #kolizia spellov s hranicami ak prekroci hranicu vymaze spellu
        spellsInBound = sprite.groupcollide(spellGroup, boundGroup, False, False)

        if spellsInBound is not None:
            for spell in spellsInBound:
                if not (isinstance(spell,Spell.AoeSpell) or isinstance(spell,Spell.ShieldSpell)):
                    spell.kill()
コード例 #27
0
ファイル: game.py プロジェクト: JotaVeUltra/DevInVale2015
    def detect_collision(self):
        if self.elements['ship'].sprite:
            self.ship_collides = spritecollideany(self.elements['ship'].sprite, self.elements['asteroids'])
            self.ship_catches = spritecollide(self.elements['ship'].sprite, self.elements['power-ups'], True)

        if groupcollide(self.elements['lasers'], self.elements['asteroids'], True, True):
            if randint(1, 20) == 1:
                self.newPU = True
            self.score_add(50)
コード例 #28
0
ファイル: main.py プロジェクト: jlevey3/Save-the-Robots-Game
    def update(self):

        self.spawnticker += 1

        """
        if self.spawnticker >= self.spawntime:
            #print "ICE SPAWNED"
            self.meteors.add(RadiationMeteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "radiation"))
	    self.meteors.add(IronMeteor((randrange(0,800),randrange(0,600)),self.bounds, 300, "iron"))
	    
	    
        if self.spawnticker >= self.spawntime:
            #print "spawned!"
            self.meteors.add(RockMeteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "rock"))
            self.spawnticker = 0
	"""
        # update
        self.MeteorSpawner.spawn()
        self.meteors.update()
        ImpactGroup.impacts.update()
        self.player.update()
        ShieldGroup.shields.update()
        FallingGroup.fallings.update()
        RoboGroup.robosprites.update()
        PlayerSprite.sprite.update()
        DebrisGroup.debris.update()
        self.timer += 1

        # collisions
        coll = groupcollide(self.player_grp, ImpactGroup.impacts, False, False)
        for robot in coll:
            robot.damage(coll[robot][0])

        coll = groupcollide(self.robot_grp, ImpactGroup.impacts, False, False)
        for robot in coll:
            robot.damage(coll[robot][0])

        num_alive = 0
        for robot in self.robot_grp:
            if not robot.alive():
                num_alive += 1
        self.player.lives -= num_alive - self.deadcount
        self.deadcount = num_alive
コード例 #29
0
 def hit(self, target: Wave) -> None:
     """Detect collision between projectiles and their target.
     Colliding projectiles get killed off (dokill2=True), target takes damage.
     target:  Wave of spaceship(s)"""
     for ship in sprite.groupcollide(target, self, False, True,
                                     sprite.collide_circle):
         ship.damage()
         target.increase_score(SCORE_HULL_DAMAGE * ship.n)
         if ship.is_destroyed:
             target.increase_score(SCORE_DESTROY_ENEMY * ship.n)
コード例 #30
0
def check_colision_virus4(miras, viroses, estado_jogo, pontuacao_placar,
                          ai_settings, barra_tempo):
    colidir = groupcollide(miras, viroses, False, True)
    if colidir:
        estado_jogo.pontos += (ai_settings.fator_base_pontos *
                               ai_settings.speed4)
        if barra_tempo.tamanho_barra + 50 < barra_tempo.tamanho_maximo:
            barra_tempo.tamanho_barra += 50
        elif barra_tempo.tamanho_barra + 50 > barra_tempo.tamanho_maximo:
            barra_tempo.tamanho_barra = barra_tempo.tamanho_maximo
コード例 #31
0
ファイル: main.py プロジェクト: Grug16/Save-the-Robots-Game
 def handle_event(self, event):
     if event.type == KEYDOWN and event.key == K_ESCAPE:
         self.app.set_state(PauseMenu)
     elif event.type == KEYDOWN and event.key == K_SPACE and not self.is_gameover():
         if self.player.carrying:
             self.player.drop()
         else:
             for robot in groupcollide(self.robot_grp, self.player_grp, False, False):
                 self.player.grab(robot)
                 self.score += 50
                 print "robot picked up"
コード例 #32
0
 def update(self, ms):
     game_objects = self.game_objects
     game_objects.update(ms)
     collisions = groupcollide(game_objects, game_objects, False, False)
     for key, value in collisions.items():
         value.pop(0)
         if value:
             try:
                 key.collide(value)
             except AttributeError:
                 pass
コード例 #33
0
ファイル: game.py プロジェクト: rubiximus/invader-shootan
def collisions():
    """Does collision detection for all sprites.
    Currently handles: player/bullet, enemy/bullet, bullet/bullet
    """
    
    global lives, score, player
    
    #player with enemy bullets
    if spritecollide(player, evil_bullets, True, collide_mask):
        lives -= 1
        player = Player(window_size, ship_filename, ship_speed)
            
    #enemies with player bullets
    #currently rather lazy because there's only ever one player bullet
    if groupcollide(good_bullets, enemy_wave, True, True, collide_mask):
        score += enemy_kill_pts
                
    #enemy bullets with player bullets
    #currently rather lazy because there's only ever one player bullet
    if groupcollide(good_bullets, evil_bullets, True, True, collide_mask):
        score += bullet_kill_pts
コード例 #34
0
ファイル: overworld.py プロジェクト: mgius/senior_project
 def update(self):
    self.player.update()
    self.npcgroup.update()
    if sprite.spritecollideany(self.player, self.walls):
       self.player._goback()
    for npc in sprite.groupcollide(self.npcgroup, self.walls, False, False):
       npc._goback()
    npcCollisions = sprite.spritecollide(self.player, self.npcgroup, False)
    if len(npcCollisions) > 0:
       self.prepareForBattle()
       npcCollisions[0].kill()
       return BattleEvent(self.player, npcCollisions[0])
    return None
コード例 #35
0
ファイル: main.py プロジェクト: Grug16/Save-the-Robots-Game
    def play(self):
	 # this line may need moving
	self.done = False
	self.clock = pygame.time.Clock()
	print "Loop Started"
	while not self.done:  # MAIN WHILE LOOP
		    
	    
    
    
	#input
	    self.input()
	#spawn meteors
	    self.spawnticker += 1
	    
	    if self.spawnticker >= self.spawntime:
		print "ICE SPAWNED"
		self.meteors.add(Meteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "ice"))
	    
	    if self.spawnticker >= self.spawntime:
		#print "spawned!"
		self.meteors.add(Meteor((randrange(0,800),randrange(0,600)),self.bounds, 90, "rock"))
		self.spawnticker = 0
		
	#update
	    self.meteors.update()
	    ImpactGroup.impacts.update()
	    self.player.update()
    
	#collisions
	    coll = groupcollide(self.player_grp, ImpactGroup.impacts, False, False)
	    for robot in coll:
		robot.damage(coll[robot][0])
	    
	    coll = groupcollide(self.robot_grp, ImpactGroup.impacts, False, False)
	    for robot in coll:
		robot.damage(coll[robot][0])
	    
	    self.draw()
コード例 #36
0
    def handle_collisions(self):
        hit = groupcollide(self.projectiles, self.enemies, True, False)

        for _, enemies in hit.items():
            for enemy in enemies:
                if enemy.hit(self.player.weapon_power):
                    self.current_wave.on_ship_destroyed(enemy)

        player_hit = spritecollide(self.player, self.enemy_projectiles, True)

        if len(player_hit) > 0:
            self.game.events.broadcast('PLAYER_HIT',
                                       {'damage': player_hit[0].power})
コード例 #37
0
ファイル: main.py プロジェクト: CaseyTM/PvZ
def run_game():
	tick = 0;
	while 1:
		gf.check_events(screen,game_settings, squares, plants,bullets,icons);
		if game_settings.game_active:
			tick += 1;
			if tick % 10 == 0:
				zombies.add(Zombie(screen,game_settings));

			zombies_hit = groupcollide(zombies, bullets, False, False);
			# print zombies_hit;
			for zombie in zombies_hit:
				# print zombie;
				# print zombies_hit[zombie];
				if zombie.yard_row == zombies_hit[zombie][0].yard_row:
					# print "Same row!!!";
					bullets.remove(zombies_hit[zombie][0]);
					zombie.hit(1);
					if(zombie.health <= 0):
						zombies.remove(zombie);
						game_settings.zombie_in_row[zombie.yard_row] -= 1;
						game_settings.zombies_killed += 1;
			zombies_eating = groupcollide(zombies,plants,False,False);
			for zombie in zombies_eating:
				damaged_plant = zombies_eating[zombie][0]
				if zombie.yard_row == damaged_plant.yard_row:
					# zombie has hit a plant in it row
					zombie.moving = False;
					if time.time() - zombie.started_eating > zombie.damage_time:
						zombie.zombie_chomp(damaged_plant)
						zombie.started_eating = time.time();
						if damaged_plant.health <= 0:
							plants.remove(damaged_plant);
							zombie.moving = True;



		gf.update_screen(screen,game_settings,background,zombies,squares,plants,bullets,tick,icons);		
		pygame.display.flip();
コード例 #38
0
def run_game():
    tick = 0  # each tick a screen reload
    while 1:
        gf.check_events(screen, game_settings, squares, plants, bullets, icons)
        if game_settings.game_active:
            tick += 1
            if tick % 30 == 0:  # every 30 seconds, add a zombie to the game
                zombies.add(Zombie(screen, game_settings))

            zombies_hit = groupcollide(zombies, bullets, False, False)

            for zombie in zombies_hit:
                if zombie.yard_row == zombies_hit[zombie][0].yard_row:
                    bullets.remove(zombies_hit[zombie][0])
                    zombie.hit(1)
                    if zombie.health <= 0:
                        zombies.remove(zombie)
                        game_settings.zombie_in_row[zombie.yard_row] -= 1
                        game_settings.zombies_killed += 1
            zombies_eating = groupcollide(zombies, plants, False, False)
            for zombie in zombies_eating:

                damaged_plant = zombies_eating[zombie][0]
                print damaged_plant
                if zombie.yard_row == damaged_plant.yard_row:
                    zombie.moving = False
                    if time.time(
                    ) - zombie.started_eating > zombie.damage_time:
                        print "Zombie took a bite"
                        damaged_plant.take_damage(2)
                        zombie.started_eating = time.time()
                        if damaged_plant.health <= 0:
                            plants.remove(damaged_plant)
                            zombie.moving = True
                            damaged_plant.square.plant_here = False

        gf.update_screen(screen, game_settings, background, zombies, squares,
                         plants, bullets, tick, icons)
        pygame.display.flip()
コード例 #39
0
ファイル: main.py プロジェクト: jlevey3/Save-the-Robots-Game
 def handle_event(self, event):
     if event.type == KEYDOWN and event.key == K_ESCAPE:
         self.app.set_state(PauseMenu)
     elif event.type == KEYDOWN and event.key == K_SPACE:
         if self.player.carrying:
             self.player.drop()
         else:
             for robot in groupcollide(self.robot_grp, self.player_grp, False, False):
                 self.player.grab(robot)
                 self.score += 50
                 print "robot picked up"
     if self.player.lives <= 0 and self.player.health <= 0:
         self.app.set_state(GameOver)
コード例 #40
0
        def callback(group) -> Dict:
            def _collided(sprite1, sprite2):
                x1, y1 = sprite1.rect.topleft
                x2, y2 = sprite2.rect.topleft
                x0, y0 = offset
                positional_offset = (x2 - x1 - x0, y2 - y1 - y0)

                overlap = sprite1.mask.overlap(sprite2.mask, positional_offset)
                return bool(overlap)

            collision_dict = sprite.groupcollide(group, self, False, False,
                                                 _collided)
            return collision_dict
コード例 #41
0
ファイル: duckling.py プロジェクト: xyproto/duckling
    def everytime(self):
        # Delete the sprites that are unable to .everytime()
        for gobj in self.ginfo.sprites():
            if not gobj.everytime():
                self.ginfo.remove(gobj)

        # Let the players be blocked by the blocking
        hitdict = sprite.groupcollide(self.getall(IPlayer), self.getall(IBlocking), False, False).items()
        for player, block in hitdict:
            player.blocked(block)

        # Let the shootables be shot by the projectiles
        hitdict = sprite.groupcollide(self.getall(IShootable), self.getall(IProjectile), False, True).items()
        for shootable, projectile in hitdict:
            shootable.hit(projectile)

        # Remove the moveables that are off the screen
        for moveable in self.getall(IMoveable).sprites():
            x, y, w, h = moveable.rect
            if x < 0 or (x + w) > RES[0] or y < 0 or (y + h) > RES[1]:
                self.ginfo.remove(moveable)
        
        return True
コード例 #42
0
ファイル: game.py プロジェクト: coleary9/RockBrawl
 def attCollide(self, attackGroup, victimGroup):
     """
     Uses pygame collision to collide two sprite groups.
     Then hits the victim group with each collided attack.
     """
     if len(attackGroup) > 0:
         collDict = sprite.groupcollide(
             attackGroup,
             victimGroup,
             False,
             False)
         for atk in collDict.keys():
             for victim in collDict[atk]:
                 victim.hit(atk)
コード例 #43
0
ファイル: main.py プロジェクト: Grug16/Save-the-Robots-Game
    def input(self):
	for event in pygame.event.get():
	    if event.type == QUIT:
	        self.quit()
	    elif event.type == KEYDOWN and event.key == K_ESCAPE:
	        self.quit()

	    
	    elif event.type == KEYDOWN and event.key == K_SPACE:
		if self.player.carrying:
		    self.player.drop()
		else:
		    for robot in groupcollide(self.robot_grp, self.player_grp, False, False):
			self.player.grab(robot)
			self.score += 5
			print "robot picked up"
			break
コード例 #44
0
ファイル: level.py プロジェクト: rubiximus/yars-revenge
    def collisions(self):
        """Handles collisions
        """

        player = self.player
        enemy = self.enemy
        shield = self.shield
        hbullet = self.hbullet
        cannon = self.cannon
        ion_field = self.ion_field
        player_bullets = self.player_bullets
        
        #player with homing bullet
        if collide_mask(player, hbullet) and not collide_mask(player, ion_field):
            self.kill_player()
        
        #player with enemy base
        if collide_mask(player, enemy):
            #if base in moving phase, give player energy
            if enemy.get_state_number() == EnemyBase.MOVING:
                self.manager.give_energy(opt.energy_from_enemy)
            #if base in spinning or shooting phase, kill player
            elif enemy.get_state_number() == EnemyBase.SPINNING:
                self.kill_player()
            elif enemy.get_state_number() == EnemyBase.SHOOTING:
                self.kill_player()
                
        #player with cell
        #-hitting a cell will bounce the player a bit to the left
        #-if the player hit the cell twice in a short enough span,
        # the cell is eaten and the player gets energy
        #-in case of multiple collisions, deal with cell closest to player's center
        #
        #TODO: This still isn't quite right.
        #Should be able to eat top/bottom rows with diagonal movement.
        #(vertical movement should still move player all the way left)
        pc_collides = spritecollide(player, shield, False, collide_mask)
        center_cell = self.find_centermost_cell(pc_collides)
        if center_cell is not None:
            player.rect.right = center_cell.rect.left - opt.cell_bounceback
            
            if not center_cell.marked:
                center_cell.mark()
            elif shield.can_eat():
                center_cell.kill()
                self.manager.give_energy(opt.energy_from_cell)
                self.manager.add_score(opt.score_cell_eat)
                shield.start_delay(opt.frames_to_eat_cell)
            
        #player with cannon
        if collide_mask(player, cannon):
            #if in deactivated phase, try spending required energy to activate
            if (cannon.get_state_number() == Cannon.DEACTIVATED and 
                self.manager.spend_energy(opt.cannon_energy_cost)):
                cannon.start_standby()
            #if in firing phase, kill player
            if cannon.get_state_number() == Cannon.FIRING:
                self.kill_player()
            #if in returning phase, give energy and deactivate cannon
            if cannon.get_state_number() == Cannon.RETURNING:
                cannon.start_transition(Cannon.DEACTIVATED)
                self.manager.give_energy(opt.energy_from_cannon)
                
        #cannon with cell
        #kill one cell and reverse cannon direction
        #assuming this is only possible if cannon in firing state
        if cannon.get_state_number() == Cannon.FIRING:
            cannon_collides = spritecollide(cannon, shield, False, collide_mask)
            if len(cannon_collides) > 0:
                cannon_collides[0].kill()
                self.manager.add_score(opt.score_cell_shoot)
                cannon.start_transition(Cannon.RETURNING)
            
        #cannon with enemy base -- only if cannon in firing state
        #give points corresponding to enemy state and end level
        #if enemy base is in shooting state, player also gets a life
        if cannon.get_state_number() == Cannon.FIRING and collide_mask(cannon, enemy):
            if enemy.get_state_number() == EnemyBase.MOVING:
                self.manager.add_score(opt.score_mover_destroy)
            elif enemy.get_state_number() == EnemyBase.SPINNING:
                self.manager.add_score(opt.score_spinner_destroy)
            elif enemy.get_state_number() == EnemyBase.SHOOTING:
                self.manager.add_score(opt.score_shooter_destroy)
                self.manager.give_life()
            self.end_level()
        
        #player's bullet with cell
        #kill player bullet but remove cells in a cross pattern
        #if somehow one bullet hits multiple cells one is arbitrarily selected
        bc_collides = groupcollide(player_bullets, shield, True, False, collide_mask)
        for current_bullet in bc_collides.keys():
            self.manager.add_score(opt.score_cell_shoot)
            shield.remove_cross(bc_collides[current_bullet][0])
コード例 #45
0
ファイル: main.py プロジェクト: jlevey3/CS112-Spring2012
def main():
    #initialize pygame
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    bounds = screen.get_rect()

    #initialize game
    Player = Player(bounds.center, bounds) #sets starting position fir player
    player_grp = GroupSingle(player)
    enemies = Group()
    spawn_counter = 0 
    fast_spawn_counter = 0
    score = 0
    font = pygame.font.Font(None, 40)
    

    #game loop
    done = False
    clock = pygame.time.Clock()
    
    while not done:
        #input
        for event in pygame.event.get():
            if event.type == QUIT:
                done = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                done = True

            elif event.type == MOUSEBUTTONDOWN and event.button == 1: #1=left mouse button
                player.shoot()
            elif event.type == KEYDOWN and event.key == K_SPACE and not player.alive(): #if player dies, hit space and game restarts
                player = Player(bounds.center,bounds)
                player_grp.add(player)
                for enemy in enemies:
                    enemy.kill() #same as enemies.empty()

        #update
        player_grp.update()     
        player.bullets.update()
        enemies.update()

        #spawn enemies
        spawn_counter+=1
        if spawn_counter >= 10:
            n = randrange(4)
            for i in range(n):
                x = randrange(bounds.width - Enemy.width)
                enemy = Enemy((x,0),bounds)
                enemies.add(enemy)
            spawn_counter = 0 #reset counter afer
            #spawn fast enemy
        fast_spawn_counter += 1
        if fast_spawn_counter >= 45:
            x = randrange(bounds.width - FastEnemy.width)
            enemy = FastEnemy((x,0),bounds)
            enemies.add(enemy)
            fast_spawn_counter = 0

        #collisions - see pygame documentation 
        groupcollide(player_grp, enemies, True, False) #if enemies hit player, player dies
        
        #if bullets hit enemies, enemy dies
        #score keeper
        for enemy in groupcollide(enemies, player.bullets, True, True):
            if player.alive():
                score+=1

        #draw
        screen.fill(BG_COLOR)
        player_grp.draw(screen)
        player.bullets.draw(screen)
        enemies.draw(screen)

        score_text = font.render("Score: %08d"%score, False, (255,255,255))
        screen.blit(score_text, (5,5))
        pygame.display.flip()

        clock.tick(30)
コード例 #46
0
            DISPLAYSURF.blit(rotatedSurf, rotatedRect)                     #wyswietlamy obrocona armate
        
    # Tworzenie gracza, dodanie go do listy spriteow
        player = Target(pygame.mouse.get_pos())
        all_sprites_list.add(player)
        
    # Sprawdzanie kolizji gracz <-> kula
        hit_list = pygame.sprite.spritecollide(player, bullets_list, True) #w hit_list przechowaj sprity kolizyjne. Wartosc True oznacza, ze znikna z ekranu po kolizji.
        for bullet in hit_list:    #dla wszystkich kul armatnich, ktore trafily w gracza
            hits += 1              #zwieksz wartosc zmiennej hits o 1
            openChannel_A = pygame.mixer.find_channel() #znajdz wolny kanal
            if openChannel_A:                           #jezeli kanal jest wolny
                openChannel_A.play(player.effect)   #odegraj dzwiek odgrywany po zderzeniu

    # Sprawdzanie kolizji kula <-> kula
    if groupcollide(bullet1_list, bullet2_list, True, True):
        boom = pygame.mixer.Sound('bomb.wav')
        boom.set_volume(.5)
        openChannel_B = pygame.mixer.find_channel()
        if openChannel_B:
            openChannel_B.play(boom)

    # Rysujemy ramke planszy o grubosci 1
    pygame.draw.rect(DISPLAYSURF, BLACK, (0, 0, WINDOWWIDTH, WINDOWHEIGHT), 1)

    # Rysujemy wszystkie obiekty Sprite - kule armatnie i gracza
    if koniec == 0:
        all_sprites_list.draw(DISPLAYSURF)

    # Wyswietlamy instrukcje dla gracza w dolnej czesci ekranu
    if koniec == 0:
コード例 #47
0
ファイル: app.py プロジェクト: gerrive/docker-space-invader
    score = font.render("Score: " + str(player.score), 1, WHITE_COLOR)
    lives = font.render("Lives: " + str(player.lives), 1, WHITE_COLOR)
    screen.blit(score, score.get_rect())
    screen.blit(lives, (screen.get_width() / 2, 0))

    # Enemies movement
    zerglings.draw(screen)
    ship.draw(screen)
    bullet.draw(screen)

    # for zerg in zerglings:
    #     screen.blit(zerg.image, zerg.position)

    # Ship movement
    #screen.blit(ship.image, ((ship.position[0] - ship.image.get_width() / 2),
    #                         ship.position[1]))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        ship.update(event, bullet)

    bullet.update()

    kill_list = sprite.groupcollide(bullet, zerglings, True, True)
    for val in kill_list.values():
        for x in val:
            player.add_pointes(x.points)

    pygame.display.update()
コード例 #48
0
ファイル: main.py プロジェクト: Grug16/CS112-Spring2012
def main():
    #initialize pygame
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    bounds = screen.get_rect()
    spawntime = 60
    spawnticker = 0
    fast_spawn_counter = 0
    score = 0
    #initialize the game
    player = Player(bounds.center, bounds) #creates a new player object, passes variables to it.
    player_grp = GroupSingle(player)
    enemies = Group() #emtpy sprite group
    
    font = pygame.font.Font(None, 40)
    #game loop
    done = False
    clock = pygame.time.Clock()
    while not done: 
        #input
        for event in pygame.event.get():
            if event.type == QUIT:
                done = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                done = True
            elif event.type == MOUSEBUTTONDOWN and event.button == 1:
                player.shoot()
            elif event.type == KEYDOWN and event.key == K_SPACE and not player.alive():
                player = Player(bounds.center, bounds) # respawns player
                player_grp.add(player)
                score = 0
                for enemy in enemies:
                    enemy.kill()
                # can also do   enemies.empty()
            
                
        
        
        #update
        player_grp.update() #only if the player is in the player_grp sprite group.  See destroyed area
        player.bullets.update() #update everything in the Bullets list
        enemies.update()
        
        
        #collisions
        groupcollide(player_grp, enemies, True, False) #first group, second group, then which gets killed
        
        for enemy in groupcollide(enemies, player.bullets, True, True):
            if player.alive():
                score +=1 #counts how many are intersecting
        
        #spawn
        spawnticker += 1
        if spawnticker >= spawntime:
            #print "spawned!"
            enemies.add(Enemy((randrange(0,400),randrange(0,200)),bounds))
            spawnticker = 0
        fast_spawn_counter += 1
        if fast_spawn_counter >= 45:
            #print "spawned!"
            x = randrange (0, 480)
            enemy = FastEnemy((x,0), bounds)
            enemies.add(enemy)
            fast_spawn_counter = 0
        
        
        
        #draw
        
        screen.fill(BG_COLOR) # fill then draw
        player.bullets.draw(screen) #bullets is the list of all bullets
        player_grp.draw(screen)
        enemies.draw(screen)
        score_text = font.render("Score: %08d" %score, False, (255,255,255))
        screen.blit(score_text, (5,5))
        pygame.display.flip()
        clock.tick(30)
コード例 #49
0
ファイル: board.py プロジェクト: michal-sadilek/sfgame
 def get_collided(self, group):
     return sprite.groupcollide(self, group, False, False)
コード例 #50
0
ファイル: main.py プロジェクト: AKilgore/CS112-Spring2012
def main():
    # initialze pygame
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    bounds = screen.get_rect()

    # initialize the game
    player = Player(bounds.center, bounds)
    player_grp = GroupSingle(player)
    enemies = Group()
    spawn_counter = 0
    fast_spawn_counter = 0
    score = 0

    font = pygame.font.Font(None, 40)

    # game loop
    done = False
    clock = pygame.time.Clock()
    while not done:
        # input
        for event in pygame.event.get():
            if event.type == QUIT:
                done = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                done = True
            elif event.type == MOUSEBUTTONDOWN and event.button == 1:
                player.shoot()
            elif event.type == KEYDOWN and event.key == K_SPACE and not player.alive():
                player = Player(bounds.center, bounds)
                player_grp.add(player)
                score = 0
                for enemy in enemies:
                    enemy.kill()
                # same as enemies.empty()

        # update
        player_grp.update()
        player.bullets.update()
        enemies.update()

        # spawn enemies
        spawn_counter += 1
        if spawn_counter >= 10:
            n = randrange(4)
            for i in range(n):
                x = randrange(bounds.width - Enemy.width) 
                enemy = Enemy((x, 0), bounds)
                enemies.add(enemy)
            spawn_counter = 0

        # fast spawn 
        fast_spawn_counter += 1
        if fast_spawn_counter >= 45:
            x = randrange(bounds.width - FastEnemy.width)
            enemy = FastEnemy((x, 0), bounds)
            enemies.add(enemy)
            fast_spawn_counter = 0

        # collisions
        groupcollide(player_grp, enemies, True, False)

        for enemy in groupcollide(enemies, player.bullets, True, True):
            if player.alive():
                score += 1

        # draw
        screen.fill(BG_COLOR)
        player_grp.draw(screen)
        player.bullets.draw(screen)
        enemies.draw(screen)

        score_text = font.render("Score: %08d"%score, False, (255, 255, 255))
        screen.blit(score_text, (5, 5))

        if not player.alive():
            gameover = font.render("Press Space to Respawn", False, (255, 255, 255))
            rect = gameover.get_rect()
            rect.center = screen.get_rect().center
            screen.blit(gameover, rect)

        pygame.display.flip()

        clock.tick(30)
コード例 #51
0
ファイル: Main.py プロジェクト: BitBallers/GammaRayKitten
    def update(self, time):
        self.l_interval = self.l_interval + .01
        if self.l_interval >= 4 * math.pi:
            self.l_interval = 0.0
        self.time += time
        while self.time > G.Globals.INTERVAL:
            self.time -= G.Globals.INTERVAL
            curr_enemies = PS.Group()
            for i, e in enumerate(self.enemies.sprites()):                
                dead, bull = e.update(G.Globals.INTERVAL, self.player,
                                      self.map, self.enemies.sprites(), i)
                if dead:
                    self.enemies.remove(e)
                    if self.map.boss_coord is not None:            
                        Game.SCORE += 500
                        G.new_level(self.player)
                        return
                elif not (e.rect.x < - e.rect.width or e.rect.x > G.Globals.WIDTH + e.rect.width \
                        or e.rect.y < -e.rect.height or e.rect.y > G.Globals.HEIGHT + e.rect.height):
                    curr_enemies.add(e)
                if bull is not None:
                    self.e_bullets.add(bull)
            for b in self.bullets.sprites():
                if b.update(G.Globals.INTERVAL):
                    self.bullets.remove(b)
            for b in self.e_bullets.sprites():
                if b.update(G.Globals.INTERVAL):
                    self.e_bullets.remove(b)
            for blood in self.blood:
                blood.update(G.Globals.INTERVAL)
                if blood.gone:
                    self.blood.remove(blood)
            for stain in self.blood_stains:
                stain.update()
            for heart in self.hearts_group.sprites():
                heart.update()            

            self.player.update(G.Globals.INTERVAL)
            self.set_screen_cords_player()

            #self.collision(curr_enemies, self.bullets, self.e_bullets, self.player_group, self.wall_sprites_list) 
            # Are there collisions
            # Player Collision with walls
            result = PS.groupcollide(self.player_group, self.wall_sprites_list,
                                     False, False)
            for key in result:
                for wall in result[key]:
                    if self.player.rect.colliderect(wall.rect):
                        val = self.player.wall_collision(wall, self.map)
                        self.set_screen_cords_player()
                        if val == 1:
                            self.wall_sprites_list.remove(wall)
                        if val == 2:
                            Game.SCORE += 100
                            G.new_level(self.player)
            # Player collision with enemies
            result = PS.groupcollide(self.player_group, curr_enemies,
                                     False, False)
            for key in result:
                for enemy in result[key]:
                    if enemy.dying is False and self.player.take_damage(1):
                        G.Globals.STATE = GameOver.GameOver(False, Game.SCORE)
            # Player collision with enemy bullets
            result = PS.groupcollide(self.player_group, self.e_bullets, False,
                                     False)
            for player in result:
                if self.player.take_damage(1):
                    G.Globals.STATE = GameOver.GameOver(False, Game.SCORE)
                blood_x = player.world_coord_x + Player.Player.WIDTH / 2
                blood_y = player.world_coord_y + Player.Player.HEIGHT / 2
                self.blood.append(Blood.Blood(blood_x,
                                              blood_y, .8))
                p_width = Player.Player.WIDTH
                p_height = Player.Player.HEIGHT
                self.blood_stains.append(BloodStain.BloodStain(blood_x,
                                                               blood_y,
                                                               p_width,
                                                               p_height))

                for bullet in result[player]:
                    self.e_bullets.remove(bullet)

            # Enemy Collision with Bullets
            result = PS.groupcollide(curr_enemies, self.bullets, False, False)            
            for enemy in result:
                if enemy.dying is True:
                    continue
                if self.double_kill is False:                   
                    self.double_kill = True
                    self.double_kill_timer = 0
                    self.last_killed = enemy
                if self.double_kill_timer < Game.DOUBLE_KILL_TIME and self.double_kill \
                and self.last_killed is not enemy:
                    #Game.DOUBLE_KILL_SOUND.play()
                    self.double_kill = False                

                enemy.start_death()
                blood_x = int(enemy.world_x + enemy.width / 2)
                blood_y = int(enemy.world_y + enemy.height / 2)
                self.blood.append(Blood.Blood(blood_x,
                                              blood_y, .8))
                self.blood_stains.append(BloodStain.BloodStain(blood_x,
                                                               blood_y,
                                                               enemy.width,
                                                               enemy.height))

                Game.SCORE = Game.SCORE + 10
                for bullet in result[enemy]:
                    if self.player.piercing is False and bullet.__class__.__name__ is not "Laser":
                        self.bullets.remove(bullet)
                if random.random() < Game.HEALTH_DROP_RATE:
                    self.hearts_group.add(Heart.Heart(enemy.world_x,
                                                      enemy.world_y))                        

            # Bullets Collide with Wall
            result = PS.groupcollide(
                self.bullets, self.wall_sprites_list, False, False)
            for bullet in result:
                if bullet.__class__.__name__ is not "Laser": 
                    self.bullets.remove(bullet)
            # Enemy Bullets Collide with Wall
            result = PS.groupcollide(
                self.e_bullets, self.wall_sprites_list, False, False)
            for bullet in result:
                self.e_bullets.remove(bullet)

            # Player picking up hearts
            if self.player.health < self.player.max_health:
                heart = PS.spritecollideany(self.player, self.hearts_group)
                if heart is not None:
                    self.hearts_group.remove(heart)
                    self.player.health += 1
                    if self.player.health > self.player.max_health:
                        self.player.health = self.player.max_health
            if self.double_kill:                
                self.double_kill_timer += time
                if self.double_kill_timer > Game.DOUBLE_KILL_TIME:
                    self.double_kill = False                  
コード例 #52
0
ファイル: board.py プロジェクト: michal-sadilek/sfgame
 def filter_collision(self, group):
     # Check collision and remove squares from this group
     # if collision is true
     # TODO: use a collide function and pass as parameter to check 
     # indices instead of checking rects
     sprite.groupcollide(self, group, True, False)
コード例 #53
0
def main():

    #initialize pygame
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    bounds = screen.get_rect()
    
    #initialize game
    player = Player(bounds.center, bounds) #sets starting position fir player
    robot = Robot((randrange(0,800),randrange(0,600)), bounds)
    player_grp = GroupSingle(player)
    #robot_grp = GroupSingle(robot)
    robot_grp = Group()
    robot_grp.add(Robot((randrange(0,800),randrange(0,600)), bounds))
    robot_grp.add(Robot((randrange(0,800),randrange(0,600)), bounds))
    robot_grp.add(Robot((randrange(0,800),randrange(0,600)), bounds))
    meteors = Group()
    impacts = Group()
    score = 0
    spawntime = 10
    spawnticker = 0
    font = pygame.font.Font(None,35)

    #game loop
    done = False
    clock = pygame.time.Clock()
    print "Loop Started"
    while not done:

        for event in pygame.event.get():
            if event.type == QUIT:
                done = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                done = True

            
            elif event.type == KEYDOWN and event.key == K_SPACE:
                if player.carrying:
                    player.drop()
                else:
                    for robot in groupcollide(robot_grp, player_grp, False, False):
                        player.grab(robot)
                        score += 5
                        print "robot picked up"
                        break
                
	


    #input

    #spawn meteors
	spawnticker += 1
	if spawnticker >= spawntime:
	    #print "spawned!"
	    meteors.add(Meteor((randrange(0,800),randrange(0,600)),bounds, 90, "rock"))
	    spawnticker = 0
	    
    #update
	meteors.update()
	ImpactGroup.impacts.update()
        player.update()

    #collisions
	coll = groupcollide(player_grp, ImpactGroup.impacts, False, False)
	for robot in coll:
	    robot.damage(coll[robot][0])
	
	coll = groupcollide(robot_grp, ImpactGroup.impacts, False, False)
	for robot in coll:
	    robot.damage(coll[robot][0])
    #draw
        screen.fill(BG_COLOR)
        
        robot_grp.draw(screen)
	
	ImpactGroup.impacts.draw(screen)
	meteors.draw(screen)
	player_grp.draw(screen)
	robot_grp.draw(screen)
        clock.tick(30)
        score_text = font.render("Score: %05d"%score, False, (255,255,255))
        screen.blit(score_text, (5,5))
        pygame.display.flip()
コード例 #54
0
def main():
    """ Main Program """
    pygame.init()
 
    # Set the height and width of the screen
    size = [constants.SCREEN_WIDTH, constants.SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)
    bounds = screen.get_rect()
    pygame.display.set_caption("Super Alien Assault!")
 
    # Load the sound mixer:
    pygame.mixer.pre_init(44100, -16, 2, 2048) 
    # This is supposed to help stop sound lag
 
    # Create the player
    player = Player(bounds.center, bounds)
    player_grp = GroupSingle(player)

    # Create an enemy
    enemies = pygame.sprite.Group()
 
    # Create all the levels
    lindex = random.randrange(3,9)

    level_list = []
    level_list.append(levels.Level_01(player))
    level_list.append(levels.Level_02(player))
    level_list.append(levels.Level_03(player))
    for i in range(lindex):
        level_list.append(levels.Level_01(player))
        level_list.append(levels.Level_02(player))
        level_list.append(levels.Level_03(player))

    # Initialize variables
    score = 0
    spawn_counter = 0
    tween_diff = 1

    # Select the font to use
    font = pygame.font.SysFont("calibri",48)
 
    # Set the current level
    current_level_no = 0
    current_level = level_list[current_level_no]

    # List of each block
    block_list = pygame.sprite.Group()

    # Set current level for player and inital x,y position
    player.level = current_level
    player.rect.x = 340
    player.rect.y = 200
 
    # Loop until the user clicks the close button.
    done = False
 
    # Used to manage how fast the screen updates
    clock = pygame.time.Clock()

    # Play "Hot Nights" by Beardmont / Three Chain Links
    # Available under Creative Commons attribution license from:
    # https://soundcloud.com/beardmont
    pygame.mixer.music.load('HotNights.ogg')
    pygame.mixer.music.set_endevent(pygame.constants.USEREVENT)
    pygame.mixer.music.play()

 
    # -------- Main Program Loop -----------
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

            elif event.type == pygame.constants.USEREVENT:
            # This event is triggered when the song stops playing.
            #
            # Next, play "Happiest Days" by Beardmont / Three Chain Links
            # Available under Creative Commons attribution license from:
            # https://soundcloud.com/beardmont
                pygame.mixer.music.load('HappiestDays.ogg')
                pygame.mixer.music.play()

            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    done = True
                if event.key == pygame.K_q:
                    done = True
                if event.key == pygame.K_LEFT:
                    player.go_left()
                if event.key == pygame.K_RIGHT:
                    player.go_right()
                if event.key == pygame.K_UP:
                    player.jump()
                if event.key == pygame.K_SPACE:
                    player.shoot()
                if event.key == pygame.K_r and not player.alive():
                    main()
 
            elif event.type == pygame.KEYUP:

                if event.key == pygame.K_LEFT and player.change_x < 0:
                    player.stop()
                if event.key == pygame.K_RIGHT and player.change_x > 0:
                    player.stop()
 
        # Update items in the level
        current_level.update()
        player_grp.update()
        player.bullets.update()
        player.bulletcasings.update()
        enemies.update()

        # Messing around with easing the enemy spawn counter
        # They should gradually trickle in at first and then build
        # to a flood of enemies then recede kind of like a tide
        spawn_counter += (101 - spawn_counter)*.1
        if spawn_counter >= 100:
            n = random.randrange(3)
            for i in range(n):
                x = random.randint(900, 1000)
                y = random.randint(100, 520)
                enemy = Enemy((x, y))
                enemies.add(enemy)
            spawn_counter = 0

        # Collision between player and enemies results in player death
        groupcollide(player_grp, enemies, True, False)

        # Add 1 point to score for every enemy the player kills
        for enemy in groupcollide(enemies, player.bullets, True, True):
            if player.alive():
                score += 1

        # If the player gets near the right side, shift the world left (-x)
        if player.rect.x >= 310:
            diff = player.rect.x - 310
            # add some tweening/easing for momentum
            tween_diff += (diff - tween_diff)*.1
            player.rect.x = 310
            current_level.shift_world(int(-tween_diff))
            # also adjust enemies and bulletcasings by the world shift
            for enemy in enemies:
                enemy.rect.x += (int(-tween_diff))
            for bulletcasing in player.bulletcasings:
                bulletcasing.rect.x += (int(-tween_diff))


        # If the player gets near the left side, shift the world right (+x)
        if player.rect.x <= 290:
            diff = 290 - player.rect.x
            # add some tweening/easing for momentum
            tween_diff += (diff - tween_diff)*.1
            player.rect.x = 290
            current_level.shift_world(int(tween_diff))
            # also adjust enemies and bulletcasings by the world shift
            for enemy in enemies:
                enemy.rect.x += (int(tween_diff))
            for bulletcasing in player.bulletcasings:
                bulletcasing.rect.x += (int(tween_diff))

        # If the player gets to the end of the level, go to the next level
        current_position = player.rect.x + current_level.world_shift
        if current_position < current_level.level_limit:
            player.rect.x = 120
            if current_level_no < len(level_list)-1:
                current_level_no += 1
                current_level = level_list[current_level_no]
                player.level = current_level
 
        # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT
        current_level.draw(screen)
        player_grp.draw(screen)
        player.bullets.draw(screen)
        player.bulletcasings.draw(screen)
        enemies.draw(screen)

        # Blit the current score
        score_text = font.render("Score: %08d"%score, True, constants.PEACH)
        screen.blit(score_text, (5,5))

        # If player dies, blit the respawn menu
        if not player.alive():
            gameover = font.render("Press R to Respawn or ESC to Quit", True, constants.PEACH)
            rect = gameover.get_rect()
            rect.center = screen.get_rect().center
            screen.blit(gameover, rect)
 
        # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
 
        # Limit to 60 frames per second
        clock.tick(60)
 
        # Go ahead and update the screen with what we've drawn.
        pygame.display.flip()
 
    # Be IDLE friendly. If you forget this line, the program will 'hang'
    # on exit.
    pygame.quit()
コード例 #55
0
ファイル: main-D.py プロジェクト: Grug16/Save-the-Robots-Game
def main():
    spawntime = 60
    spawnticker = 0
    score = 0
    #initialize pygame
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    bounds = screen.get_rect()
    font = pygame.font.Font(None,35)
    meteors = Group()
    impacts = Group()
    
    #initialize game
    player = Player(bounds.center, bounds) #sets starting position for player
    player_grp = GroupSingle(player)

    #game loop
    done = False
    clock = pygame.time.Clock()
    print "Loop Started"
    while not done:
	
	
        for event in pygame.event.get():
            if event.type == QUIT:
                done = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                done = True
	    elif event.type == KEYDOWN and event.key == K_y:
		print ImpactGroup.impacts


    #input


#spawn meteors
	spawnticker += 1
	if spawnticker >= spawntime:
            #print "spawned!"
	    meteors.add(Meteor((randrange(0,400),randrange(0,200)),bounds, 90, "rock"))
	    spawnticker = 0
    #update
        player.update()
	meteors.update()
	ImpactGroup.impacts.update()

    #collisions
	coll = groupcollide(player_grp, ImpactGroup.impacts, False, False)
	for robot in coll:
	    robot.damage(coll[robot][0], coll[robot][0].kind)  #ASK ABOUT EASIER WAY TO WRITE THIS
	    #robot.damage(robot[0], robot[0].kind)
	#for robot in coll: #groupcollide(player_grp, ImpactGroup.impacts, False, False):
	#    for meteor in robot:
	#	print meteor
		#robot.damage(meteor, meteor.kind)
	    #print robot
	    #print "Impact List:", groupcollide(player_grp, ImpactGroup.impacts, False, False)
        #    robot.damage(robot{)
            
	    

    #draw
        screen.fill(BG_COLOR)
        
	meteors.draw(screen)
	ImpactGroup.impacts.draw(screen)
	player_grp.draw(screen)
	score_text = font.render("Score: %05d"%score, False, (255,255,255))
        screen.blit(score_text, (5,5))

        pygame.display.flip()
	
        clock.tick(30)