def test_collide_circle_ratio__no_radius_and_ratio_of_two_twice(self): # collide_circle_ratio with no radius set, at a 2.0 ratio, # called twice to check if the bug where the calculated radius # is not stored correctly in the radius attribute of each sprite. collided_func = sprite.collide_circle_ratio(2.0) # Calling collide_circle_ratio will set the radius attribute of the # sprites. If an incorrect value is stored then we will not get the # same result next time it is called: expected_sprites = sorted( sprite.spritecollide(self.s1, self.ag2, dokill=False, collided=collided_func), key=id, ) collided_sprites = sorted( sprite.spritecollide(self.s1, self.ag2, dokill=False, collided=collided_func), key=id, ) self.assertListEqual(expected_sprites, collided_sprites)
def test_collide_circle_ratio__no_radius_and_ratio_of_one(self): # collide_circle_ratio with no radius set, at a 1.0 ratio. self.assertEqual( sprite.spritecollide(self.s1, self.ag2, dokill=False, collided=sprite.collide_circle_ratio(1.0)), [self.s2])
def clean_up_spawn(self): """ Removes flowers that are colliding with hives and adds UI elements to the hives :return: """ for hive in self.hives: flowers = self.flowers spritecollide(hive, flowers, True, collide_circle_ratio(1))
def test_collide_circle_ratio__no_radius_and_ratio_of_twenty(self): # collide_circle_ratio with no radius set, at a 20.0 ratio. collided_func = sprite.collide_circle_ratio(20.0) expected_sprites = sorted(self.ag2.sprites(), key=id) collided_sprites = sorted(sprite.spritecollide( self.s1, self.ag2, dokill=False, collided=collided_func), key=id) self.assertListEqual(expected_sprites, collided_sprites)
def test_collide_circle_ratio__no_radius_and_ratio_of_one(self): # collide_circle_ratio with no radius set, at a 1.0 ratio. self.assertEqual ( sprite.spritecollide ( self.s1, self.ag2, dokill = False, collided = sprite.collide_circle_ratio(1.0) ), [self.s2] )
def test_collide_circle_ratio__no_radius_and_ratio_of_twenty(self): # collide_circle_ratio with no radius set, at a 20.0 ratio. self.assert_( unordered_equality( sprite.spritecollide( self.s1, self.ag2, dokill=False, collided=sprite.collide_circle_ratio(20.0)), [self.s2, self.s3]))
def test_collide_circle_ratio__no_radius_and_ratio_of_twenty(self): # collide_circle_ratio with no radius set, at a 20.0 ratio. self.assert_ ( unordered_equality ( sprite.spritecollide ( self.s1, self.ag2, dokill = False, collided = sprite.collide_circle_ratio(20.0) ), [self.s2, self.s3] ) )
def test_collide_circle_ratio__with_radii_set(self): # collide_circle_ratio with a radius set. self.s1.radius = 50 self.s2.radius = 10 self.s3.radius = 400 collided_func = sprite.collide_circle_ratio(0.5) expected_sprites = sorted(self.ag2.sprites(), key=id) collided_sprites = sorted(sprite.spritecollide( self.s1, self.ag2, dokill=False, collided=collided_func), key=id) self.assertListEqual(expected_sprites, collided_sprites)
def test_collide_circle_ratio__with_radii_set(self): self.s1.radius = 50 self.s2.radius = 10 self.s3.radius = 400 # collide_circle_ratio with a radius set. self.assert_( unordered_equality( sprite.spritecollide( self.s1, self.ag2, dokill=False, collided=sprite.collide_circle_ratio(0.5)), [self.s2, self.s3]))
def update(self) -> None: """Calls the update method of all game objects. NOTE: Logic being directly updated in this function shall be later moved to each object's class. Tests ----- * problem with update() of a sprite * problem with camera.update where player doesnt have a rect * print_log undefined * sprite from pygame not imported """ # Update objects logic self.all_sprites.update() # Make the camera follow the player self.camera.update(self.player) # Player Coin Collecting coin_hits = sprite.spritecollide(self.player, self.coins, True, sprite.collide_circle_ratio(0.5)) for _ in coin_hits: self.player.health += 10 print_log("<game.update>:Player Collected a coin") # Player getting shot player_hits = sprite.spritecollide(self.player, self.enemy_projectiles, True) for hit in player_hits: # For each shot, reduce health by 10 # also push the player self.player.health -= 10 self.player.pos += hit.vel print_log("<game.update>:Player got shot") # Mobs getting shot enemy_hits = sprite.groupcollide(self.player_projectiles, self.all_enemies, True, False) for hit in enemy_hits: enemy_sprites = enemy_hits.get(hit) for enemy_sprite in enemy_sprites: enemy_sprite.die() print_log("<game.update>:Enemy Killed") # Game Over if self.player.rect.bottom > self.camera.height\ or self.player.health < 10: self.playing = False print_log("<game.update>:Game Over")
def test_collide_circle_ratio__with_radii_set(self): self.s1.radius = 50 self.s2.radius = 10 self.s3.radius = 400 # collide_circle_ratio with a radius set. self.assert_ ( unordered_equality ( sprite.spritecollide ( self.s1, self.ag2, dokill = False, collided = sprite.collide_circle_ratio(0.5) ), [self.s2, self.s3] ) )
def test_collide_circle__radius_set_by_collide_circle_ratio(self): # Call collide_circle_ratio with no radius set, at a 20.0 ratio. # That should return group ag2 AND set the radius attribute of the # sprites in such a way that collide_circle would give same result as # if it had been called without the radius being set. collided_func = sprite.collide_circle_ratio(20.0) sprite.spritecollide(self.s1, self.ag2, dokill=False, collided=collided_func) self.assertEqual( sprite.spritecollide( self.s1, self.ag2, dokill=False, collided=sprite.collide_circle ), [self.s2], )