太空射击
基本参数设置及初始化
#导入模块
import pygame
import random
from os import path
#获取图片库和声音库路径
img_dir = path.join(path.dirname(__file__), 'assets') #图片路径
sound_folder = path.join(path.dirname(__file__), 'sounds') #声音路径
#定义游戏窗口、玩家血量条尺寸,游戏运行速度、炮火持续时间等参数
WIDTH = 480 #定义游戏窗口大小
HEIGHT = 600
FPS = 60 #游戏运行速度
POWERUP_TIME = 5000 #炮火持续时间
BAR_LENGTH = 100 #血量条尺寸
BAR_HEIGHT = 10
# 定义白、黑、红、绿、蓝、黄的RGB参数
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
#初始化pygame模块,创建游戏窗口、游戏窗口命名、创建跟踪时间对象
pygame.init() #初始化将导入所有pygame的模块
pygame.mixer.init() ## 初始化混音器模块
screen = pygame.display.set_mode((WIDTH, HEIGHT)) #设置游戏窗口大小
pygame.display.set_caption("spaceShooter") #设置标题
clock = pygame.time.Clock() ## 创建时钟对象 用于FPS同步
#获取字体arial所在路径
font_name = pygame.font.match_font('arial')
加载图片
#加载游戏背景图片
background = pygame.image.load(path.join(img_dir, 'starfield.png')).convert()
background_rect = background.get_rect() #获取背景图片的矩形区域
#加载飞机图片
player_img = pygame.image.load(path.join(img_dir, 'playerShip1_orange.png')).convert() #飞机图片
player_mini_img = pygame.transform.scale(player_img, (25, 19))
player_mini_img.set_colorkey(BLACK)
#加载飞机炮弹、导弹图片
bullet_img = pygame.image.load(path.join(img_dir, 'laserRed16.png')).convert()
missile_img = pygame.image.load(path.join(img_dir, 'missile.png')).convert_alpha()
#加载敌人图片
meteor_images = []
meteor_list = [
'meteorBrown_big1.png',
'meteorBrown_big2.png',
'meteorBrown_med1.png',
'meteorBrown_med3.png',
'meteorBrown_small1.png',
'meteorBrown_small2.png',
'meteorBrown_tiny1.png'
]
for image in meteor_list:
meteor_images.append(pygame.image.load(path.join(img_dir, image)).convert())
#加载盾牌、闪电图片
powerup_images = {}
powerup_images['shield'] = pygame.image.load(path.join(img_dir, 'shield_gold.png')).convert()
powerup_images['gun'] = pygame.image.load(path.join(img_dir, 'bolt_gold.png')).convert()
# 加载爆炸效果图
explosion_anim = {}
explosion_anim['lg'] = []
explosion_anim['sm'] = []
explosion_anim['player'] = []
for i in range(9):
#敌人爆炸
filename = 'regularExplosion0{}.png'.format(i)
img = pygame.image.load(path.join(img_dir, filename)).convert()
img.set_colorkey(BLACK)
#大爆炸
img_lg = pygame.transform.scale(img, (75, 75)) #将爆炸图片缩放到75×75
explosion_anim['lg'].append(img_lg)
#小爆炸
img_sm = pygame.transform.scale(img, (32, 32)) #将爆炸图片缩放到32×32
explosion_anim['sm'].append(img_sm)
#玩家爆炸
filename = 'sonicExplosion0{}.png'.format(i)
img = pygame.image.load(path.join(img_dir, filename)).convert()
img.set_colorkey(BLACK)
explosion_anim['player'].append(img)
加载声音
#加载炮弹、导弹发射声音
shooting_sound = pygame.mixer.Sound(path.join(sound_folder, 'pew.wav'))
missile_sound = pygame.mixer.Sound(path.join(sound_folder, 'rocket.ogg'))
#加载敌人爆炸声音
expl_sounds = []
for sound in ['expl3.wav', 'expl6.wav']:
expl_sounds.append(pygame.mixer.Sound(path.join(sound_folder, sound)))
#加载玩家爆炸的声音
player_die_sound = pygame.mixer.Sound(path.join(sound_folder, 'rumble1.ogg'))
#调低音量
pygame.mixer.music.set_volume(0.2)
游戏开始界面函数
def main_menu():
global screen
menu_song = pygame.mixer.music.load(path.join(sound_folder, "menu.ogg")) #加载游戏初始界面背景音乐
pygame.mixer.music.play(-1