Beispiel #1
0
 def test_collide_rect_ratio__ratio_of_one_like_default(self):
     # collide_rect_ratio should behave the same as default at a 1.0 ratio.
     self.assertEqual(
         sprite.spritecollide(self.s1,
                              self.ag2,
                              dokill=False,
                              collided=sprite.collide_rect_ratio(1.0)),
         [self.s2])
Beispiel #2
0
    def test_collide_rect_ratio__collides_all_at_ratio_of_twenty(self):
        # collide_rect_ratio should collide all at a 20.0 ratio.
        collided_func = sprite.collide_rect_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(collided_sprites, expected_sprites)
Beispiel #3
0
 def test_collide_rect_ratio__collides_all_at_ratio_of_twenty(self):
     # collide_rect_ratio should collide all at a 20.0 ratio.
     self.assert_(
         unordered_equality(
             sprite.spritecollide(self.s1,
                                  self.ag2,
                                  dokill=False,
                                  collided=sprite.collide_rect_ratio(20.0)),
             [self.s2, self.s3]))
Beispiel #4
0
    def spawn_new_orb_randomly(self):
        while True:
            # do not spawn orbs on top of robot or obstacles or outside the floor
            orb_width, orb_height = self.settings['orb_size']
            x, y = random.randint(0, self.floor.width -
                                  orb_width), random.randint(
                                      0, self.floor.height - orb_height)

            new_orb = Orb(x, y, self)
            if self.state == OrbCatchingGame.STATE_BONUS:
                new_orb = BonusOrb(x, y, self)

            if not spritecollideany(new_orb, self.obstacles, collide_rect_ratio(self.spawn_dist_obs_orb)) and \
                    not collide_rect_ratio(self.spawn_dist_robot_orb)(new_orb, self.robot) and \
                    not spritecollideany(new_orb, self.orbs, collide_rect_ratio(self.spawn_dist_orb_orb)):
                break

        self.orbs.add(new_orb)
Beispiel #5
0
    def _init_obstacle_randomly(self, obstacles):
        obstacle_width, obstacle_height = self.settings['obstacle_size']
        while True:
            x, y = random.randint(0, self.floor.width -
                                  obstacle_width), random.randint(
                                      0, self.floor.height - obstacle_height)
            obstacle = Obstacle(x, y, self.settings['obstacle_size'])

            if not spritecollideany(
                    obstacle, obstacles,
                    collide_rect_ratio(self.spawn_dist_obs_obs)):
                if hasattr(self, 'robot') and self.robot is not None:
                    if not collide_rect_ratio(self.spawn_dist_obs_robot)(
                            obstacle, self.robot):
                        break
                else:
                    break
        return obstacle
Beispiel #6
0
 def test_collide_rect_ratio__ratio_of_one_like_default(self):
     # collide_rect_ratio should behave the same as default at a 1.0 ratio.
     self.assertEqual (
         sprite.spritecollide (
             self.s1, self.ag2, dokill = False,
             collided = sprite.collide_rect_ratio(1.0)
         ),
         [self.s2]
     )
 def collide(a, b):
     """
     碰撞计算
     :param a: 精灵a
     :param b: 精灵b
     :return: 是否发生碰撞
     """
     if a == b:
         return False
     return sprite.collide_rect_ratio(collide_ratio)(a, b)
Beispiel #8
0
 def test_collide_rect_ratio__collides_all_at_ratio_of_twenty(self):
     # collide_rect_ratio should collide all at a 20.0 ratio.
     self.assert_ (
         unordered_equality (
             sprite.spritecollide (
                 self.s1, self.ag2, dokill = False,
                 collided = sprite.collide_rect_ratio(20.0)
             ),
             [self.s2, self.s3]
         )
     )