コード例 #1
0
 def explode(self):
     self.kill()
     for x in range(20):
         shine = game_object.Shine(self._game,
                                   [self.rect.centerx, self.rect.centery],
                                   self._angle,
                                   spin=random.uniform(-2, 2),
                                   image=self._game.standard_shine)
         self._game.environment.add(shine)
         self._game.all.add(shine)
コード例 #2
0
 def update(self):
     for caught in pygame.sprite.spritecollide(self, self._game.targets,
                                               False):
         self.kill()
         for x in range(20):
             shine = game_object.Shine(
                 self._game, [self.rect.centerx, self.rect.centery],
                 self._angle,
                 spin=random.uniform(-2, 2))
             self._game.environment.add(shine)
             self._game.all.add(shine)
         caught.hit(self._damage)
     game_object.Game_Object.update(self)
コード例 #3
0
 def update(self):
     shine = game_object.Shine(self._game,
                               [self.rect.centerx, self.rect.centery],
                               self._angle,
                               image=self._game.lightred_shine)
     self._game.environment.add(shine)
     self._game.all.add(shine)
     self.seek()
     if pygame.sprite.spritecollide(self, self._game.targets, False):
         self.explode()
         for obj in self._game.targets.sprites():
             if self.distance_from(obj._position) <= self._exp_radius:
                 obj.hit(self._damage)
     super().update()
コード例 #4
0
    def explode(self):
        """Custom missile explosion"""

        self.kill()
        counter = 0
        for x in range(59):
            shine = game_object.Shine(self._game,
                                      [self.rect.centerx, self.rect.centery],
                                      counter,
                                      speed=[
                                          -math.cos(math.radians(counter)) * 4,
                                          math.sin(math.radians(counter)) * 4
                                      ],
                                      image=self._game.standard_shine)
            self._game.environment.add(shine)
            self._game.all.add(shine)
            counter += 6
コード例 #5
0
    def update(self, pressedKeys):
        """Overriden pygame.sprite.sprite method.
        Acceleration is applied according to its vectorial component and in-game events.
        
        Arguments:
            pressedKeys {Tuple} -- collection of events generated by pygame.key"""

        for caught in pygame.sprite.spritecollide(self, self._game.edge,
                                                  False):
            self.kill()
            for x in range(20):
                shine = game_object.Shine(
                    self._game, [self.rect.centerx, self.rect.centery],
                    self._angle)
                self._game.environment.add(shine)
                self._game.all.add(shine)

        if self._bullet_timer > 0:
            self._bullet_timer -= 1 / self._game.delta_time

        if self._controlled:
            self.controls(pressedKeys)

        game_object.Game_Object.update(self)
コード例 #6
0
    def controls(self, pressedKeys):
        """keyboard handling"""

        cos = math.cos(math.radians(self._angle))
        sin = math.sin(math.radians(self._angle))
        cos90 = math.cos(math.radians(self._angle + 90))
        sin90 = math.sin(math.radians(self._angle + 90))

        rel_max_speed = [self._max_speed * cos, self._max_speed * -sin]

        rel_max_h_speed = [self._max_speed * cos90, self._max_speed * -sin90]

        if pressedKeys[pygame.K_UP]:
            shine = game_object.Shine(self._game,
                                      [self.rect.centerx, self.rect.centery],
                                      self._angle,
                                      image=self._game.white_shine)
            self._game.environment.add(shine)
            self._game.all.add(shine)

            if rel_max_speed[0] > 0:
                if self._speed[0] <= rel_max_speed[0]:
                    self._speed[
                        0] += self._acceleration * cos / self._game.delta_time
            else:
                if self._speed[0] >= rel_max_speed[0]:
                    self._speed[
                        0] += self._acceleration * cos / self._game.delta_time

            if rel_max_speed[1] > 0:
                if self._speed[1] <= rel_max_speed[1]:
                    self._speed[
                        1] += self._acceleration * -sin / self._game.delta_time
            else:
                if self._speed[1] >= rel_max_speed[1]:
                    self._speed[
                        1] += self._acceleration * -sin / self._game.delta_time

        elif pressedKeys[pygame.K_DOWN]:
            shine = game_object.Shine(self._game,
                                      [self.rect.centerx, self.rect.centery],
                                      self._angle + 180,
                                      image=self._game.white_shine)
            self._game.environment.add(shine)
            self._game.all.add(shine)

            if rel_max_speed[0] > 0:
                if self._speed[0] >= -rel_max_speed[0]:
                    self._speed[
                        0] -= self._acceleration * cos / self._game.delta_time
            else:
                if self._speed[0] <= -rel_max_speed[0]:
                    self._speed[
                        0] -= self._acceleration * cos / self._game.delta_time

            if rel_max_speed[1] > 0:
                if self._speed[1] >= -rel_max_speed[1]:
                    self._speed[
                        1] -= self._acceleration * -sin / self._game.delta_time
            else:
                if self._speed[1] <= -rel_max_speed[1]:
                    self._speed[
                        1] -= self._acceleration * -sin / self._game.delta_time

        if pressedKeys[pygame.K_q]:
            if rel_max_h_speed[0] > 0:
                if self._speed[0] <= rel_max_h_speed[0]:
                    self._speed[
                        0] += self._h_acceleration * cos90 / self._game.delta_time
            else:
                if self._speed[0] >= rel_max_h_speed[0]:
                    self._speed[
                        0] += self._h_acceleration * cos90 / self._game.delta_time

            if rel_max_h_speed[1] > 0:
                if self._speed[1] <= rel_max_h_speed[1]:
                    self._speed[
                        1] += self._h_acceleration * -sin90 / self._game.delta_time
            else:
                if self._speed[1] >= rel_max_h_speed[1]:
                    self._speed[
                        1] += self._h_acceleration * -sin90 / self._game.delta_time

        elif pressedKeys[pygame.K_e]:
            if rel_max_h_speed[0] > 0:
                if self._speed[0] >= -rel_max_h_speed[0]:
                    self._speed[
                        0] -= self._h_acceleration * cos90 / self._game.delta_time
            else:
                if self._speed[0] <= -rel_max_h_speed[0]:
                    self._speed[
                        0] -= self._h_acceleration * cos90 / self._game.delta_time

            if rel_max_h_speed[1] > 0:
                if self._speed[1] >= -rel_max_h_speed[1]:
                    self._speed[
                        1] -= self._h_acceleration * -sin90 / self._game.delta_time
            else:
                if self._speed[1] <= -rel_max_h_speed[1]:
                    self._speed[
                        1] -= self._h_acceleration * -sin90 / self._game.delta_time

        if pressedKeys[pygame.K_w]:
            self._spin = self._original_spin / 2

        elif not pressedKeys[pygame.K_w]:
            self._spin = self._original_spin

        if pressedKeys[pygame.K_LEFT]:
            self.spin(self._spin / self._game.delta_time)

        if pressedKeys[pygame.K_RIGHT]:
            self.spin(-self._spin / self._game.delta_time)

        if pressedKeys[pygame.K_s]:
            self._speed = [0, 0]

        if pressedKeys[pygame.K_SPACE] and self._bullet_timer <= 0:
            self._bullet_timer = self._fire_rate
            new_bullet = Bullet(self._game, self._bullet_image, self._position,
                                self._angle, self._bullet_speed, self)
            self._game.bullets.add(new_bullet)
            self._game.all.add(new_bullet)

        if pressedKeys[pygame.K_LSHIFT] and self._bullet_timer <= 0:
            self._bullet_timer = self._fire_rate
            new_missile = Missile(self._game, self._missile_image,
                                  self._position, self._angle, self)
            self._game.bullets.add(new_missile)
            self._game.all.add(new_missile)