正在回答
同学,你好。
1、在加载图片时应使用pygame.image.load()方法加载
2、在加载子弹声音时,同学可以使用wav格式的音乐
3、同学可以使用pygame.mixer.music.load()加载mp3格式的音乐,但是这样会与程序的背景音乐有冲突,建议同学选择方法二中的写法,加载wav格式音乐
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
为什么我设定了还是没用?
为什么会报错呢?音乐没问题
运行main时还是报错?添加了
aa啊啊啊啊我还要交作业啊
在吗老师,帮我看下我的错误,我的教学服务期要没了
plane.py全代码:
import pygame
import constants
import game.bullets
class Plane(pygame.sprite.Sprite):
# 飞机图片
plane_images = []
# 存活状态(默认为True)
active = True
# 发射的子弹(一个精灵组)
bullets = pygame.sprite.Group()
def __init__(self, screen, speed=None):
""" 飞机类的初始化 """
super().__init__()
# 屏幕Surface对象
self.screen = screen
# 速度
self.speed = speed
# 飞机的图片(存储至一个list中)
self.img_list = []
# 得到飞机的位置
self.rect = self.img_list[0].get_rect()
# 得到飞机的大小
self.plane_width, self.plane_height = self.img_list[0].get_size()
# 游戏窗口的大小
self.width, self.height = self.screen.get_size()
# 得到飞机位置处于游戏窗口左边和上边的距离
self.rect.left = int((self.width - self.plane_width) / 2)
self.rect.top = int(self.height/2)
def load_src(self):
""" 加载飞机图片资源 """
for img in self.plane_images:
self.img_list.append(img)
@property
def image(self):
"""
:return:飞机第一个图片
"""
return self.img_list[0]
def draw_plane(self):
""" 绘制飞机 """
self.screen.blit(self.image, self.rect)
def move_up(self):
""" 使飞机上移 """
self.rect.top -= self.speed
def move_down(self):
""" 使飞机下移 """
self.rect.top += self.speed
def move_left(self):
""" 使飞机左移 """
self.rect.top -= self.speed
def move_right(self):
""" 使飞机右移 """
self.rect.top += self.speed
def shoot(self):
""" 发射子弹 """
bullet = game.bullets.Bullet(self.screen, self, 15)
self.bullets.add(bullet)
class OurPlane(Plane):
plane_images = [constants.OUR_PLANE_IMAGE_1, constants.OUR_PLANE_IMAGE_2]
def update(self, *args, frame):
if frame % 5:
self.screen.blit(self.img_list[0], self.rect)
else:
self.screen.blit(self.img_list[1], self.rect)
def move_up(self):
""" 防止飞机飞出屏幕外面,重写移动方法 """
super().move_up()
if self.rect.top <= 0:
self.rect.top = 0
def move_down(self):
""" 防止飞机飞出屏幕外面,重写移动方法 """
super().move_down()
if self.rect.top >= self.height - self.plane_height:
self.rect.top = self.height - self.plane_height
def move_left(self):
""" 防止飞机飞出屏幕外面,重写移动方法 """
super().move_left()
if self.rect.left <= 0:
self.rect.left = 0
def move_right(self):
""" 防止飞机飞出屏幕外面,重写向右移动方法 """
super().move_right()
if self.rect.left >= self.width - self.plane_width:
self.rect.left = self.width - self.plane_width
main.py全代码:
import sys
import pygame
import constants
import game.bullets
import game.plane
clock = pygame.time.Clock()
def main():
""" 开始游戏 """
pygame.init()
# 屏幕的x,y轴
width, height = 480, 852
# 屏幕对象
screen = pygame.display.set_mode((width, height))
# 设置窗口标题
pygame.display.set_caption('飞机大战')
# 背景图片
bg = constants.BG_IMAGE_BACK
# 标题图片
img_game_title = constants.IMAGE_GAME_TITLE
t_width, t_height = img_game_title.get_size()
# 获取标题的矩形区域
img_game_title_rect = img_game_title.get_rect()
img_game_title_rect.topleft = (int((width - t_width) / 2), int(height / 2 - t_height))
# 开始按钮图片
btn_start = constants.IMAGE_GAME_START
btn_width, btn_height = btn_start.get_size()
# 获取开始键的矩形区域
img_game_title_rect = img_game_title.get_rect()
img_game_title_rect.topleft = (int((width - t_width) / 2), int(height / 2 - t_height + btn_height))
# 游戏背景音效
pygame.mixer.music.load(constants.BG_MUSIC)
pygame.mixer.music.play(-1)
pygame.mixer.music.set_volume(0.2)
status = 'READY'
frame = 0
# 实例化我方飞机
our_plane = game.plane.OurPlane(screen, speed=4)
while True:
# 设置帧速率
clock.pygame.tick(60)
frame += 1
if frame >= 60:
frame = 0
# 1. 监听事件
for event in pygame.event.get():
# 退出游戏
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
# 鼠标点击进入游戏
# 游戏正在准备中,点击才能进入游戏
if status == 'READY':
status = 'PLAYING'
elif status == 'PLAYING':
# 点击鼠标发射子弹
our_plane.shoot()
elif status == 'OVER':
status = 'READY'
elif event.type == pygame.KEYDOWN:
# 键盘事件
key_down = event.key
# 游戏正在游戏中,才需要控制键盘 ASWD
if status == 'PLAYING':
if event.key == pygame.K_w or event.key == pygame.K_UP:
our_plane.move_up()
elif event.key == pygame.K_s or event.key == pygame.K_DOWN:
our_plane.move_down()
elif event.key == pygame.K_a or event.key == pygame.K_LEFT:
our_plane.move_left()
elif event.key == pygame.K_d or event.key == pygame.K_RIGHT:
our_plane.move_right()
elif event.key == pygame.K_SPACE:
# 发射子弹
our_plane.shoot()
if __name__ == '__main__':
main()
这是什么意思?
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星