资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,12/23/2020,#,4.,4,综合问题的解决,第,4,单元 计算与问题解决,4.4 综合问题的解决第4单元 计算与问题解决,1,学 习 目 标,2.,体验软件开发的基本流程,1.,学会分析任务,描述需求分析,知道需要解决问题的关键点。,pygame模块的使用,(,重点),过程设计中,事件代码的理解及使用。,(难点),学 习 目 标2.体验软件开发的基本流程1.学会分析任务,描,请同学们打开光盘接福.py程序,体验并能说出游戏的过程。,请同学们打开光盘接福.py程序,体验并能说出游戏的过程。,基于需求,分解任务,活动,1,了解需求,分析问题,通过刚才的游戏,我们知道,游戏过程是通过单击鼠标,接屏幕上不断出现的福字,并根据成功接到福字的次数记录分值。请同学们完成课本,P108“,接福,”,游戏描述。,基于需求,分解任务,需求分析,是软件工程中的一个关键过程。需求分析阶段的,任务,是确定软件系统的功能。通俗地说,就是确定需要计算机“做什么”,想达到什么样的效果。只有在确定了这些需求后,才能够分析和寻求系统的解决方法。,基于需求,分解任务,“,接福,”,游戏:,需要导入的模块有,pygame,、,random,、,sys,。其中,,pygame,模块提供了图像、声音等函数,;random,模块用于产生随机数,;sys,模块包含了跟,Python,环境相关的函数。,需求分析是软件工程中的一个关键过程。需求分析阶段的任,pygame,模块,它是一个专门用来开发游戏的模块,可以包含图像、声音等。它的相关内容主要有:,模 块,功 能,Pygame.display,访问显示设备,Pygame.event,管理事件,Pygame.font,使用字体,Pygame.image,加载和存储图片,基于需求,分解任务,pygame模块 它是一个专门用来开发游戏的模块,可以,活动,2,分解任务,设计流程,“,接福,”,游戏设计的重难点是人机交互,即如何实时获得鼠标的状态并对鼠标单击做出正确的响应。也就是不断地进行,监听,、,更新游戏状态,、,重绘屏幕,三个步骤的操作。,基于需求,分解任务,活动2 分解任务,设计流程基于需求,分解任务,通常情况下,游戏的基本结构如图所示。其中的事件主要指鼠标事件、键盘事件等。,游戏状态可以理解为程序中的变量值。随着鼠标单击,游戏中的分数需要更新,这种状态随着鼠标单击或键盘输入等事件的发生而改变。,基于需求,分解任务,游戏状态通常随事件的发生而改变,如鼠标单击、键盘输入或者时间的流逝,游戏循环不停地检查是否有新事件产生,并且会根据事件来更新游戏状态,这通常叫作事件处理。,通常情况下,游戏的基本结构如图所示。其中的事件主要指,随着,游戏状态更新,或游戏场景变化,屏幕上显示的内容也会相应地发生改变。,本游戏中福字在窗口随机出现,实际上就是显示不同位置的福字。要达到这个效果,需要完成两个步骤:,(1),在新的位置上画出图像;(2)把原来的图像擦掉。要“擦掉”某个图像,可以选择“覆盖”它,通常采用重绘背景或者用其他对象来覆盖的方式。在该游戏中,我们通过重绘背景来覆盖前一个福字。,基于需求,分解任务,随着游戏状态更新或游戏场景变化,屏幕上显示的内容也会,Pygame,自带了一个监听类循环,不断检查用户的操作,这个循环在程序运行过程期间持续工作。仔细阅读理解如下代码,while True:,for event in pygame.event.get():#,监听并获取事件列表,if event.type=pygame.QUIT:#Quit,事件,sys.exit()#,退出程序,if event.type=pygame.MOUSEBUTTONDOWN:#,侦听到鼠标点击事件,基于需求,分解任务,Pygame自带了一个监听类循环,不断检查用户的操作,本游戏中要用到的程序功能块,包括游戏环境设置、绘制图像、设置初始值等。请将主程序的各功能语句放到合适的位置,完善流程图。,基于需求,分解任务,本游戏中要用到的程序功能块,包括游戏环境设置、绘制图像、设置,基于需求,分解任务,基于需求,分解任务,需求分析之后、程序设计之前,需要对系统进行总体设计和详细设计。总体设计就是在需求分析的基础上对模型细化、分解任务,明确程序由哪些模块组成。概括地说,就是系统应该如何实现。详细设计主要指界面设计、过程设计等。,需求分析之后、程序设计之前,需要对系统进行总体设计和,组装程序,测试运行,活动,1,:,界面设计,1.创建程序,窗口,,设置背景。,调用pygame.display.set_mode()函数,,,将返回一个窗口。如果想在窗口上绘制或是放置对象,需要指定这个对象在窗口的具体位置,即,坐标。pygame中的坐标系原点在左上角,水平方向为x轴,垂直,方向为,y,轴。,在pygame中,使用图像的最简单方法是调用image函数。通过pygame.image.load(filename)来载入图片,filename表示图像文件的路径和名称。,图像文件,必须和,程序,在,同一文件夹下,才可以使用相对路径的引用方式。,组装程序,测试运行 活动1:界面设计,组装程序,测试运行,根据以上分析完成,“,接福,”,游戏的界面设计,(1)显示一个窗口,import pygame,#导入模块,pygame.init(),#pygame模块初始化,screen=pygame.display.set_mode(800,600),#创建一个窗口screen,大小为800*600,(2)显示一个有,背景色,的窗口,screen.fill(255,255,0),#窗口填充黄色,*,pygame.display.update(),#窗口刷新,(3)显示一个有,背景图片,的窗口,用下面两条语句替换(2)代码段中带“*”号的语句,back=pygame.image.load(bj.jpg),#加载背景图像,screen.blit(back,0,0),#将背景图画在窗口,组装程序,测试运行根据以上分析完成“接福”游戏的界面设计,运行,P111,样例,程序,体验图像文件的引用,import pygame#,导入模块,pygame.init()#,pygame,模块初始化,screen=pygame.display.set_mode(600,400)#,创建窗口,screen,,大小,800*600,pygame.display.set_caption(,实例,)#,设置屏幕标题,screen.fill(144,238,144)#,窗口填充淡绿色,img=pygame.image.load(ball.png)#,载入,ball.png,图像到内存,screen.blit(img,200,200)#,将图像绘制在,screen,中,图像的左上角在,200,200,pygame.display.update()#,窗口刷新,运行P111样例程序,体验图像文件的引用import pyg,组装程序,测试运行,活动,1,:,界面设计,2.,绘制福字,。,在屏幕上出现福宇同祥可以使用以上在屏幕上绘制图像的方法。为了便于游戏循环中反复调用,可以定义成一个函数showfu,在绘制福字时,需要设置图像显示的位置,因此showfu中有两个参数,分别表示图像位置的横坐标和纵坐标。,def showfu(x,y):#,定义函数,在坐标,(x,y),上显示图像,gift=pygame.image.load(fu.png)#,加载福字图像,screen.blit(gift,x,y)#,显示福字,在实际使用中,只要提供一对坐标值,就可以调用,showfu,了。,组装程序,测试运行 活动1:界面设计def showfu(x,活动,1,:,界面设计,3.,显示得分,。,方法为:先定义显示字体,然后将score显示出来。为了增加代码的复用性,以便游戏循环中状态更新时反复调用,可以定义成一个函数showscore。,组装程序,测试运行,def showscore(score):#,定义函数,显示分数,textfont=pygame.font.SysFont(Arial,30),#,字体为,Arial,大小,30,#,生成平滑的红色字符串,t=textfont.render(score:+str(score),True,(255,0,0),screen.blit(t,50,50)#,在窗口显示,活动1:界面设计组装程序,测试运行def showscore,活动,1,:,界面设计,4.,游戏状态的更新和屏幕的重绘,在pygame的游戏循环中,我们通过调用以下语句来完成游戏状态的更新和屏幕的重绘,请在横线上注明各语句的功能,。,组装程序,测试运行,screen.blit(back,0,0)#,_,showscore(score)#,_,x=random.randint(50,700)#,_,y=random.randint(50,500)#,_,showfu(x,y)#,_,pygame.display.update()#,_,pygame.time.delay(800)#,设置两次显示福字之间的延时,活动1:界面设计组装程序,测试运行screen.bli,活动,2,:人机交互及程序拼装,人机交互主要体现在鼠标上,需要获取按键的情况,就要在监听事件中增加相应的判断语句。打开光盘中,“,接福,py”,,找到相应代码,理解各句含义,在,横线上,用自然语言描述对应功能。,if event.type=pygame.MOUSEBUTTONDOWN:,#,#,获取鼠标按下的坐标,并记录在,mousex,mousey,中,mousex,mousey=pygame.mouse.get_pos(),#,判断鼠标是否击中福字,本例福字宽为,60,,高为,70,if mousex in range(x,x+60)and mousey in range(y,y+70):,score=score+5#,侦听到鼠标点击事件,加分,组装程序,测试运行,活动2:人机交互及程序拼装if event.type=p,总 结,组装程序,测试运行,基于需求,分解任务,总 结组装程序,测试运行基于需求,分解任务,跨平台的,Python,模块,专为电子游戏开发设计,包含图像、声音等多种元素控制,建立在,SDL,基础上,允许实时电子游戏研发,不被低级语言束缚,跨平台的Python模块,22,pygame.cdrom访问光驱,pygame.color颜色,pygame.cursors加载光标,pygame.display访问显示设备,pygame.draw绘制形状、线和点,pygame.event管理事件,pygame.font使用字体,pygame.image加载和存储图片,pygame.joystick使用游戏手柄,pygame.key读取键盘按键,pygame.mixer声音,pygame.movie播放视频,pygame.music播放音频,pygame.overlay访问高级视频叠加,pygame.rect管理矩形区域,pygame.scrap本地剪贴板访问,pygame.sndarray操作声音数据,pygame.sprite操作移动图像,pygame.surface管理图像和屏幕,pygame.surfarray管理点阵图像数据,pygame.time管理时间和帧信息,pygame.transform缩放和移动图像,pygame.mouse鼠标,pygame.cdrom访问光驱pygame.color颜色,23,在控制面板的高级系统设置中点击环境变量,找到,path,变量,在其末尾输入本机安装,Python,的路径。例如:,C:UsersAdministratorAppDataLocalProgramsPythonPython36-32Scripts,或在安装软件时,选择,“,添
展开阅读全文