示例#1
0
文件: main.py 项目: guluc3m/ShootGame
def on_update(time):
    global countdown

    if countdown > 0:

        player1.update()
        player2.update()

        #countdown -= time/1000

        if player1.bang:
            bullets.add(Bullet(player1.bang[0], player1.bang[1]))
            player1.bang = None

        if player2.bang:
            bullets.add(Bullet(player2.bang[0], player2.bang[1]))
            player2.bang = None

        bullets.update(player1, player2)
        balasPerdidas = []
        for bullet in bullets:
            if bullet.y < 0 or bullet.y > 850:
                balasPerdidas.append(bullet)
        for bullet in balasPerdidas:
            bullets.remove(bullet)

    #The game ends when the timmer count to 0 or some player's life goes to 0
    if countdown <= 0 or len(player1.heart) == 0 or len(player2.heart) == 0:
        tim.sleep(5)
        sys.exit(0)
示例#2
0
    def shoot(self):
        bulletL = Bullet(self.bullet[0], [self.rect.left, self.rect.top])
        bulletR = Bullet(self.bullet[0], [self.rect.right, self.rect.top])
        self.bullets.add(bulletL)
        self.bullets.add(bulletR)

        # TODO wing ball bullet---------------------------------
        if self.power == 200:
            pass
        elif self.power >= 150:
            pass
        elif self.power >= 100:
            pass
        elif self.power >= 50:
            pass
示例#3
0
    def shoot(self):
        index = self.game.bulletsIndex

        now = time()
        if now - self.shootTime < SHOOTDELAY:
            return

        self.shootTime = now

        self.game.bulletsIndex += 1
        if self.game.bulletsIndex > 65535:
            self.game.bulletsIndex = 0

        pos = self.game.getNextPos(self.position, self.facing)

        for playerKey in self.game.players:
            if self.game.players[
                    playerKey].position == pos and self.floor == self.game.players[
                        playerKey].floor:
                self.game.kill(playerKey, self.playerId)
                return

        if self.game.mapDimensions[0] - 1 < pos[0] or pos[
                0] < 0 or self.game.mapDimensions[1] - 1 < pos[1] or pos[1] < 0:
            return
        elif not self.game.getTitle(pos,
                                    self.floor) in PLAYER_CAN_MOVE_THROUGH:
            return

        self.game.bullets[index] = Bullet(index, self.playerId, pos,
                                          self.floor, self.facing)
示例#4
0
    def fire_bullet(self):
        """
        Fire a bullet.
        """

        # Todo: Fix this; this might be causing a circular reference.
        if len(self.bullets) < self.bullet_limit:
            self.bullets.add(Bullet(self))
示例#5
0
文件: plane.py 项目: Toffc/BackHome
 def reset(self):
     # 初始化飞机(飞机挂了, 初始化到初始位置)
     self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (
         self.height - self.rect.height - 10)
     # 重置飞机的存活状态
     self.active = True
     #各项数值初始化
     self.speed = 10
     self.bullets = []
     for i in range(self.bullet_num):
         self.bullets.append(Bullet(self.rect.midtop))
示例#6
0
def check_event_keydown(ship, bulls, all_setting, screen, event):
    if (event.key == pygame.K_RIGHT):
        ship.move_right = True
    elif (event.key == pygame.K_LEFT):
        ship.move_left = True
    elif (event.key == pygame.K_DOWN):
        ship.move_down = True
    elif (event.key == pygame.K_UP):
        ship.move_up = True
    elif event.key == pygame.K_SPACE:
        new_bullet = Bullet(all_setting, screen, ship)
        bulls.add(new_bullet)
示例#7
0
def check_keydown_events(event, sett, screen, ship, bullets):
    """Keydown"""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_q:
        sys.exit()
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_DOWN:
        ship.moving_down = True
    elif event.key == pygame.K_UP:
        ship.moving_up = True

    elif event.key == pygame.K_SPACE:
        # Create a new bullet and add it to the bullets group.

        new_bullet = Bullet(sett, screen, ship)
        bullets.add(new_bullet)
    def update(self, keysdown: list):

        moveVecx = 0
        moveVecy = 0
        if keysdown[pygame.K_s]:
            moveVecy += self.speed
        if keysdown[pygame.K_w]:
            moveVecy += -self.speed
        if keysdown[pygame.K_a]:
            moveVecx += -self.speed
        if keysdown[pygame.K_d]:
            moveVecx += self.speed

        if abs(moveVecx) == abs(moveVecy) and moveVecx != 0:
            diag = math.sqrt(2)
            moveVecx = round(moveVecx / diag, 2)
            moveVecy = round(moveVecy / diag, 2)

        self.x += moveVecx
        self.y += moveVecy
        self.body.x, self.body.y = self.x, self.y

        self.cooldown -= 1

        if self.cooldown <= 0 and cursor.Lclick:
            self.cooldown = self.cooldownMax
            relx, rely = cursor.x - self.x, cursor.y - self.y
            angle = math.atan2(rely, relx)
            direction = {
                "angle": angle,
                "chx": math.cos(angle),
                "chy": math.sin(angle)
            }
            self.bulletList.append(
                Bullet(self.bulletHealth, direction, self.pos, (150, 2, 180),
                       300))

        self.hp.update()
示例#9
0
文件: plane.py 项目: Toffc/BackHome
 def __init__(self, bg_size, screen):
     super(OurPlane, self).__init__()
     # 确定我方飞机背景图(有俩张,可以让它们不停的切换,形成动态效果)
     self.image_one = pygame.image.load(
         os.path.join(BASE_DIR, "material/image/hero1.png"))
     self.image_two = pygame.image.load(
         os.path.join(BASE_DIR, "material/image/hero2.png"))
     # 获取我方飞机的位置
     self.rect = self.image_one.get_rect()
     # 本地化背景图片的尺寸
     self.width, self.height = bg_size[0], bg_size[1]
     # 获取飞机图像的掩膜用以更加精确的碰撞检测
     self.mask = pygame.mask.from_surface(self.image_one)
     # 定义飞机初始化位置,底部预留60像素
     self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (
         self.height - self.rect.height - 10)
     # 设置飞机移动速度
     self.speed = 10
     # 设置飞机存活状态(True为存活, False为死亡)
     self.active = True
     #设置飞机生命值
     self.life = 3
     # 加载飞机损毁图片
     self.destroy_images = []
     self.destroy_images.extend([
         pygame.image.load(
             os.path.join(BASE_DIR, "material/image/hero_blowup_n1.png"))
     ])
     self.bullets = []
     self.time = randint(0, 30)
     self.screen = screen
     self.bullet1 = []
     self.bullet_index = 0
     self.bullet_num = 5
     for i in range(self.bullet_num):
         self.bullets.append(Bullet(self.rect.midtop))
示例#10
0
def add_bullet(our_plane, bullets_group, num):
    for i in range(num):
        bullet = Bullet(our_plane.rect.midtop)
        bullets_group.append(bullet)
def fire_bullet(ai_settings, screen, rocket_ship, bullets):
    """Fire a bullet if limit not reached yet."""
    # Create a new bullet and add it to the bullets group.
    if len(bullets) < ai_settings.bullets_allowed:
        new_bullet = Bullet(ai_settings, screen, rocket_ship)
        bullets.add(new_bullet)
示例#12
0
def main():
    me_destroy_index = 0
    bullets = []
    pygame.mixer.music.play(loops=-1)  # loops = -1,音乐无限循环(默认循环播放一次)
    running = True
    delay = 60  # 对一些效果进行延迟,效果更好一些
    plane = Plane(bg_size)
    switch_image = False

    enemies = pygame.sprite.Group()  # 生成敌方飞机组(一种精灵组用以存储所有敌机精灵)
    small_enemies = pygame.sprite.Group()  # 敌方小型飞机组(不同型号敌机创建不同的精灵组来存储)

    add_small_enemies(small_enemies, enemies, 4)  # 生成若干敌方小型飞机

    # 定义子弹, 各种敌机和我方敌机的毁坏图像索引
    bullet_index = 0
    e1_destroy_index = 0
    plane_destroy_index = 0

    # 定义子弹实例化个数
    bullet1 = []
    bullet_num = 6
    for i in range(bullet_num):
        bullet1.append(Bullet(plane.rect.midtop))

    while running:
        # 绘制背景图
        screen.blit(backgroud, (0, 0))

        # 飞机是喷气式的, 那么这个就涉及到一个帧数的问题
        clock = pygame.time.Clock()
        clock.tick(60)

        # 绘制我方飞机的两种不同状态,喷气时与不喷气时
        if not delay % 3:
            switch_image = not switch_image

        for each in small_enemies:
            if each.active:
                each.move()
                screen.blit(each.image, each.rect)

                pygame.draw.line(screen, color_black,
                                 (each.rect.left, each.rect.top - 5),
                                 (each.rect.right, each.rect.top - 5), 2)

                energy_remain = each.energy / SmallEnemy.energy
                # 如果血量大约百分之二十则为绿色,否则为红色
                if energy_remain > 0.2:
                    energy_color = color_green
                else:
                    energy_color = color_red

                pygame.draw.line(
                    screen, energy_color, (each.rect.left, each.rect.top - 5),
                    (each.rect.left + each.rect.width * energy_remain,
                     each.rect.top - 5), 2)

                # 随机循环输出敌方小飞机
                for e in small_enemies:
                    e.move()
                    screen.blit(e.image, e.rect)
            else:
                while e1_destroy_index == 0:
                    e1_destroy_index_second = 0
                    screen.blit(each.destroy_images[e1_destroy_index_second],
                                each.rect)
                    e1_destroy_index = (e1_destroy_index_second + 1) % 4
                    e1_destroy_index_second += 1
                enemy1_die_sound.play()
                each.reset()

        # 飞机存活状态
        if plane.active:
            if switch_image:
                screen.blit(plane.image_one, plane.rect)
            else:
                screen.blit(plane.image_two, plane.rect)

            # 飞机存活状态下才能发射子弹,且没10帧发射一颗移动的子弹
            if not (delay % 10):
                bullet_sound.play()
                bullets = bullet1
                bullets[bullet_index].reset(plane.rect.midtop)
                bullet_index = (bullet_index + 1) % bullet_num

            for b in bullets:
                # 只有激活的子弹才能击中敌机
                if b.active:
                    b.move()
                    screen.blit(b.image, b.rect)
                    enemies_hit = pygame.sprite.spritecollide(
                        b, enemies, False, pygame.sprite.collide_mask)
                    # 如果子弹击中敌机
                    if enemies_hit:
                        b.active = False  # 子弹损毁
                        for e in enemies_hit:
                            e.active = False  # 小型飞机被毁

        # 毁坏状态绘制爆炸的场面
        else:
            if not (delay % 3):
                while me_destroy_index == 0:
                    screen.blit(plane.destroy_images[plane_destroy_index],
                                plane.rect)
                    # 四张图片切换实现动画效果
                    me_destroy_index = (plane_destroy_index + 1) % 4
                    plane_destroy_index += 1
                # 爆炸声音效果
                me_die_sound.play()
                plane.reset()

        # 调用 pygame 实现的碰撞方法 spritecollide (我方飞机如果和敌机碰撞, 更改飞机的存活属性)
        enemies_down = pygame.sprite.spritecollide(plane, enemies, False,
                                                   pygame.sprite.collide_mask)
        if enemies_down:
            plane.active = False
            for enemy in enemies:
                enemy.active = False

        # 响应用户的操作
        for event in pygame.event.get():
            # 如果按下屏幕上的关闭按钮,触发quit事件,游戏退出
            if event.type == 12:
                pygame.quit()
                sys.exit()

        if delay == 0:
            delay = 60
        delay -= 1

        # 获取用户输入的所有键盘序列,如向上
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            plane.move_up()
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            plane.move_down()
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            plane.move_left()
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            plane.move_right()

        # 再而我们将背景图像输出到屏幕上
        pygame.display.flip()
示例#13
0
def main():
    """
    Main entry of this game
    :return:
    """
    # -1, infinite loop
    pygame.mixer.music.play(-1)
    running = True
    switch_image = False
    delay = 60

    enemies = pygame.sprite.Group()
    small_enemies = pygame.sprite.Group()
    add_small_enemies(small_enemies, enemies, 6)

    # define bullets
    bullet_index = 0
    e1_destroy_index = 0
    me_destroy_index = 0

    # define the number of bullets instances
    bullet1 = []
    bullet_num = 6
    for i in range(bullet_num):
        bullet1.append(
            Bullet(
                our_plane.rect.midtop
            )
        )

    while running:
        # draw a backgournd picture
        screen.blit(background, (0, 0))

        clock = pygame.time.Clock()
        clock.tick(60)

        if not delay % 3:
            switch_image = not switch_image

        # When the enemies are alive
        for each in small_enemies:
            if each.active:
                each.move()
                screen.blit(each.image, each.rect)

                pygame.draw.line(
                    screen,
                    color_black, (
                        each.rect.left,
                        each.rect.top - 5,
                    ), (
                        each.rect.right,
                        each.rect.top - 5
                    ), 2
                )
                energy_remain = each.energy / SmallEnemy.energy
                # Color ot Blood Slot
                if energy_remain > 0.2:
                    energy_color = color_green
                else:
                    energy_color = color_red
                pygame.draw.line(
                    screen,
                    energy_color, (
                        each.rect.left,
                        each.rect.top - 5
                    ), (
                        each.rect.left + each.rect.width * energy_remain,
                        each.rect.top - 5
                    ), 2
                )
            else:  # not active
                if e1_destroy_index == 0:
                    enemy1_down_sound.play()
                    screen.blit(
                        each.destroy_images[e1_destroy_index],
                        each.rect
                    )
                e1_destroy_index = (e1_destroy_index + 1) % 4

                if e1_destroy_index == 0:
                    each.reset()

        # When we are alive, display as normal
        if our_plane.active:
            if switch_image:
                screen.blit(
                    our_plane.image_one,
                    our_plane.rect
                )
            else:
                screen.blit(
                    our_plane.image_two,
                    our_plane.rect
                )

            # When alive, ready for shooting
            if not (delay % 10):
                bullet_sound.play()
                bullets = bullet1
                bullets[bullet_index].reset(our_plane.rect.midtop)
                bullet_index = (bullet_index + 1) % bullet_num

            for b in bullets:
                if b.active:  # when a bullet is activated
                    b.move()  # flying
                    screen.blit(b.image, b.rect)
                    enemies_hit = pygame.sprite.spritecollide(
                        b,
                        enemies,
                        False,
                        pygame.sprite.collide_mask
                    )

                    if enemies_hit:  # if the bullet hits a plane
                        # the bullet's mission is completed
                        b.active = False
                        for e in enemies_hit:
                            # at the same time, the plane is over
                            e.active = False

        # when our plane is destroy, a explosion happens
        else:
            if not (delay % 3):
                screen.blit(
                    our_plane.destroy_images[me_destroy_index],
                    our_plane.rect
                )
                me_destroy_index = (me_destroy_index + 1) % 4
            if me_destroy_index == 0:
                me_down_sound.play()
                our_plane.reset()

        # When our plane collides with the enermy in the air,
        # it's over
        enemies_down = pygame.sprite.spritecollide(
            our_plane,
            enemies,
            False,
            pygame.sprite.collide_mask
        )

        for event in pygame.event.get():
            if event.type == 12:
                pygame.quit()
                sys.exit()

        if delay == 0:
            delay = 60
        delay -= 1

        # trigger from keyboard
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            our_plane.move_up()
        elif key_pressed[K_s] or key_pressed[K_DOWN]:
            our_plane.move_down()
        elif key_pressed[K_a] or key_pressed[K_LEFT]:
            our_plane.move_left()
        elif key_pressed[K_d] or key_pressed[K_RIGHT]:
            our_plane.move_right()

        # draw the new image and display it
        pygame.display.flip()
示例#14
0
def fire_bullet(ai_settings, screen, ship, bullets):
    """如果还没有到达限制,就发射一颗子弹"""
    # 创建一颗子弹,并将其加入到编组bullets中
    if len(bullets) < ai_settings.bullets_allowed:  # 检查子弹数量
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)
示例#15
0
def add_shot(group1, num):
    for i in range(num):
        bul = Bullet(ourplane.rect)
        group1.add(bul)
示例#16
0
def fire_bullets(bullets, ai_settings, screen, ship):
    if len(bullets) >= ai_settings.bullet_allowed:
        print('bullet is over 3.')
    else:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)
示例#17
0
    # 6. 更新所有角色
    all_sprites.update()

    # 获得用户所有的键盘输入序列(如果用户通过键盘发出“向上”的指令,其他类似)
    key_pressed = pygame.key.get_pressed()
    if key_pressed[K_w] or key_pressed[K_UP]:
        plane.move_up()
    if key_pressed[K_s] or key_pressed[K_DOWN]:
        plane.move_down()
    if key_pressed[K_a] or key_pressed[K_LEFT]:
        plane.move_left()
    if key_pressed[K_d] or key_pressed[K_RIGHT]:
        plane.move_right()
    if key_pressed[K_SPACE]:
        bullet = Bullet.new_bullet((plane.rect.x, plane.rect.y))
        if bullet:
            bullet_sprites.add(bullet)
            all_sprites.add(bullet)

    # 子弹击毁敌舰
    for enemy in enemy_sprites:
        if enemy.is_survive():
            enemy.strike(bullet_sprites)
            if not enemy.is_survive():
                score += 1
                print(enemy, score)

    # 增加敌舰
    if len(enemy_sprites) <= ENEMY_MIN_SIZE:
        init_enemy(ENEMY_SIZE - len(enemy_sprites))
示例#18
0
 def fire(self, bt_game):
     return Bullet(bt_game, self)
示例#19
0
def fire_bullet(sett, screen, ship, bullets):
    """Fire a bullet, if limit not reached yet."""
    # Create a new bullet, add to bullets group.
    if len(bullets) < sett.bullets_allowed:
        new_bullet = Bullet(sett, screen, ship)
        bullets.add(new_bullet)
def fire_bullet(ai_settings, screen, ship, sounds, bullets):
    """Creates a new bullet and fires it"""
    if len(bullets) < ai_settings.bullets_allowed:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)
        sounds.play_shooting_sound()
示例#21
0
def fire_bullet(settings, screen, ship, bullets):
    if len(bullets) < settings.bullet_allow:
        new_bullet = Bullet(settings, screen, ship)
        bullets.add(new_bullet)
示例#22
0
 def fire(self, manager: Manager):
     bullet_pos = Vector2(self.rect.midtop) + Vector2(20,
                                                      0).rotate(-self.angle)
     bullet = Bullet(bullet_pos, self.angle, 100)
     manager.scene.add(bullet)
示例#23
0
def main():
    y = 0
    running = True
    switch_image = False
    delay = 60
    font = pygame.font.SysFont("", 30)
    enemis = pygame.sprite.Group()
    smallenemies = pygame.sprite.Group()
    add_SmallEnemy(enemis, smallenemies, 6)

    bulls = pygame.sprite.Group()
    bossbulls = pygame.sprite.Group()

    while running:
        screen.blit(bgp, (0, y - 700))
        screen.blit(bgp, (0, y))
        delay -= 1
        text_surface = font.render("score:" + str(score), True, (0, 0, 0))
        screen.blit(text_surface, (385, 5))
        if delay == 0:
            delay = 60
        if delay % 3:
            switch_image = not switch_image

        #我方
        if ourplane.active:
            if switch_image:
                screen.blit(ourplane.image_one, ourplane.rect)
            else:
                screen.blit(ourplane.image_two, ourplane.rect)
        else:
            screen.blit(ourplane.destroy_images[delay % 4], ourplane.rect)
            ourplane.reset()

        clock = pygame.time.Clock()
        clock.tick(30)
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:
            ourplane.move_UP()
        if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
            ourplane.move_left()
        if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
            ourplane.move_right()
        if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:
            ourplane.move_down()

        y += 10
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    #global running
                    running = False
                    while True:
                        #screen.blit(pause,(100,100))
                        for event in pygame.event.get():
                            if event.type == pygame.QUIT:
                                sys.exit()
                            if event.type == pygame.KEYDOWN:
                                if event.key == pygame.K_SPACE:
                                    running = True
                                    break
                                    #print(running)
                        if running:
                            break
                        screen.blit(pause, (240, 420))
                        pygame.display.update()
                        #print(running)
                        #break
                    # pygame.display.update()

        if y == 700:
            y = 0

        #子弹
        if delay % 5 == 0:
            # bul = Bullet(ourplane.rect)
            # bul.update()
            # screen.blit(bul.image,bul.rect)
            bul = Bullet(ourplane.rect)
            bulls.add(bul)
        bulls.update()
        bulls.draw(screen)

        #敌机
        if score < 100:
            if delay % 30 == 0:
                enemy = SmallEnemy(bg_size)
                enemis.add(enemy)
            if delay % 60 == 0:
                enemy = MidEnemy(bg_size)
                enemis.add(enemy)
        enemis.update()
        enemis.draw(screen)

        if score >= 100:
            if delay % 10 == 0:
                bul = BossBullet(boss.rect)
                bossbulls.add(bul)
            bossbulls.update()
            bossbulls.draw(screen)

            energy_remain = boss.energy / Boss.energy
            if energy_remain > 0.2:
                energy_color = color_green
            else:
                energy_color = color_red
            pygame.draw.line(screen, color_black,
                             (boss.rect.left, boss.rect.bottom + 5),
                             (boss.rect.right, boss.rect.bottom + 5), 5)
            pygame.draw.line(
                screen, energy_color, (boss.rect.left, boss.rect.bottom + 5),
                (boss.rect.left +
                 (boss.rect.right - boss.rect.left) * energy_remain,
                 boss.rect.bottom + 5), 5)
            boss.update()
            screen.blit(boss.image, boss.rect)
        #画血条
        for each in enemis:
            energy_remain = each.energy / each.energy_in
            if energy_remain > 0.2:
                energy_color = color_green
            else:
                energy_color = color_red
            pygame.draw.line(screen, color_black,
                             (each.rect.left, each.rect.top - 5),
                             (each.rect.right, each.rect.top - 5), 5)
            pygame.draw.line(
                screen, energy_color, (each.rect.left, each.rect.top - 5),
                (each.rect.left +
                 (each.rect.right - each.rect.left) * energy_remain,
                 each.rect.top - 5), 5)

        collide_list = pygame.sprite.groupcollide(enemis, bulls, False, True,
                                                  pygame.sprite.collide_mask)
        for enemy in collide_list:
            enemy.energy -= 1
            global score
            score += 1
            if enemy.energy <= 0:
                for i in range(4):
                    screen.blit(enemy.destroy_images[i], enemy.rect)
                enemis.remove(enemy)
        if pygame.sprite.spritecollide(ourplane, enemis, True,
                                       pygame.sprite.collide_mask):
            ourplane.energy -= 1
        if pygame.sprite.spritecollide(ourplane, bossbulls, True,
                                       pygame.sprite.collide_mask):
            ourplane.energy -= 1
        if pygame.sprite.spritecollide(boss, bulls, True,
                                       pygame.sprite.collide_mask):
            boss.energy -= 1
            if boss.energy <= 0:
                running = False
                endgame(score)
        energy_remain = ourplane.energy / OurPlane.energy
        if energy_remain > 0.2:
            energy_color = color_green
        else:
            energy_color = color_red
        pygame.draw.line(screen, color_black,
                         (ourplane.rect.left, ourplane.rect.top - 5),
                         (ourplane.rect.right, ourplane.rect.top - 5), 5)
        pygame.draw.line(
            screen, energy_color, (ourplane.rect.left, ourplane.rect.top - 5),
            (ourplane.rect.left +
             (ourplane.rect.right - ourplane.rect.left) * energy_remain,
             ourplane.rect.top - 5), 5)

        pygame.display.update()
示例#24
0
def main():
    # 响应音乐
    pygame.mixer.music.play(-1)  # loops 接收该参数, -1 表示无限循环(默认循环播放一次)
    running = True
    switch_image = False  # 切换飞机的标识位(使飞机具有喷气式效果)
    delay = 60  # 对一些效果进行延迟, 效果更好一些

    enemies = pygame.sprite.Group()  # 生成敌方飞机组(一种精灵组用以存储所有敌机精灵)
    small_enemies = pygame.sprite.Group()  # 敌方小型飞机组(不同型号敌机创建不同的精灵组来存储)

    add_small_enemies(small_enemies, enemies, 6)  # 生成若干敌方小型飞机

    # 定义子弹, 各种敌机和我方敌机的毁坏图像索引
    bullet_index = 0
    e1_destroy_index = 0
    me_destroy_index = 0

    # 定义子弹实例化个数
    bullet1 = []
    bullet_num = 6
    for i in range(bullet_num):
        bullet1.append(Bullet(our_plane.rect.midtop))

    while running:

        # 绘制背景图
        screen.blit(background, (0, 0))

        # 微信的飞机貌似是喷气式的, 那么这个就涉及到一个帧数的问题
        clock = pygame.time.Clock()
        clock.tick(60)

        # 绘制我方飞机的两种不同的形式
        if not delay % 3:
            switch_image = not switch_image

        for each in small_enemies:
            if each.active:
                # 随机循环输出小飞机敌机
                each.move()
                screen.blit(each.image, each.rect)

                pygame.draw.line(screen, color_black,
                                 (each.rect.left, each.rect.top - 5),
                                 (each.rect.right, each.rect.top - 5), 2)
                energy_remain = each.energy / SmallEnemy.energy
                if energy_remain > 0.2:  # 如果血量大约百分之二十则为绿色,否则为红色
                    energy_color = color_green
                else:
                    energy_color = color_red
                pygame.draw.line(
                    screen, energy_color, (each.rect.left, each.rect.top - 5),
                    (each.rect.left + each.rect.width * energy_remain,
                     each.rect.top - 5), 2)
            else:
                if e1_destroy_index == 0:
                    enemy1_down_sound.play()
                screen.blit(each.destroy_images[e1_destroy_index], each.rect)
                e1_destroy_index = (e1_destroy_index + 1) % 4
                if e1_destroy_index == 0:
                    each.reset()

        # 当我方飞机存活状态, 正常展示
        if our_plane.active:
            if switch_image:
                screen.blit(our_plane.image_one, our_plane.rect)
            else:
                screen.blit(our_plane.image_two, our_plane.rect)

            # 飞机存活的状态下才可以发射子弹
            if not (delay % 10):  # 每十帧发射一颗移动的子弹
                bullet_sound.play()
                bullets = bullet1
                bullets[bullet_index].reset(our_plane.rect.midtop)
                bullet_index = (bullet_index + 1) % bullet_num

            for b in bullets:
                if b.active:  # 只有激活的子弹才可能击中敌机
                    b.move()
                    screen.blit(b.image, b.rect)
                    enemies_hit = pygame.sprite.spritecollide(
                        b, enemies, False, pygame.sprite.collide_mask)
                    if enemies_hit:  # 如果子弹击中飞机
                        b.active = False  # 子弹损毁
                        for e in enemies_hit:
                            e.active = False  # 小型敌机损毁

        # 毁坏状态绘制爆炸的场面
        else:
            if not (delay % 3):
                screen.blit(our_plane.destroy_images[me_destroy_index],
                            our_plane.rect)
                me_destroy_index = (me_destroy_index + 1) % 4
                if me_destroy_index == 0:
                    me_down_sound.play()
                    our_plane.reset()

        # 调用 pygame 实现的碰撞方法 spritecollide (我方飞机如果和敌机碰撞, 更改飞机的存活属性)
        enemies_down = pygame.sprite.spritecollide(our_plane, enemies, False,
                                                   pygame.sprite.collide_mask)
        if enemies_down:
            our_plane.active = False
            for row in enemies:
                row.active = False

        # 响应用户的操作
        for event in pygame.event.get():
            if event.type == 12:  # 如果用户按下屏幕上的关闭按钮,触发QUIT事件,程序退出
                pygame.quit()
                sys.exit()

        if delay == 0:
            delay = 60
        delay -= 1

        # 获得用户所有的键盘输入序列(如果用户通过键盘发出“向上”的指令,其他类似)
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            our_plane.move_up()
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            our_plane.move_down()
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            our_plane.move_left()
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            our_plane.move_right()

        # 绘制图像并输出到屏幕上面
        pygame.display.flip()
示例#25
0
def main():
    pygame.mixer.music.play(-1)
    running = True
    is_pause = False
    switch_image = False
    delay = 60
    score = 0
    font = pygame.font.SysFont("arial", 16)

    enemies = pygame.sprite.Group()
    add_enemies(SmallEnemy(bg_size), enemies, 6)
    add_enemies(MidEnemy(bg_size), enemies, 3)
    add_enemies(BigEnemy(bg_size), enemies, 1)
    start_time = datetime.datetime.now()

    bullets1 = []
    bullet_num = 10
    for i in range(bullet_num):
        bullets1.append(Bullet(hero.rect.midtop))

    bullet_index = 0
    me_destory_index = 0  # 英雄机爆炸图片下标
    e1_destory_index = 0  # 中小型飞机爆炸图片下标
    e2_destory_index = 0  # 大型飞机爆炸图片下标

    while running:
        # 画背景
        screen.blit(background, (0, 0))
        score_surface = font.render(str("SCORE:%d" % score), True, (0, 0, 0))
        screen.blit(score_surface, (1, 1))
        clock = pygame.time.Clock()
        clock.tick(60)

        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == pygame.K_SPACE:
                    is_pause = not is_pause
            if event.type == QUIT:
                print("exit")
                pygame.quit()
                sys.exit()

        if is_pause:
            continue

        if not (delay % 3):
            switch_image = not switch_image
        # 画英雄机
        if hero.active:
            key_pressed = pygame.key.get_pressed()
            if key_pressed[K_UP]:
                hero.move_up()
            if key_pressed[K_DOWN]:
                hero.move_down()
            if key_pressed[K_LEFT]:
                hero.move_left()
            if key_pressed[K_RIGHT]:
                hero.move_right()
            if switch_image:
                screen.blit(hero.image_one, hero.rect)
            else:
                screen.blit(hero.image_two, hero.rect)

            # 发射子弹
            if not (delay % 10):
                bullets = bullets1
                bullets[bullet_index].shoot(hero.rect.midtop)
                bullet_sound.play()
                bullet_index = (bullet_index + 1) % bullet_num

            for b in bullets:
                if b.active:
                    b.move()
                    screen.blit(b.image, b.rect)
                    enemies_hit = pygame.sprite.spritecollide(b, enemies, False, pygame.sprite.collide_mask)
                    if enemies_hit:
                        b.active = False
                        for e in enemies_hit:
                            if e.blood <= 0:
                                e.active = False
                                score += e.score
                                if isinstance(e, SmallEnemy):
                                    enemy1_down_sound.play()
                                elif isinstance(e, MidEnemy):
                                    enemy2_down_sound.play()
                                else:
                                    enemy3_down_sound.play()
                            else:
                                e.blood -= 1

            # 英雄机被撞
            hero_hit = pygame.sprite.spritecollide(hero, enemies, False, pygame.sprite.collide_mask)
            if hero_hit:
                hero.active = False
        else:
            screen.blit(hero.destory_images[me_destory_index], hero.rect)
            me_destory_index = (me_destory_index + 1) % 4
            if me_destory_index == 3:
                screen.blit(game_over_img, (0, 0))
                font = pygame.font.SysFont("arial", 35)
                score_surface = font.render(str("%d" % score), True, (0, 0, 255))
                screen.blit(score_surface, (bg_size[0] / 2, bg_size[1] / 2))
                is_pause = True

        # 画敌人
        now = datetime.datetime.now()
        if not (now - start_time).seconds % 10 and now.second != start_time.second:
            add_enemies(SmallEnemy(bg_size), enemies, 1)
            start_time = now
        for each in enemies:
            if each.active:
                if isinstance(each, BigEnemy):
                    each.move()
                    if switch_image:
                        screen.blit(each.image_one, each.rect)
                    else:
                        screen.blit(each.image_two, each.rect)
                else:
                    each.move()
                    screen.blit(each.image, each.rect)
            else:
                if isinstance(each, BigEnemy):
                    screen.blit(e.destory_images[e1_destory_index], e.rect)
                    e1_destory_index = (e1_destory_index + 1) % 6
                    if e1_destory_index == 0:
                        each.reset()
                else:
                    screen.blit(e.destory_images[e2_destory_index], e.rect)
                    e2_destory_index = (e2_destory_index + 1) % 4
                    if e1_destory_index == 0:
                        each.reset()
        pygame.display.flip()

        if delay == 0:
            delay = 60
        delay -= 1
示例#26
0
 def fire(self):
     return Bullet(self)
def fire_bullet(ai_settings, screen, ship, bullets):
    if len(bullets) < ai_settings.bullets_allowed:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)
示例#28
0
def main():
    note = read.read_xml("./material/xml/2.musicxml")
    #time.sleep(2)
    music = False
    running = True
    switch_image = False
    delay = 60
    enemies = pygame.sprite.Group()
    small_enemies = pygame.sprite.Group()
    bullet_index = 0
    e1_destroy_index = 0
    me_destroy_index = 0
    bullet1 = []
    bullet_num = 60
    bullet_start = True
    death = 0
    killed = 0
    for i in range(bullet_num):
        bullet1.append(Bullet(our_plane.rect.midtop))
    bullet_sound.play()
    bullets = bullet1
    bullets[bullet_index].reset(our_plane.rect.midtop)
    bullet_index = (bullet_index + 1) % bullet_num
    while running:  #50ms per loop
        if music == False:
            pygame.mixer.music.play()
            music = True
        t = pygame.time.get_ticks()
        speed = get_enemy(note, t, bg_size, small_enemies, enemies)
        key_pressed = pygame.key.get_pressed()
        screen.blit(background, (0, 0))
        clock = pygame.time.Clock()
        clock.tick(60)
        if not delay % 3:
            switch_image = not switch_image
        si = 0
        if len(speed) == 0:
            for i in range(len(small_enemies)):
                speed.append(random.randint(15, 30))
        for each in small_enemies:
            #print(len(small_enemies),len(speed),si)
            if each.active:
                if si >= len(speed):
                    each.move(speed[len(speed) - 1])
                else:
                    each.move(speed[si])
                screen.blit(each.image, each.rect)
                '''
                pygame.draw.line(screen, color_black,
                                 (each.rect.left, each.rect.top - 5),
                                 (each.rect.right, each.rect.top - 5),
                                 2)
                energy_remain = each.energy / SmallEnemy.energy
                if energy_remain > 0.2:
                    energy_color = color_green
                else:
                    energy_color = color_red
                pygame.draw.line(screen, energy_color,
                                 (each.rect.left, each.rect.top - 5),
                                 (each.rect.left + each.rect.width * energy_remain, each.rect.top - 5),
                                 2)
                '''
            else:
                if e1_destroy_index == 0:
                    enemy1_down_sound.play()
                screen.blit(each.destroy_images[e1_destroy_index], each.rect)
                e1_destroy_index = (e1_destroy_index + 1) % 4
                if e1_destroy_index == 0:
                    each.reset()
                    small_enemies.remove(each)
                    enemies.remove(each)
            si += 1
        if our_plane.active:
            if switch_image:
                screen.blit(our_plane.image_one, our_plane.rect)
            else:
                screen.blit(our_plane.image_two, our_plane.rect)
        else:
            if not (delay % 3):
                screen.blit(our_plane.destroy_images[me_destroy_index],
                            our_plane.rect)
                me_destroy_index = (me_destroy_index + 1) % 4
                if me_destroy_index == 0:
                    me_down_sound.play()
                    our_plane.reset()
                    death += 1
        if not (delay % 3):
            bullet_sound.play()
            bullets = bullet1
            bullets[bullet_index].reset(our_plane.rect.midtop)
            bullet_index = (bullet_index + 1) % bullet_num
            bullet_start = False
        for b in bullets:
            if b.active:
                b.move()
                screen.blit(b.image, b.rect)
                enemies_hit = pygame.sprite.spritecollide(
                    b, enemies, False, pygame.sprite.collide_mask)
                if enemies_hit:
                    b.active = False
                    for e in enemies_hit:
                        e.active = False
                    killed += 1
                    if killed == 5:
                        killed -= 5
                        death -= 1
        enemies_down = pygame.sprite.spritecollide(our_plane, enemies, True,
                                                   pygame.sprite.collide_mask)
        if enemies_down:
            our_plane.active = False
            for row in enemies:
                row.active = False
        for event in pygame.event.get():
            if event.type == 12:
                pygame.quit()
                sys.exit()
        if delay == 0:
            delay = 60
        delay -= 1
        if key_pressed[K_w] or key_pressed[K_UP]:
            our_plane.move_up()
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            our_plane.move_down()
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            our_plane.move_left()
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            our_plane.move_right()
        draw_death = pygame.font.SysFont("华文宋体", 50)
        if death >= 0:
            draw_death_fmt = draw_death.render(
                "Death count:" + str(death), 1,
                (225, 225, 225))  #Misaka #17032 get 3 death for best
        else:
            draw_death_fmt = draw_death.render(
                str(0 - death) + " Extra life!", 1, (225, 225, 225))
        screen.blit(draw_death_fmt, (10, 10))
        if t > 188000:
            pygame.quit()
            sys.exit()
        pygame.display.flip()
示例#29
0
 def fire(self):
     self.bullets.append(Bullet(self, self.pivot, self.turret.angle))
示例#30
0
def main():
    # initialize music with infinite loop
    pygame.mixer.music.play(-1)

    running = True
    switch_image = False
    delay = 60

    # initialize sprite group of enemy plane
    enemies = pygame.sprite.Group()
    small_enemies = pygame.sprite.Group()
    # generate 6 enemy plane at each time
    add_small_enemies(small_enemies, enemies, 6)

    bullet_index = 0
    e1_destroy_index = 0
    me_destroy_index = 0

    # initialize bullets
    bullet1 = []
    bullet_num = 6
    for i in range(bullet_num):
        bullet1.append(Bullet(our_plane.rect.midtop))

    while running:

        # draw backgroud
        screen.blit(background, (0, 0))

        # switch between two images
        clock = pygame.time.Clock()
        clock.tick(60)
        if not delay % 3:
            switch_image = not switch_image

        for each in small_enemies:
            # case where enemy plane is alive
            if each.active:
                each.move()
                screen.blit(each.image, each.rect)

                pygame.draw.line(screen, color_black,
                                 (each.rect.left, each.rect.top - 5),
                                 (each.rect.right, each.rect.top - 5), 2)
                energy_remain = each.energy / SmallEnemy.energy
                if energy_remain > 0.2:
                    energy_color = color_green
                else:
                    energy_color = color_red
                pygame.draw.line(
                    screen, energy_color, (each.rect.left, each.rect.top - 5),
                    (each.rect.left + each.rect.width * energy_remain,
                     each.rect.top - 5), 2)

            # case where enemy plane is hit by bullet
            else:
                if e1_destroy_index == 0:
                    enemy1_down_sound.play()
                screen.blit(each.destroy_images[e1_destroy_index], each.rect)
                e1_destroy_index = (e1_destroy_index + 1) % 4
                if e1_destroy_index == 0:
                    each.reset()

        # case our plane alive and keep making bullet
        if our_plane.active:
            if switch_image:
                screen.blit(our_plane.image_one, our_plane.rect)
            else:
                screen.blit(our_plane.image_two, our_plane.rect)

            # Fire bullet every 10 frames
            if not (delay % 10):
                bullet_sound.play()
                bullets = bullet1
                bullets[bullet_index].reset(our_plane.rect.midtop)
                bullet_index = (bullet_index + 1) % bullet_num

            for b in bullets:
                if b.active:
                    b.move()
                    screen.blit(b.image, b.rect)
                    # check if bullet hit enemy
                    enemies_hit = pygame.sprite.spritecollide(
                        b, enemies, False, pygame.sprite.collide_mask)

                    # if the bullet hit the enemy, both of the bullet and enemy plane disappear
                    if enemies_hit:
                        b.active = False
                        for e in enemies_hit:
                            e.active = False

        # case where enemy hits us
        else:
            if not (delay % 3):
                screen.blit(our_plane.destroy_images[me_destroy_index],
                            our_plane.rect)
                me_destroy_index = (me_destroy_index + 1) % 4
                if me_destroy_index == 0:
                    me_down_sound.play()
                    our_plane.reset()

        # updating the information if enemy hits us
        # plane.active and enemy.active will be False
        enemies_down = pygame.sprite.spritecollide(our_plane, enemies, False,
                                                   pygame.sprite.collide_mask)
        if enemies_down:
            our_plane.active = False
            for e in enemies:
                e.active = False

        # Quit game operation by press ESC
        for event in pygame.event.get():
            if event.type == 12:
                pygame.quit()
                sys.exit()

        if delay == 0:
            delay = 60
        delay -= 1

        # gain key pressed from user keyboard
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            our_plane.move_up()
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            our_plane.move_down()
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            our_plane.move_left()
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            our_plane.move_right()

        # Update the full display Surface to the screen
        pygame.display.flip()