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)
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)
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()
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
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)
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)