(
课件网) 综合问题的解决 ——— 接 福 游 戏 课 前 预 习 预习课本P107-P109,思考以下问题 1.python中专门用来开发游戏的模块是( ) A、numpy B、pygame C、matplotlib D、math 2.在软件的生命周期中,明确软件系统具备哪些功能的阶段是( )。 A.可行性分析 B.需求分析 C.概要设计 D.详细设计 B B 教 学 目 标 学会分析任务,描述需求分析,知道需要解决的关键问题。 体验软件开发的基本流程 接福游戏 运行“接福游戏”,描述这款游戏的功能?需要python中的哪些模块实现这些功能? 一 了解需求、分析问题 pygame模块提供了图像、声音等函数; random模块用于产生随机数; sys模块包含了跟Python环境相关的函数。 综合考虑游戏功能,需要导入的模块有pygame、random、 sys。 一 了解需求、分析问题 pygame是一个专门用来开发游戏的模块,可以包含图像、声音等。 模块 功能 pygame. display 访问显示设备 pygame.event 管理事件 pygame.font 使用字体 pygame.image 加载和存储图片 二 分解任务,设计流程 如何实时获得鼠标的状态并对鼠标单击做出正确的响应。也就是不断地进行监听、更新游戏状态 、重绘屏幕三个步骤的操作。 二 分解任务,设计流程 pygame自带监听类循环,会不断检查用户的操作,比如用户按键、移动鼠标或者关闭窗口等,通常用来实现游戏中与用户的交互。 监听 while True: #监听所有事件, 获取事件列表 for event in pygame.event.get(): if event.type==pygame.QUIT: #Quit事件 sys.exit() #退出程序 #鼠标单击事件 if event.type==pygame.MOUSEBUTTONDOWN: …… 二 分解任务,设计流程 游戏状态可以理解为程序中的变量值。随着鼠标单击,游戏中的分数需要更新。这些状态通常随着鼠标单击或键盘输入等事件的发生而改变。 更新游戏状态 本游戏中福字在窗口随机出现,实际上就是显示不同位置的福字。要达到这个效果,需要完成两个步骤:①把原来的图像擦掉或覆盖②在新的位置上画出图像 重绘屏幕 计算机要“擦掉”某个图像,可以采用重绘背景或者用其他对象来覆盖的方式 活动一: 将主程序的各功能语句放到合适的位置。 三 组装程序,测试运行 1. 创建窗口,设置背景 import pygame #导入模块 pygame.init() #pygame模块初始化 #创建一个窗口screen,大小为800*600 screen=pygame.display.set_mode([800,600]) pygame.display.set_caption('接福') #设置窗口标题 三 组装程序,测试运行 显示一个有背景色的窗口 screen.fill((144,238,144)) #窗口填充淡绿色* pygame.display.update() #窗口刷新 显示一个有背景图片的窗口 back=pygame.image.load('bj.jpg') #加载背景图像 screen.blit(back,[0,0]) #将背景图画在窗口 活动二: 根据以上分析完成“接福”游戏的界面设计 import pygame screen = pygame.display.set_mode([①]) # 创建一个800*600的窗口 pygame.display.set_caption('接福') # 设置窗口标题 back = pygame.image.load('bj.jpg') # 加载背景图像 screen.blit(②, [0, 0]) # 将背景图显示在窗口 pygame.display.③ #刷新画面 三 组装程序,测试运行 2.绘制福字 在实际使用中,只要提供一对坐标值,就可以调用showfu了。 def showfu(x,y): #定义函数,在坐标(x,y)上显示图像 gift=pygame.image.load('fu.png') #加载福字图像 screen.blit(gift,[x,y]) #显示福字 三 组装程序,测试运行 方法为:先定义显示字体,然后将score显示出来。为了增加代码的复用性,以便游戏循环中状态更新时反复调用,可以定义成一个函数showscore。 3.显示得分 def showscore(score): #定义函数,显示分数 textfont=pygame.font.SysFont('Arial',30) #字体为Ar ... ...