#开发时间: 2021/7/24 14:43
import pygame
import sys
import traceback
from random import choice
from pygame.locals import *
from sprites import *
pygame.init()
bg_size = width,height=480,700
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption('飞机大战')
back_ground = pygame.image.load('images/background.png').convert()
BLACK = (0,0,0)
RED = (255,0,0)
GREEN = (0,255,0)
WHITE = (255,255,255)
#载入游戏音乐
pygame.mixer.music.load('sound/game_music.ogg')
pygame.mixer.music.set_volume(0.2)
bullet_sound = pygame.mixer.Sound('sound/bullet.wav')
bullet_sound.set_volume(0.2)
bomb_sound = pygame.mixer.Sound('sound/use_bomb.wav')
bomb_sound.set_volume(0.2)
supply_sound = pygame.mixer.Sound('sound/supply.wav')
supply_sound.set_volume(0.2)
get_bomb_sound = pygame.mixer.Sound('sound/get_bomb.wav')
get_bomb_sound.set_volume(0.2)
get_bullet_sound = pygame.mixer.Sound('sound/get_bullet.wav')
get_bullet_sound.set_volume(0.2)
upgrade_sound = pygame.mixer.Sound('sound/upgrade.wav')
upgrade_sound.set_volume(0.2)
enemy3_flying_sound = pygame.mixer.Sound('sound/enemy3_flying.wav')
enemy3_flying_sound.set_volume(0.3)
enemy1_down_sound = pygame.mixer.Sound('sound/enemy1_down.wav')
enemy1_down_sound.set_volume(0.2)
enemy2_down_sound = pygame.mixer.Sound('sound/enemy2_down.wav')
enemy2_down_sound.set_volume(0.2)
enemy3_down_sound = pygame.mixer.Sound('sound/enemy3_down.wav')
enemy3_down_sound.set_volume(0.2)
me_down_sound = pygame.mixer.Sound('sound/me_down.wav')
me_down_sound.set_volume(0.2)
def add_small_enemies(group1,group2,num):
for i in range(num):
e1 = SmallEnemy(bg_size)
group1.add(e1)
group2.add(e1)
def add_mid_enemies(group1,group2,num):
for i in range(num):
e2 = MidEnemy(bg_size)
group1.add(e2)
group2.add(e2)
def add_big_enemies(group1,group2,num):
for i in range(num):
e3 = BigEnemy(bg_size)
group1.add(e3)
group2.add(e3)
def inc_speed(target,inc):
for each in target:
each.speed += inc
def main():
#pygame.mixer.music.play(-1)
#生成敌我飞机
me = MyPlane(bg_size)
enemies = pygame.sprite.Group()
small_enemies = pygame.sprite.Group()
add_small_enemies(small_enemies, enemies, 15)
mid_enemies = pygame.sprite.Group()
add_mid_enemies(mid_enemies, enemies, 5)
big_enemies = pygame.sprite.Group()
add_big_enemies(big_enemies, enemies, 2)
#生成子弹
bullet1 = []
BULLET1_NUM = 4
for i in range(BULLET1_NUM):
bullet1.append(Bullet1(me.rect.midtop))
bullet2 = []
BULLET2_NUM = 12
for i in range(BULLET2_NUM//3):
bullet2.append(Bullet2(me.rect.midtop))
bullet2.append(Bullet2((me.rect.centerx - 33,me.rect.centery)))
bullet2.append(Bullet2((me.rect.centerx + 30, me.rect.centery)))
e1_destroy_index = 0
e2_destroy_index = 0
e3_destroy_index = 0
me_destroy_index = 0
bullet1_index = 0
bullet2_index = 0
level = 1
score = 0
score_font = pygame.font.Font('font/font.ttf',36)
bomb_image = pygame.image.load('images/bomb.png').convert_alpha()
bomb_rect = bomb_image.get_rect()
bomb_font = pygame.font.Font('font/font.ttf',36)
bomb_num = 3
#绘制暂停按键
paused = False
pause_nor_image = pygame.image.load('images/pause_nor.png').convert_alpha()
pause_pressed_image = pygame.image.load('images/pause_pressed.png').convert_alpha()
resume_nor_image = pygame.image.load('images/resume_nor.png').convert_alpha()
resume_pressed_image = pygame.image.load('images/resume_pressed.png').convert_alpha()
paused_rect = pause_nor_image.get_rect()
paused_rect.right,paused_rect.top = width-10,10
paused_image = pause_nor_image
clock = pygame.time.Clock()
#每30秒发放一个补给包
bullet_supply = BulletSupply(bg_size)
bomb_supply = BombSupply(bg_size)
SUPPLY_EVENT = USEREVENT
pygame.time.set_timer(SUPPLY_EVENT,10*1000)
SUPER_BULLET_EVENT = USEREVENT+1
is_super_bullet = False
INVINCIBLE_EVENT = USEREVENT+2
live_image = pygame.image.load('images/life.png').convert_alpha()
live_rect = live_image.get_rect()
live_num = 3
switch_image = True
delay = 100
running = True
recorded = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1 and paused_rect.collidepoint(event.pos):
paused = not paused
if paused:
pygame.time.set_timer(SUPPLY_EVENT,0)
pygame.mixer.music.pause()
pygame.mixer.pause()
else:
pygame.time.set_timer(SUPPLY_EVENT, 10*1000)
pygame.mixer.music.unpause()
pygame.mixer.unpause()
elif event.type == MOUSEMOTION:
if paused_rect.collidepoint(event.pos):
if paused:
paused_image = resume_pressed_image
else: