更改

射击游戏-ch4

删除2,579字节, 2023年2月7日 (二) 23:11
无编辑摘要
# 获取图片库和声音库路径
img_dir = path.join(path.dirname(__file__), 'assets') # 图片路径C:\Users\Administrator\PycharmProjects\pythonProject图片路径sound_folder = path.join(path.dirname(__file__), 'sounds') # 声音路径
# 定义游戏窗口、玩家血量条尺寸,游戏运行速度、炮火持续时间等参数
WIDTH = 480 # 定义游戏窗口大小
# 加载游戏背景图片
background = pygame.image.load(path.join(img_dir, 'beijinstarfield.png')).convert()
background_rect = background.get_rect() # 获取背景图片的矩形区域
# 加载飞机图片
player_img = pygame.image.load(path.join(img_dir, 'feijiplayerShip1_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, 'feijilaserRed16.png')).convert()missile_img = pygame.image.load(path.join(img_dir, 'feijimissile.png')).convert_alpha()
# 加载敌人图片
meteor_images = []
meteor_list = [
'xiaofeijimeteorBrown_big1.png', 'feijimeteorBrown_big2.png', 'feijimeteorBrown_med1.png', 'feijimeteorBrown_med3.png', 'feijimeteorBrown_small1.png', 'feijimeteorBrown_small2.png', 'feijimeteorBrown_tiny1.png'
]
# 加载盾牌、闪电图片
powerup_images = {}
powerup_images['shield'] = pygame.image.load(path.join(img_dir, 'feijishield_gold.png')).convert()powerup_images['gun'] = pygame.image.load(path.join(img_dir, 'feijibolt_gold.png')).convert()
# 加载爆炸效果图
explosion_anim = {}
for i in range(9):
# 敌人爆炸
filename = 'feijiregularExplosion0{}.png'.format(i)
img = pygame.image.load(path.join(img_dir, filename)).convert()
img.set_colorkey(BLACK)
# 玩家爆炸
filename = 'feijisonicExplosion0{}.png'.format(i)
img = pygame.image.load(path.join(img_dir, filename)).convert()
img.set_colorkey(BLACK)
# 加载炮弹、导弹发射声音
shooting_sound = pygame.mixer.Sound(path.join(sound_folder, 'y1030pew.wav'))missile_sound = pygame.mixer.Sound(path.join(sound_folder, 'y1030rocket.wavogg'))
# 加载敌人爆炸声音
expl_sounds = []
for sound in ['y1030expl3.wav', 'y1030expl6.wav']:
expl_sounds.append(pygame.mixer.Sound(path.join(sound_folder, sound)))
# 加载玩家爆炸的声音
player_die_sound = pygame.mixer.Sound(path.join(sound_folder, 'y1030rumble1.wavogg'))
# 调低音量
pygame.mixer.music.set_volume(0.2)
def main_menu():
global screen
menu_song = pygame.mixer.music.load(path.join(sound_folder, "y1030menu.wavogg")) # 加载游戏初始界面背景音乐
pygame.mixer.music.play(-1) # 开始播放主界面音乐 -1表示无限循环播放
title = pygame.image.load(path.join(img_dir, "feijimain.png")).convert() # 加载主界面图片
title = pygame.transform.scale(title, (WIDTH, HEIGHT), screen) # 调整主界面图片适应主窗口大小即480*600
pygame.display.update()
# 进入准备状态
ready = pygame.mixer.Sound(path.join(sound_folder, 'y1030getready.wavogg')) # 加载准备声音
ready.play() # 准备状态声音播放
screen.fill(BLACK) # 背景黑色
self.hide_timer = pygame.time.get_ticks()
self.rect.center = (WIDTH / 2, HEIGHT + 200)
 
 
class Mob(pygame.sprite.Sprite):
# 构造函数
def __init__(self):
# 执行父类的构造函数
pygame.sprite.Sprite.__init__(self)
self.image_orig = random.choice(meteor_images) # 随机选择陨石出现
self.image_orig.set_colorkey(BLACK) # 设置陨石图片不透明
self.image = self.image_orig.copy() # 复制陨石的图片
self.rect = self.image.get_rect() ## 陨石图片的矩形
self.radius = int(self.rect.width * .90 / 2) # 陨石的半径
self.rect.x = random.randrange(0, WIDTH - self.rect.width) # 陨石的x坐标 x随机值 范围: 0 ~ 屏幕宽度-陨石本身的宽度
self.rect.y = random.randrange(-150, -100) # 陨石的y方向移动速度 陨石只允许向下 不允许向上
 
## 随机下落速度
self.speedx = random.randrange(-3, 3) # 陨石的x方向移动速度 陨石可以左右运动
self.speedy = random.randrange(5, 20) # 陨石的y方向移动速度 陨石只允许向下 不允许向上
## 添加旋转
self.rotation = 0 # 陨石的旋转角度
self.rotation_speed = random.randrange(-8, 8) # 陨石旋转时的角度变化速度
self.last_update = pygame.time.get_ticks() ## 陨石最后一次更新时间
 
# 陨石的旋转函数
def rotate(self):
time_now = pygame.time.get_ticks()
if time_now - self.last_update > 50: # in milliseconds
self.last_update = time_now
# 旋转角度设定
self.rotation = (self.rotation + self.rotation_speed) % 360
# 通过旋转后得到的新图片
new_image = pygame.transform.rotate(self.image_orig, self.rotation)
# 找到矩形的中心点
old_center = self.rect.center
# 将原有的图片替换为新图片
self.image = new_image
# 获得图片的矩形
self.rect = self.image.get_rect()
# 设定矩形的中心点
self.rect.center = old_center
 
# 陨石的更新函数
def update(self):
# 执行陨石的旋转函数
self.rotate()
# 陨石的x方向更新
self.rect.x += self.speedx
# 陨石的y方向更新
self.rect.y += self.speedy
# 将越界额陨石 重新生成
if (self.rect.top > HEIGHT + 10) or (self.rect.left < -25) or (self.rect.right > WIDTH + 20):
# 重新生成陨石(为陨石重新设定坐标)
self.rect.x = random.randrange(0, WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
pygame.mixer.music.stop()
# 获得游戏运行背景音乐
pygame.mixer.music.load(path.join(sound_folder, 'y1030tgfcoder-FrozenJam-SeamlessLoop.wavogg'))
pygame.mixer.music.play(-1) # 循环播放
行政员、groupone、管理员
16,820
个编辑