示例#1
0
 def fire(self):
     """fires missile"""
     if self.app.config['General']['next_gen']:
         if self.app.score.shots > 0:
             self.app.missile_list.append(missile.Missile(self.app))
             self.app.snd_missile_fired.play()
             self.app.score.shots -= 1
         else:
             self.app.snd_empty.play()
             if self.app.config['Missile']['empty_penalty']:
                 self.app.score.pnts -= self.app.config['Missile'][
                     'missile_penalty']
                 self.app.score.bonus -= self.app.config['Missile'][
                     'missile_penalty']
     else:
         self.app.missile_list.append(missile.Missile(self.app))
         self.app.snd_missile_fired.play()
         if self.app.score.shots > 0:
             self.app.score.shots -= 1
         else:
             self.app.snd_empty.play()
             self.app.score.pnts -= self.app.config['Missile'][
                 'missile_penalty']
             self.app.score.bonus -= self.app.config['Missile'][
                 'missile_penalty']
示例#2
0
 def fire(self):
     """fire a missile"""
     if self.missile['current'] < self.missile['max']:
         self.missile['current'] += 1
         if self.heading == "right":
             self.objects.append(
                 missile.Missile(self.pos_x, self.pos_y, self))
         else:
             self.objects.append(
                 missile.Missile(self.pos_x + 1, self.pos_y, self))
示例#3
0
 def run(self,
         omega_plane=540,
         v_plane=240,
         omega_missile=150,
         v_missile=500):
     """ () -> void
     runs the game routine
     ORDER OR OPERATION:
     1. move()
     2. shift()
     3. pos()
     """
     # seed(7)
     self.alive = True
     self.score = 0
     self.init_display()
     self.plane = plane.Plane(400, 200, 0, v_plane, omega_plane, self.fps)
     self.missiles = []
     self.missiles.append(
         missile.Missile(randint(-100, 900), 0, 0, v_missile, omega_missile,
                         0, 0, self.fps, 1))
     try:
         while self.alive:
             # main game loop
             self.mainloop(omega_missile, v_missile)
         cprint("You got destroyed by the AIM9X Sidewinder",
                'red',
                'on_green',
                attrs=['bold'])
         cprint("Press <ENTER> to restart", 'red')
         while not self.alive and self.running:
             # restart loop
             self.restart()
     except KeyboardInterrupt:
         self.quit()
示例#4
0
文件: weapon.py 项目: colshag/ANW
    def fireMissile(self):
        """Fire a missile based weapon"""
        import anwp.sims
        myGalaxy = self.myShip.myGalaxy
        myEmpire = myGalaxy.empires[self.myShip.empireID]
        # determine missile image to use
        if self.myWeaponData.missile == 'impact':
            # add sound
##            myGalaxy.game.app.playSound('missile1')
            #cannon sounds way cooler. :)
            myGalaxy.game.app.playSound('cannon6')
            num = 1
        else:
            # add sound
            myGalaxy.game.app.playSound('photon1')
            num = 2
        name = 'missile%d_%s_%s' % (num, myEmpire.color1, myEmpire.color2)
        imageFileName = '%s%s.png' % (myGalaxy.game.app.simImagePath, name)
        speed = 0
        force = 1
        (x,y) = self.getMyXY()
        # get relative angle between missile and target
        angle = anwp.func.funcs.getRelativeAngle(x, y, self.currentTarget.posX, self.currentTarget.posY)
        # determine proper Missile category
        category = anwp.sims.categories.MissileCategory(imageFileName, string.lower(self.myWeaponData.abr[0]), num)
        sim = missile.Missile(category, self, x, y, angle)
        myGalaxy.world.addToWorld(sim, x, y, angle, speed, force)
        sim.velocityX = self.myShip.velocityX
        sim.velocityY = self.myShip.velocityY
示例#5
0
 def spawn_missiles(self, omega_missile, v_missile):
     ''' spawn a missile near the plane when called
     4 cases: above below left right
     '''
     c = choice([0, 1, 2, 3])
     if c == 0:
         # spawn above
         self.missiles.append(missile.Missile(randint(-100, 900), 0, 0,\
              v_missile, omega_missile, 0, 0, self.fps, 1))
     elif c == 1:
         # spawn below
         self.missiles.append(missile.Missile(randint(-100, 900), 600, 0,\
              -1*v_missile, omega_missile, 0, 0, self.fps, 1))
     elif c == 2:
         # left
         self.missiles.append(missile.Missile(0, randint(-100, 700),\
              v_missile, 0, omega_missile, 0, 0, self.fps, 1))
     else:
         # right
         self.missiles.append(missile.Missile(800, randint(-100, 700),\
              -1*v_missile, 0, omega_missile, 0, 0, self.fps, 1))
示例#6
0
    for event in pygame.event.get():

        # check if the event is the X button
        if event.type == pygame.QUIT:
            # if it is quit the game
            pygame.quit()
            exit(0)

        if event.type == pygame.KEYDOWN:
            if event.key == K_LEFT:
                keys[0] = True
            elif event.key == K_RIGHT:
                keys[1] = True

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                keys[0] = False
            elif event.key == pygame.K_RIGHT:
                keys[1] = False

        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            missiles.append(missile.Missile(tankPosition))
            # missiles[len(missiles) - 1].display()

    # 9 - Move player
    if keys[0]:
        tankPosition[0] -= 5
    elif keys[1]:
        tankPosition[0] += 5

    pygame.display.flip()
    def update(self):
        # Check if player is inside the zone
        self.player_in_zone = pygame.sprite.collide_rect(self, self.game.zone)

        # Check for collision between player and blocks
        if pygame.sprite.spritecollide(self, self.game.blocks, True):
            self.bounce()
            # Create missile sprite if none exist
            if (len(self.game.missiles) == 0):
                # Add missile sprite if there are none already flying
                self.game.missile = missile.Missile(self.game, settings.BLUE,
                                                    self.rect.y)
                self.game.missiles.add(self.game.missile)
                self.game.missile.missileState = 1

    # Check for collision between player and enemy (not flying)
        if (self.game.enemy.enemyState != 2):
            if pygame.sprite.collide_rect(self, self.game.enemy):
                # Create missile sprite if none exist
                if (len(self.game.missiles) == 0):
                    # Add missile sprite if there are none already flying
                    self.game.missile = missile.Missile(
                        self.game, settings.BLUE, self.rect.y)
                    self.game.missiles.add(self.game.missile)
                    self.game.missile.missileState = 1

        # Read keyboard
        self.keys = pygame.key.get_pressed()
        # Update player position according to speed
        if self.keys[pygame.K_LEFT]:
            self.x -= settings.PLAYER_VELOCITY
            self.rect.x = int(self.x)
        if self.keys[pygame.K_RIGHT]:
            self.x += settings.PLAYER_VELOCITY
            self.rect.x = int(self.x)
        if self.keys[pygame.K_UP]:
            self.y -= settings.PLAYER_VELOCITY
            self.rect.y = self.y
        if self.keys[pygame.K_DOWN]:
            self.y += settings.PLAYER_VELOCITY
            self.rect.y = self.y
        # Fire pressed
        if self.keys[pygame.K_SPACE]:
            # Test if player is outside the zone
            if (not self.player_in_zone):
                # Launch missile if one is set
                if (len(self.game.missiles) != 0):
                    self.game.missile.missileState = 2
                # Create bullets if there is no missile set or flying
                if (len(self.game.missiles) == 0):
                    if (pygame.time.get_ticks() - settings.BULLET_LAUNCH_TIME
                            >= settings.BULLET_DELAY):
                        self.game.bullet = bullet.Bullet(
                            self.game, settings.GREEN, self.rect.x,
                            self.rect.y)
                        self.game.bullets.add(self.game.bullet)

        # Make sure the player don't exit the screen
        if self.rect.x < 0:
            self.x = 0
            self.rect.x = self.x
        if self.rect.x > settings.SCREEN_WIDTH - settings.BLOCKSIZE:
            self.x = settings.SCREEN_WIDTH - settings.BLOCKSIZE
            self.rect.x = self.x
        # If the the players to the bottom or top, make it appears at the opposite
        if self.rect.y < 0:
            self.y = settings.SCREEN_HEIGHT - settings.BLOCKSIZE
            self.rect.y = self.y
        if self.rect.y > settings.SCREEN_HEIGHT - settings.BLOCKSIZE:
            self.y = 0
            self.rect.y = self.y
示例#8
0
文件: ship.py 项目: jmck5/spacies
 def fire(self):
     self.missiles.append(missile.Missile(self.x+(self.width/2), self.y-5 ))
     self.fireSound.play()
示例#9
0
    def update(self, playerpos, speed, slowvalue, player_live):
        if self.health <= 0:
            self.killit = True
        missile_attack = False
        shooting = False
        direc = self.sub_vec(playerpos, self.pos)
        dis = self.norm(direc)

        if dis > 1500 or self.noactiontime > 70:
            missile_attack = True
        else:
            shooting = True

        self.slowvalue = slowvalue
        self.frame = (self.frame + 1) % len(self.imgs)

        if not player_live:
            self.shoot = False
        if not self.killit:
            if player_live:

                if missile_attack:
                    self.noactiontime = 0
                    if (len(self.launched_missiles.sprites()) <
                            config.launch_missiles_limit
                            and self.total_missiles > 0
                            and self.launch_time > config.launch_time):
                        missile1 = missile.Missile()
                        missile1.pos = list(self.pos)
                        # missile1.v = self.v
                        self.launched_missiles.add(missile1)
                        self.launch_time = 0
                        self.total_missiles -= 1

                    self.launch_time += 1 * self.slowvalue
                elif shooting:
                    ang = math.degrees(self.angle_2vec(self.v, direc))
                    # print(ang)
                    self.noactiontime = 0
                    if ang < 10:
                        self.shoot = True
                    else:
                        self.shoot = False
                    # print(math.degrees(ang))
                else:
                    self.noactiontime += 1

                if self.slowdown:
                    self.speed = 200
                else:
                    self.speed = config.fighter_speed

                rot_dir = self.sub_vec(playerpos, self.pos)
                v_turn = self.unit(self.sub_vec(rot_dir, self.v))
                v_turn = self.multiply(self.slowvalue, v_turn)
                t1 = self.multiply(self.speed, self.v)
                t2 = self.multiply(self.turn_speed, v_turn)
                # print(t1,"----",t2)
                if not self.slowdown:
                    self.v = self.add_vec(t1, t2)
        else:
            self.kill()
            for i in self.particle_system.particles:
                if (i.size >= config.particle_expansion_size):
                    self.particle_system.particles.remove(i)

        self.v = self.unit(self.v)
        self.pos = self.add_vec(
            self.pos, self.multiply(self.speed * config.dt * slowvalue,
                                    self.v))
        if not self.killit:
            self.particle_system.add_particle(self.pos)
        self.rot_center()
        self.renderPosition(playerpos)
        self.rect.centerx = self.renderpos[0]
        self.rect.centery = self.renderpos[1]
        self.angle = self.calculate_angle(self.v)
示例#10
0
def game_loop():
    global pause

    default_font = pygame.font.Font("./fonts/NanumGothic.ttf", 28)
    background_image = pygame.image.load("./images/background.png")
    gameover_sound = pygame.mixer.Sound("./sounds/gameover.wav")
    pygame.mixer.music.load("./sounds/music.wav")
    pygame.mixer.music.play(-1)  # 무한반복
    fps_clock = pygame.time.Clock()

    players = player.Player()
    missile_group = pygame.sprite.Group()
    rock_group = pygame.sprite.Group()

    occur_prob = 40
    shot_count = 0
    count_missed = 0

    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    players.dx -= 5
                elif event.key == pygame.K_RIGHT:
                    players.dx += 5
                elif event.key == pygame.K_UP:
                    players.dy -= 5
                elif event.key == pygame.K_DOWN:
                    players.dy += 5
                elif event.key == pygame.K_SPACE:
                    missiles = missile.Missile(players.rect.centerx,
                                               players.rect.y, 10)
                    missiles.launch()
                    missile_group.add(missiles)
                elif event.key == pygame.K_p:
                    pause = True
                    paused()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    players.dx = 0
                elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    players.dy = 0

        screen.blit(background_image, background_image.get_rect())

        occur_of_rocks = 1 + int(shot_count / 300)
        min_rock_speed = 1 + int(shot_count / 200)
        max_rock_speed = 1 + int(shot_count / 100)

        if random.randint(1, occur_prob) == 1:
            for i in range(occur_of_rocks):
                speed = random.randint(min_rock_speed, max_rock_speed)
                rocks = rock.Rock(random.randint(0, Window_width - 30), 0,
                                  speed)
                rock_group.add(rocks)

        draw_text("파괴한 운석: {}".format(shot_count), default_font, screen, 100,
                  20, YELLOW)
        draw_text("놓친 운석: {}".format(count_missed), default_font, screen, 400,
                  20, RED)

        for missiles in missile_group:
            rocks = missiles.collide(rock_group)  # 미사일과 운석이 충돌한 경우
            if rocks:
                missiles.kill()
                rocks.kill()
                occur_explosion(screen, rocks.rect.x, rocks.rect.y)
                shot_count += 1

        for rocks in rock_group:
            if rocks.out_out_screen():  # 운석이 화면 밖으로 나간 경우
                rocks.kill()
                count_missed += 1

        rock_group.update()
        rock_group.draw(screen)
        missile_group.update()
        missile_group.draw(screen)
        players.update()
        players.draw(screen)
        pygame.display.flip()

        # 게임 종료 조건
        if players.collide(rock_group) or count_missed >= 3:
            pygame.mixer_music.stop()
            occur_explosion(screen, players.rect.x, players.rect.y)
            pygame.display.update()
            gameover_sound.play()
            sleep(1)
            done = True

        fps_clock.tick(FPS)

    return "game_menu"
示例#11
0
def game_loop():
    hitx = []
    hity = []
    p.set_health(100)
    done = False
    blood_spots = []
    can_shoot = True
    last_shot = 1000
    alive = True
    temp_clock = []
    level = 1
    score = 0

    sub_score = lambda x: 0 if score - x <= 0 else score - x

    while alive:
        screen.fill(WHITE)
        screen.blit(bg, (0, 0))

        for spots in blood_spots:
            screen.blit(bloodpic, (spots[0], spots[1]))

        if not done:
            create_zombies(1)
            create_devils(1)
            done = True

        for m in medkits:
            screen.blit(m.image, (m.rect.x, m.rect.y))
            if m.rect.colliderect(p.rect):
                p.heal()
                m.kill()

        for zombs in zombies:
            zombs.move_towards_player(p)
            screen.blit(zombs.image, (zombs.rect.x, zombs.rect.y))
            if zombs.rect.colliderect(p.rect):
                blood_spots.append((zombs.rect.x, zombs.rect.y))
                p.get_hit()
                zombs.kill()

                score = sub_score(5)
                hitx.append(p.rect.x)
                hity.append(p.rect.y)

        for devs in devils:
            devs.move_towards_player(p)
            screen.blit(devs.image, (devs.rect.x, devs.rect.y))
            if devs.rect.colliderect(p.rect):
                blood_spots.append((devs.rect.x, devs.rect.y))
                p.get_hit()
                devs.kill()

                score = sub_score(10)
                hitx.append(p.rect.x)
                hity.append(p.rect.y)

            if pygame.time.get_ticks() - devs.last_shot >= 2000:
                chance = random.random()
                if chance < .05:
                    devs.last_shot = pygame.time.get_ticks()
                    m = missile.Missile(p, devs)
                    missiles.add(m)

        for m in missiles:
            m.update()
            screen.blit(m.image, (m.rect.x, m.rect.y))
            for zombs in zombies:
                if m.target == "enemy":
                    if zombs.rect.colliderect(m.rect):
                        blood_spots.append((zombs.rect.x, zombs.rect.y))
                        zombs.kill()
                        m.kill()
                        score += 5
            for devs in devils:
                if m.target == "enemy":
                    if devs.rect.colliderect(m.rect):
                        blood_spots.append((devs.rect.x, devs.rect.y))
                        devs.kill()
                        m.kill()
                        score += 10
            if p.rect.colliderect(m.rect):
                if m.target == "player":
                    p.get_hit()
                    score = sub_score(5)
                    hitx.append(p.rect.x)
                    hity.append(p.rect.y)
                    m.kill()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        screen.blit(p.image, (p.rect.x, p.rect.y))
        pressed = pygame.key.get_pressed()

        if pressed[pygame.K_LEFT] and not pressed[pygame.K_UP] and not pressed[
                pygame.K_DOWN]:
            p.move('a')
            p.image = player_left_pic
            p.dir = 'a'

        if pressed[pygame.K_UP]:
            if pressed[pygame.K_LEFT]:
                p.move('wa')
                p.image = player_upleft_pic
                p.dir = 'wa'
            elif pressed[pygame.K_RIGHT]:
                p.move('wd')
                p.image = player_upright_pic
                p.dir = 'wd'
            else:
                p.move('w')
                p.image = player_up_pic
                p.dir = 'w'

        if pressed[pygame.K_DOWN]:
            if pressed[pygame.K_a]:
                p.move('sa')
                p.image = player_downleft_pic
                p.dir = 'sa'
            elif pressed[pygame.K_RIGHT]:
                p.move('sd')
                p.image = player_downright_pic
                p.dir = 'sd'
            else:
                p.move('s')
                p.image = player_down_pic
                p.dir = 's'

        if pressed[pygame.K_RIGHT] and not pressed[
                pygame.K_UP] and not pressed[pygame.K_DOWN]:
            p.move('d')
            p.image = player_right_pic
            p.dir = 'd'

        if pressed[pygame.K_SPACE]:
            if pygame.time.get_ticks() - last_shot >= 400:
                last_shot = pygame.time.get_ticks()
                shot_clock.tick()
                m = missile.Missile(p, 'player')
                missiles.add(m)

        if p.get_health() > 0:
            p.draw_health(screen)
        else:
            p.set_health(0)
            p.draw_health(screen)
            pygame.display.flip()
            alive = False
            kill_all()
            check_score(score)
            show_hits(hitx, hity)
            start_screen()
            print('Game Over')

        if len(zombies) + len(devils) == 0:
            level_clear_message(level, 170, 50)
            try:
                if pygame.time.get_ticks() - temp_clock[level] >= 5000:
                    blood_spots.clear()
                    missiles.empty()
                    create_devils(level * 2)
                    create_zombies(level * 2)
                    level += 1
                    if p.get_health() + 10 < 100:
                        p.set_health(p.get_health() + 10)
                    else:
                        p.set_health(100)
                        spawn_medkit()

            except IndexError:
                temp_clock.append(pygame.time.get_ticks())

        level_clear_message(str(score), 20, 450)
        pygame.display.flip()
        clock.tick(60)