Exemple #1
0
    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)
Exemple #2
0
 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])
Exemple #3
0
 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))
Exemple #4
0
    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)
Exemple #5
0
 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]
     )
Exemple #6
0
 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]))
Exemple #7
0
 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]
         )
     )
Exemple #8
0
    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)
Exemple #9
0
    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]))
Exemple #10
0
    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")
Exemple #11
0
    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]
            )
        )
Exemple #12
0
    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],
        )