Пример #1
0
    def powerup_collision_check(self, rocket):
        for powerup in self.powerups[:]:
            if powerup.collided(rocket):
                self.explosions.append(
                    Explosion(powerup.width,
                              rocket.rect.center[0] - rocket.width,
                              rocket.rect.y, self.screen, powerup))
                rocket.powerup_pickup(powerup)
                self.powerups.remove(powerup)

                self.score_checker()

            #Enemy projectile can destroy powerup
            for enemy_projectile in self.enemy_projectiles[:]:
                if powerup.collided(enemy_projectile):
                    self.explosions.append(
                        Explosion(powerup.width, powerup.rect.x,
                                  powerup.rect.y, self.screen,
                                  enemy_projectile))
                    self.enemy_projectiles.remove(enemy_projectile)

                    if powerup not in self.powerups:
                        pass
                    else:
                        self.powerups.remove(powerup)
Пример #2
0
    def start(self):
        pygame.init()

        self.stage = Stage(self, 1)
        self.screen = pygame.display.set_mode((800, 600))

        self.background = Background(self)
        self.background.load()

        self.player = Player(self)
        self.player.load()

        self.bullet = Bullet(self)
        self.bullet.load()

        self.enemies = Enemies(self)
        self.enemies.load()

        self.game_text = GameText(self)
        self.game_text.load()

        self.explosion = Explosion(self)
        self.explosion.load()

        self.caption = Caption(self)
        self.caption.load()

        self.score = Score(self)
        self.score.load()

        while self.running:
            self.screen.fill((0, 0, 0))
            self.background.show()
            self.handle_event()
Пример #3
0
    def render(self):
        #Render asteroids and stars
        for object in self.objects:
            object.render()

        #Render powerups
        if len(self.powerups) > 0:
            for powerup in self.powerups:
                powerup.fallmove()

                if powerup.rect.y > self.screen.get_height():
                    self.powerups.remove(powerup)

            powerups_plain = pygame.sprite.RenderPlain(self.powerups)
            powerups_plain.draw(self.screen)

        #Render enemies
        if len(self.enemies) > 0:
            for enemy in self.enemies:
                enemy.render()

        #Render enemy projectiles
        enemy_shoot_chance = Dice()
        dice_roll = enemy_shoot_chance.roll()
        self.enemy_shoot(dice_roll)

        if len(self.enemy_projectiles) > 0:
            for enemy_projectile in self.enemy_projectiles:
                enemy_projectile.render()

                if enemy_projectile.rect.y > self.screen.get_height():
                    self.enemy_projectiles.remove(enemy_projectile)

        #Render explosions
        if len(self.explosions) > 0:
            for explosion in self.explosions:
                explosion.render_cycle()

                #Destroy asteroids and ufos inside explosion
                if type(explosion.object) is BombProjectile:
                    for object in self.objects:
                        if object.projectile_collided(explosion):
                            self.explosions.append(
                                Explosion(object.size, object.rect.x,
                                          object.rect.y, self.screen,
                                          explosion.object))
                            object.reset()
                            self.score_checker()

                    for enemy in self.enemies:
                        if enemy.projectile_collided(explosion):
                            self.explosions.append(
                                Explosion(object.size, object.rect.x,
                                          object.rect.y, self.screen,
                                          explosion.object))
                            self.enemies.remove(enemy)
                            self.score_checker()

                if explosion.over:
                    self.explosions.remove(explosion)
Пример #4
0
 def hit(self):
     #set true to indicate the brick was hit
     self.broke = True
     #create explosion to draw instead of brick rectangle
     self.explosion = Explosion(self.rect.centerx, self.rect.centery, 4, 25,
                                self.color, "sounds/shortbreak.ogg",
                                self.displaySurface)
Пример #5
0
 def initialize(self):
     pygame.init()
     self.__total_time = pygame.time.get_ticks()
     #flags = pygame.FULLSCREEN | pygame.DOUBLEBUF
     flags = pygame.DOUBLEBUF | pygame.RESIZABLE
     self.__window = pygame.display.set_mode(window_size, flags)
     self.__game_continues = True
     Explosion.load_image()
Пример #6
0
    def update(self):
        "Handle obj interactions, and update each obj."

        if self.verbose: print "Game.update"

        wH = self.screenHeight
        wW = self.screenWidth

        # screen issues
        if self.ship.offScreen(wW, wH):
            self.ship.wrapAround(wW, wH)
        for a in self.asteroids:
            if a.offScreen(wW, wH):
                a.wrapAround(wW, wH)
        for i, b in enumerate(self.bullets):
            if b.offScreen(wW, wH):
                self.bullets.pop(i)

        # explosions done?
        for ei, e in enumerate(self.explosions):
            if e.isDone():
                print "explosion done"
                self.explosions.pop(ei)

        # collision detection
        for bi, b in enumerate(self.bullets):
            for ai, a in enumerate(self.asteroids):
                if b.collision(a):
                    print "collision: ", b, a
                    # replace both
                    self.asteroids.pop(ai)
                    self.bullets.pop(bi)
                    # with an explosion
                    self.explosions.append(Explosion(a.x, a.y))

        # did we just kill all asteroids?
        if len(self.asteroids) == 0:
            self.state.inPlay = False
            self.state.win = True
        # or did asteroids kill us?
        for a in self.asteroids:
            if self.ship.collision(a):
                print "collision with ship!"
                self.state.inPlay = False
                self.state.win = False
                self.explosions.append(Explosion(self.ship.x, self.ship.y))

        # pass on the call to update
        self.ship.update()
        for b in self.bullets:
            b.update()
        for a in self.asteroids:
            a.update()
        for e in self.explosions:
            e.update()
Пример #7
0
 def hit(self, actor):
     if type(actor).__name__ != 'Hero':
         self.x -= self.speed_x
         self.y -= self.speed_y
         self.speed_y = -self.speed_y
     if type(actor).__name__ == 'Weapon':
         self.world.remove_actor(actor)
         self.world.remove_actor(self)
         explosion = Explosion(self.world)
         explosion.x = self.x
         explosion.y = self.y
         self.world.add_actor(explosion)
Пример #8
0
 def create_explosion(self, x_cord, y_cord):
     """ Creates an explosion at coordinates x_cord and y_cord on board. """
     if x_cord < 0 or y_cord < 0 or \
       x_cord >= self.row or y_cord >= self.col:
         return
     explosion = Explosion(x_cord, y_cord)
     self.board[x_cord][y_cord].append(explosion)
Пример #9
0
    def update(self, time, scene):
        self.floatX += self.speedX * time * GRENADE_SPEED
        self.floatY += self.speedY * time * GRENADE_SPEED
        self.rect.x = roundToInt(self.floatX)
        self.rect.y = roundToInt(self.floatY)

        self.timeToBoom -= time

        if self.timeToBoom <= 0:
            scene.bulletGroup.remove(self)
            scene.bulletGroup.add(Explosion(self.rect.x, self.rect.y))

            # Kill people!
            originalRect = self.rect.copy()
            self.rect.inflate_ip(80, 80)  # 80x80 area damage

            enemies_hit = sprite.spritecollide(self, scene.enemyGroup, False)

            for enemy in enemies_hit:
                # Friendly fire
                if self.creator.__class__.__name__ == enemy.__class__.__name__:
                    continue
                enemy.receive_attack(self.atk)

            if sprite.collide_rect(self, scene.player):
                scene.player.receive_attack(self.atk)

            self.rect = originalRect  # Restore the real rect

        self.timeToStop -= time

        if self.timeToStop <= 0:
            self.speedX = 0
            self.speedY = 0
Пример #10
0
 def destruct_rocket(self, r, object):
     self.reset_view = True
     r.explode()
     self.reset_view = True
     self.explosions.append(Explosion(r.get_pos(), 0.04, object.get_nationality()))
     self.rockets.remove(r)
     self.planet.load_rocket()
Пример #11
0
 def explode(self):
     self.sonidos.PlayExplosion()
     self.sprite.visible = False
     Entidades.eliminarBomba(self.sprite)
     self.exp = Explosion(self.rango, self.x, self.y, self.atraviesa)
     t = threading.Timer(1, self.destroyExplode)
     t.start()
Пример #12
0
    def timerFired(self, dt):
        self.timer += dt
        self.shipGroup.update(dt, self.isKeyPressed, self.width, self.height)
        self.asteroids.update(self.width, self.height)
        self.bullets.update(self.width, self.height)
        self.explosions.update(dt)
        self.starGroup.update()
        ship = self.shipGroup.sprite
        star = self.starGroup.sprite

        if ((not ship.isInvincible()) and pygame.sprite.groupcollide(
                self.shipGroup, self.asteroids, False, False,
                pygame.sprite.collide_circle)):

            self.explosions.add(Explosion(ship.x, ship.y))
            self.shipGroup.add(Ship(self.width / 2, self.height / 2))

        for asteroid in pygame.sprite.groupcollide(
                self.asteroids, self.starGroup, True, False,
                pygame.sprite.collide_circle):
            self.asteroids.remove(asteroid)

        for asteroid in pygame.sprite.groupcollide(
                self.asteroids, self.bullets, True, True,
                pygame.sprite.collide_circle):
            self.asteroids.add(asteroid.breakApart())
Пример #13
0
 def __explosion(self, explosiones):
     if explosiones:
         path = os.path.join(BASE_PATH, "Explosion")
         self._audio.explosion()
         for e in explosiones:
             x, y = e
             self._explosiones.add(Explosion(x, y, path))
Пример #14
0
    def rocket_collision_check(self, rocket):
        for object in self.objects:
            if object.rocket_collided(rocket):
                self.explosions.append(
                    Explosion(rocket.width * 2,
                              rocket.rect.center[0] - rocket.width,
                              rocket.rect.y, self.screen, object))
                object.reset()

        for enemy_projectile in self.enemy_projectiles:
            if enemy_projectile.rocket_collided(rocket):
                self.explosions.append(
                    Explosion(rocket.width * 2,
                              rocket.rect.center[0] - rocket.width,
                              rocket.rect.y, self.screen, enemy_projectile))
                self.enemy_projectiles.remove(enemy_projectile)
Пример #15
0
    def init(self):
        self.bgColor = (0, 0, 0)
        Ship.init()
        ship = Ship(self.width / 2, self.height / 2)
        self.shipGroup = pygame.sprite.GroupSingle(ship)

        Asteroid.init()
        self.asteroids = pygame.sprite.Group()
        for i in range(5):
            x = random.randint(0, self.width)
            y = random.randint(0, self.height)
            self.asteroids.add(Asteroid(x, y))

        self.bullets = pygame.sprite.Group()

        Explosion.init()
        self.explosions = pygame.sprite.Group()
Пример #16
0
 def afterExpl(self):  # clears up the exploded blocks
     n = self.pos[0]
     m = self.pos[1]
     expl = Explosion()
     expl.afterExplosion(n, m)
     expl.afterExplosion(n - 2, m)
     expl.afterExplosion(n + 2, m)
     expl.afterExplosion(n, m + 4)
     expl.afterExplosion(n, m - 4)
     self.set = 0
     return
Пример #17
0
 def bang_action(self, other):
     global kol_bang1
     other.kill()
     x = (self.pos[0] + other.pos[0]) / 2
     y = (self.pos[1] + other.pos[1]) / 2
     exp = Explosion(pos=(x, y))
     shoot_sound = pygame.mixer.Sound('vz.mp3')
     shoot_sound.play()
     kol_bang1 += 1
     return [exp]
Пример #18
0
def alien_bullet_update(alien_bullets, ai_settings, ship, explosions,
                        sprite_sheet, screen, stats, sb, ship_explosions_sheet,
                        ship_explosions):
    for bullet in alien_bullets.copy():
        bullet.y += bullet.speed_factor
        bullet.rect.y = bullet.y
        bullet.draw_bullet()

        if bullet.rect.bottom >= ai_settings.screen_height:
            alien_bullets.remove(bullet)
        elif bullet.rect.y >= ship.rect.y and ship.rect.right >= bullet.rect.x >= ship.rect.left:
            alien_bullets.remove(bullet)
            new_explosion = Explosion(ship_explosions_sheet, screen)
            new_explosion.rect = pygame.Rect(ship.rect)
            new_explosion.rect.centerx = ship.rect.centerx
            ship_explosions.append(new_explosion)
            ship.ship_destroyed = True
            stats.ships_left -= 1
            sb.prep_ships()
Пример #19
0
    def update(self):
        # drop the bomb!! pass in an x velocity and y velocity
        self.rect.move_ip(0, self.y_velocity)

        # blow up bomb, if it hits the ground
        # where y is 470
        if (self.rect.bottom >= 750):
            Explosion(self)

            self.kill()
Пример #20
0
 def explode(self, bomb):
     # out with the old
     self.bombs.remove(bomb)
     self.remove(bomb, bomb.getPos())
     bomb.player.addBomb()
     # in with the new
     explosion = Explosion(bomb, self)
     affected = explosion.getAffected()
     for xy in filter(self.map.has_key, affected):
         for el in filter(lambda x: x.fragile, self.map[xy]):
             self.remove(el, xy)
         if not self.map[xy]: 
             del self.map[xy]
     for xy in filter(self.playersAt, affected):
         for player in self.playersAt(xy):
             if player.die():
                 print "{} dies".format(player)
                 bomb.player.resetKillCounter(suicide = bomb.player == player)
     self.explosions.append(explosion)
Пример #21
0
 def collision(self, mObjects, explosions):
     for mOb1 in mObjects:
         for mOb2 in mObjects:
             #Ship
             if (isinstance(mOb1, Ship)):
                 #Ship, Astroid
                 if (isinstance(mOb2, AstroidClass)):
                     pos = self.collide(mOb1, mOb2)
                     if (pos != None):
                         explosions.append(Explosion(pos[0], pos[1]))
     return None
Пример #22
0
	def explode(self, triggeredByAnotherBomb):
		now = pg.time.get_ticks()
		if now - self.timeOfBirth > settings.BOMB_CLOCK or triggeredByAnotherBomb:
			try:
				self.game.bombPos.remove([self.bombx, self.bomby])
			except:
				pass
			self.game.bombs.remove(self)
			self.player.bomb += 1
			self.kill()	
			Explosion(self.game, self.bombx*settings.TILESIZE, self.bomby*settings.TILESIZE, self.power, "center")
Пример #23
0
 def make_fights(self):
     for player_ship in self.player_ships:
         enemy_ships = check_for_collision_with_list(
             player_ship, self.enemy_ships)
         for enemy_ship in enemy_ships:
             while player_ship.get_hp() > 0 and enemy_ship.get_hp() > 0:
                 player_ship.get_damage(player_ship.blow_damage +
                                        enemy_ship.make_damage())
                 enemy_ship.get_damage(enemy_ship.blow_damage +
                                       player_ship.make_damage())
             explosion = Explosion(self.explosion_texture)
             explosion.center_x = (player_ship.center_x +
                                   enemy_ship.center_x) / 2
             explosion.center_y = player_ship.center_y
             explosion.update()
             self.explosions_list.append(explosion)
             if player_ship.get_hp() <= 0:
                 player_ship.remove_from_sprite_lists()
             if enemy_ship.get_hp() <= 0:
                 enemy_ship.remove_from_sprite_lists()
             if enemy_ship.get_hp() < player_ship.get_hp():
                 self.player_benefit += (1.5 * MONEY_COEFFICIENT - player_ship.cost) /\
                                        MONEY_COEFFICIENT * enemy_ship.cost
             else:
                 self.enemy_benefit += (1.5 * MONEY_COEFFICIENT - enemy_ship.cost) /\
                                       MONEY_COEFFICIENT * player_ship.cost
Пример #24
0
 def __save_colisiones_data(self, _dict):
     path = os.path.join(BASE_PATH, "Explosion")
     exp = []
     for ip in _dict.keys():
         exp.extend(_dict[ip].get("e", []))
     if exp:
         self._audio.explosion()
     for e in exp:
         self._explosiones.add(Explosion(e["x"], e["y"], path))
     # Las explosiones no deben guardarse
     for ip in self._data_game_players.keys():
         if "e" in self._data_game_players[ip].keys():
             del (self._data_game_players[ip]["e"])
Пример #25
0
 def bang_action(self, other):
     e = self.energy + other.energy
     if e < 0.01:
         return super().bang_action(other)
     else:
         self.kill()
         other.kill()
         x = (self.pos[0] + other.pos[0]) / 2
         y = (self.pos[1] + other.pos[1]) / 2
         exp = Explosion(pos=(x, y))
         shoot_sound = pygame.mixer.Sound('vz.mp3')
         shoot_sound.play()
         return [exp]
Пример #26
0
 def explodeBomb(self, life):
     n = self.pos[0]
     m = self.pos[1]
     if life != Board.lives:
         return
     expl = Explosion()
     expl.explode(n, m)
     expl.explode(n - 2, m)
     expl.explode(n + 2, m)
     expl.explode(n, m + 4)
     expl.explode(n, m - 4)
     if Board.lives >= 0:
         # The explosion is shown for 1 second
         t = Timer(1, self.afterExpl)
         t.start()
     return
Пример #27
0
def detect_collisions(player, aliens, shots, bombs, boom_sound):
    for alien in pygame.sprite.groupcollide(shots, aliens, 1, 1).keys():
        boom_sound.play()
        Explosion(alien)

        Score.score_points = Score.score_points + 1

        check_game_level(Score.score_points)

    for bomb in pygame.sprite.spritecollide(player, bombs, 1):
        boom_sound.play()

        Explosion(player)
        Explosion(bomb)

        PlayerLives.lives = PlayerLives.lives - 1

        check_player_life(player)

    for bomb in pygame.sprite.groupcollide(shots, bombs, 1, 1).keys():
        boom_sound.play()
        bomb.kill()
        Explosion(bomb)
Пример #28
0
 def hit(self):
     #indicates this invader is hit
     self.damaged = True
     #increase the speed of all the Invaders
     Invader.speed = Invader.speed + 2
     #increase the number of Invaders destroyed
     Invader.numberDestroyed = Invader.numberDestroyed + 1
     #change the amount moved based on how many destroyed
     #increase 1 for every 5 Invaders destroyed
     Invader.moveAmount = int(Invader.numberDestroyed / 5) + 4
     #create an explosion to draw instead of the invader image
     self.explosion = Explosion(self.rect.centerx, self.rect.centery, 4, 15,
                                self.color, self.destroySound,
                                self.displaySurface)
Пример #29
0
 def check_ships(self, ships):
     for ship in ships:
         if ship.get_hp() <= 0:
             explosion = Explosion(ship.dying_sprite)
             explosion.center_x = ship.center_x
             explosion.center_y = ship.center_y
             explosion.update()
             self.explosions_list.append(explosion)
             ship.remove_from_sprite_lists()
Пример #30
0
def check_bullets_hit_meteor():
    global score
    # TODO 05.修正碰撞偵測的規則
    hits = pygame.sprite.groupcollide(meteors, bullets, True, True)
    if hits:
        for hit in hits:
            # TODO 02.修改加分的機制

            score += round(60 / hit.size)
            explosion = Explosion(hit.rect.centerx, hit.rect.centery)
            all_sprites.add(explosion)
            newSupport(hit.rect.centerx, hit.rect.centery)
            hit.kill()
            # print("check_bullets_hit_meteor")
            newMeteor()
Пример #31
0
 def check_collisions(self, ships, base: Sprite):
     for ship in ships:
         if check_for_collision(ship, base):
             base.damage(ship.make_damage())
             explosion = Explosion(self.explosion_texture)
             explosion.center_x = base.center_x
             explosion.center_y = base.center_y
             explosion.update()
             self.explosions_list.append(explosion)
             ship.remove_from_sprite_lists()
Пример #32
0
def check_bullets_hit_enemy():
    global  score
    hits = pygame.sprite.groupcollide(enemies,bullets,True,True,pygame.sprite.collide_circle_ratio(1))
    if hits:
        for hit in hits:
            hit.kill()
            score += (hit.size)*2
            
            # print("check_bullets_hit_meteor")
            newEnemy()
            explosion=Explosion(hit.rect.centerx,hit.rect.centery)
            all_sprites.add(explosion)
            type=random.randint(0,1)
            support=Support(hit.rect.centerx,hit.rect.centery,type)
            supports.add(support)
            all_sprites.add(supports)
Пример #33
0
class Bomba(object):
    MAX_RANGO = 15

    @staticmethod
    def getMaxRango():
        return Bomba.MAX_RANGO

    def __init__(self, nombre, x, y, atrav):
        self.rango = 3
        self.sprite = None
        self.spriteName = nombre
        self.escalaX = 1
        self.escalaY = 1
        self.atraviesa = atrav

        self.x = int(x / 52.3076923077) * 52.3076923077
        self.y = int(y / 52.3076923077) * 52.3076923077

        self.sonidos = Sonidos()
        self.exp = None
        self.explosionEnded = False
        self.atraviesa = atrav
        time = threading.Timer(2.5, self.explode)
        time.start()

    def setScales(self, scaleX, scaleY):
        self.escalaX = scaleX
        self.escalaY = scaleY

    def setPosicion(self, x, y):
        self.x = x
        self.x = int(x / 52.3076923077) * 52.3076923077
        self.y = y
        self.y = int(y / 52.3076923077) * 52.3076923077

    def setRango(self, rango):
        self.rango = rango

    def explode(self):
        self.sonidos.PlayExplosion()
        self.sprite.visible = False
        Entidades.eliminarBomba(self.sprite)
        self.exp = Explosion(self.rango, self.x, self.y, self.atraviesa)
        t = threading.Timer(1, self.destroyExplode)
        t.start()

    def destroyExplode(self):
        self.explosionEnded = True
        self.exp.endExplosion()

    def getSprite(self):
        sprite = MySprite(self.spriteName, self.x, self.y, 10)
        sprite.t = 20.0
        sprite.listframes(1, 7, 50, 50)
        sprite.setframe(1)
        return sprite

    def Update(self, gameTime):
        if self.sprite == None:
            self.sprite = self.getSprite()
            Entidades.agregarBomba(self.sprite)
        if self.sprite.visible:
            self.sprite.animar(False, [1, 2, 3, 4, 5, 6, 7], gameTime)
            self.sprite.post_update("Estatico")
        else:
            if self.exp != None:
                if not self.explosionEnded:
                    self.exp.Update(gameTime)

    def Draw(self, gameTime, window):
        if self.sprite == None:
            self.sprite = self.getSprite()
            Entidades.agregarBomba(self.sprite)
        if self.sprite.visible:
            window.Draw(self.sprite)
        else:
            if self.exp != None:
                if not self.explosionEnded:
                    self.exp.Draw(gameTime, window)

    def toString(self):
        s = "ClassName: Bomba\n"
        s += "Sprite: " + self.spriteName + "\n"