突然之间就不能运行了
来源:3-5 飞机大战项目飞机移动控制
慕粉1469665490
2019-08-29 00:15:27
#①代码是从这里开始的,我们一步步往下复习
import pygame,sys
import constants
from game.plane import OurPlane
def mian():
""" 游戏入口,mian方法"""
#初始化
pygame.init()
width,height = 480, 852
#屏幕对象
screen= pygame.display.set_mode((width, height))
#设置窗口标题
pygame.display.set_caption('飞机大战')
#加载背景图片
bg = pygame.image.load(constants.BG_IMG)
#游戏标题
img_game_title = pygame.image.load(constants.IMG_GAME_TITLE)
img_game_title_rect = img_game_title.get_rect()
#获取标题高度和宽度
t_width , t_height = img_game_title.get_size()
img_game_title_rect.topleft = (int((width - t_width) / 2),
int(height / 2 - t_height))
#开始按钮
btn_start =pygame.image.load(constants.IMG_GAME_START_BTN)
btn_start_rect = btn_start.get_rect()
btn_width, btn_height = btn_start.get_size()
btn_start_rect.topleft = (int((width - btn_width) / 2),
int(height / 2 + btn_height))
#加载背景音乐
pygame.mixer.music.load(constants.BG_MUSIC)
pygame.mixer.music.play(-1) #无限循环播放
pygame.mixer.music.set_volume(0.9) #设置设置音量
#游戏状态
status = 0 #0准备中, 1游戏中, 2游戏解释
our_plane = OurPlane(screen)
frame = 0 #播放帧数
clock = pygame.time.Clock()
while 1:
clock.tick(60)
#播放帧数循环累加
frame += 1
#每增加到60,给他重置为0,防止占用系统内存
if frame >= 60:
frame = 0
# 1. 监听事件
for event in pygame.event.get():
#退出偷袭
if not event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
#鼠标点击进入游戏
#游戏正在准备中,点击进入游戏
if status == 0:
status = 1
elif event.type == pygame.KEYDOWN:
#键盘事件
#游戏正在游戏中,才需要控制键盘
if status == 1:
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()
#更新游戏状态
if status == 0:
# 游戏正在准备中
#绘制背景
screen.blit(bg, bg.get_rect())
#标题
screen.blit(img_game_title,img_game_title_rect)
#开始按钮
screen.blit(btn_start, btn_start_rect)
elif status == 1:
#游戏进行中
#绘制背景
screen.blit(bg, bg.get_rect())
#绘制飞机
our_plane.update(frame)
pygame.display.flip()
if __name__ == "__main__":
mian()
#写飞机的基类
"""
飞机的基类
我方的飞机 敌方的小型飞机 敌方的中型飞机 敌方的大型飞机
"""
import pygame
import constants
class Plane(pygame.sprite.Sprite):
"""
飞机的基础类
"""
# list 保存飞机的图片
plane_images = []
#飞机爆炸的图片
destroy_images = []
# 坠毁的音乐地址
down_sound_src = None
#飞机的状态:True活的,False死的
active = True
#该飞机发射的子弹精灵组
bullets = pygame.sprite.Group()
def __init__(self, screen, speed = None):
super().__init__()
self.screen = screen
# 加载的静态资源
self.img_list = []
self._destroy_img_list = []
self.down_sound = None
self.load_src()
#飞机飞行的速度
self.speed = speed or 10
#获取飞机的位置
self.rect = self.img_list[0].get_rect()
def load_src(self):
""" 加载静态资源 """
# 飞机图像
for img in self.plane_images:
self.img_list.append(pygame.image.load(img))
for img in self.destroy_images:
self._destroy_img_list.append(img)
if self.down_sound_src:
self.down_sound = pygame.mixer.Sound(self.down_sound_src)
def blit_me(self):
self.screen.blit(self.image,self.rect)
@property
def image(self):
return self.img_list[0]
def move_up(self):
"""飞机向上移动"""
self.rect.top -= self.speed
def move_down(self):
"""飞机向下移动"""
self.rect.top += self.speed
def move_left(self):
"""飞机向左移动"""
self.rect.left -= self.speed
def move_right(self):
"""飞机向右移动"""
self.rect.left += self.speed
def broken_down(self):
"""飞机坠毁效果"""
#1.播放坠毁音乐
if self.down_sound:
self.down_sound.play()
#2.展示坠毁的动画
for img in self._destroy_img_list:
self.screen.blit(img,self.rect)
#3.坠毁后
self.active = False
class OurPlane(Plane):
# list 保存飞机的图片
plane_images = [constants.OUR_PLANE_IMG_1,constants.OUR_PLANE_IMG_2]
#飞机爆炸的图片
destroy_images = constants.OUR_DESTROY_IMG_LIST
# 坠毁的音乐地址
down_sound_src = None
def update(self,frame):
#更新飞机的动画效果
if frame % 5:
self.screen.blit(self.img_list[0],self.rect)
else:
self.screen.blit(self.img_list[1],self.rect)
1回答
时间,
2019-08-29
同学,你好。同学退出游戏的条件写的不对,应为当event.type事件的类型为pygame.QUIT时,退出程序,同学在if条件中加了not即当event事件类型不为pygame.QUIT时退出程序,因此程序会直接退出。
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题