1、第2单元 编程计算第1单元 初识数据与计算第3单元 认识数据第4单元 计算与问题解决第5单元 数据分析与人工智能信息技术信息技术(必修(必修1 1)4.4 4.4 综合问题的解决综合问题的解决学习目标 学会分析任务,描述需求分析,知道需要解决的关学会分析任务,描述需求分析,知道需要解决的关键问题。键问题。体验软件开发的基本流程。体验软件开发的基本流程。春节是我国一个古老的节日,也是全年最重要的节日。春节是我国一个古老的节日,也是全年最重要的节日。“迎福迎福”“”“纳福纳福”是迎是迎新春必不可少的传统项目。有道是:新春必不可少的传统项目。有道是:“大福小福全家福,大福小福全家福,有福享福处处福。
2、知福来有福享福处处福。知福来福有祝福,清福洪福添幸福。接福纳福年年福,守福祈福岁岁福!福有祝福,清福洪福添幸福。接福纳福年年福,守福祈福岁岁福!”本节我们将围绕本节我们将围绕“接福接福游戏游戏”项目项目,创设游戏情境,实现通过单击鼠标,创设游戏情境,实现通过单击鼠标,去接屏幕上不断出现的福字,去接屏幕上不断出现的福字,并根据成功接到福字的次数记录分值。并根据成功接到福字的次数记录分值。新课导入任务一 基于需求,分解任务 打开教科书配套资源中的打开教科书配套资源中的“接福接福Py”Py”程序并运行,单击屏幕上不断出现的福字,程序并运行,单击屏幕上不断出现的福字,观察屏幕变化。观察屏幕变化。在下框
3、中写出这款游戏的功能。在下框中写出这款游戏的功能。“接福接福”游戏描述游戏描述 打开接福程序,单击鼠标,去接打开接福程序,单击鼠标,去接屏幕上不断出现的福字,并根据成功屏幕上不断出现的福字,并根据成功接到福字的次数记录分值。接到福字的次数记录分值。活动1 1 了解需求,分析问题 需求分析是软件工程中的一个关键过程。需求分析阶段的任务是需求分析是软件工程中的一个关键过程。需求分析阶段的任务是确定软件系统的功能。通俗地说,就是确定需要计算机确定软件系统的功能。通俗地说,就是确定需要计算机“做什么做什么”,想达到什么样的效果。只有在确定了这些需求后,才能够分析和寻求想达到什么样的效果。只有在确定了这
4、些需求后,才能够分析和寻求系统的解决方法。系统的解决方法。需求分析 综合考虑游戏功能,需要导入的模块有综合考虑游戏功能,需要导入的模块有pygamepygame、randomrandom、syssys。其中,其中,pygamepygame模块提供了图像、声音等函数;模块提供了图像、声音等函数;randomrandom模块用于产生模块用于产生随机数;随机数;syssys模块包含了跟模块包含了跟PythonPython环境相关的函数。环境相关的函数。pygame 模块 pygame pygame是一个专门用来开发游戏的模块,可以包含图像、声音等。是一个专门用来开发游戏的模块,可以包含图像、声音等。
5、它的相它的相关内容主要有:关内容主要有:模块模块功能功能pygame.display访问显示设备pygame.event管理事件pygame.font使用字体pygame.image加载和存储图片活动2 分解任务,设计流程 本项目中设计的重点和难点是人机交互,即如何实时获得鼠标的本项目中设计的重点和难点是人机交互,即如何实时获得鼠标的 状态并对鼠标单状态并对鼠标单击做出正确的响应。也就是不断地进行击做出正确的响应。也就是不断地进行监听、更新游戏状态、重绘屏幕监听、更新游戏状态、重绘屏幕三个步骤的操作。三个步骤的操作。更新游戏状态可以理解为程序中的变量值。随着鼠标单击,游戏中的分数需要更更新游戏
6、状态可以理解为程序中的变量值。随着鼠标单击,游戏中的分数需要更新,还有诸如游戏中人物的生命值、怪物数量等,这些状态经常随着鼠标单击或键盘新,还有诸如游戏中人物的生命值、怪物数量等,这些状态经常随着鼠标单击或键盘输入等事件的发生而改变。输入等事件的发生而改变。游戏状态通常随事件的发游戏状态通常随事件的发生而改变,如鼠标单击、键盘输生而改变,如鼠标单击、键盘输入或者时间的流逝,游戏循环不入或者时间的流逝,游戏循环不停地检查是否有新事件产生,并停地检查是否有新事件产生,并且会根据事件来更新游戏状态,且会根据事件来更新游戏状态,这通常叫作事件处理。这通常叫作事件处理。随着游戏状态更新或游戏场景变化,随
7、着游戏状态更新或游戏场景变化,屏幕上显示的内容也会相应地发生改变。本屏幕上显示的内容也会相应地发生改变。本游戏中福字在窗口随机出现,实际上就是显示不同位置的福字。要达到这个效果,需游戏中福字在窗口随机出现,实际上就是显示不同位置的福字。要达到这个效果,需要完成两个步骤:要完成两个步骤:(1 1)在新的位置上画出图像;)在新的位置上画出图像;(2 2)把原来的图像擦掉。)把原来的图像擦掉。计算机图像可不是铅笔画,计算机图像可不是铅笔画,用橡皮擦就能擦掉。用橡皮擦就能擦掉。要要“擦掉擦掉”某个图像,可以选择某个图像,可以选择“覆盖覆盖”它,它,通常采用重绘背景或者用其他对象来覆盖通常采用重绘背景或
8、者用其他对象来覆盖的方式。在该游戏中,我们通过重绘背景来的方式。在该游戏中,我们通过重绘背景来覆盖前一个福字。覆盖前一个福字。如何实现监听?如何实现监听?pygame pygame是专为游戏设计的,是专为游戏设计的,自带了一个监听类循环,自带了一个监听类循环,不断检查用户的操作,不断检查用户的操作,比如用户按键、移动鼠标或者关闭窗口等。这个循环会在程序运行期间持续工作。比如用户按键、移动鼠标或者关闭窗口等。这个循环会在程序运行期间持续工作。其代码框架如下:其代码框架如下:while True:while True:监听所有事件,监听所有事件,获取事件列表获取事件列表for event in p
9、ygame.event.get():for event in pygame.event.get():if event.type=pygame.QUIT:if event.type=pygame.QUIT:#Quit#Quit事件事件 sys.exit()sys.exit()退出程序退出程序 鼠标单击事件鼠标单击事件 if event.type=pygame.MOUSEBUTTONDOWN:if event.type=pygame.MOUSEBUTTONDOWN:在在python python 中,中,True True(真)、(真)、FalseFalse(假)的第一个字符(假)的第一个字符要大
10、写。要大写。1.监听事件获取鼠标单击位置2.游戏环境设置3.重新绘制背景及图像4.设置初始值并绘制图像5.加分 以下是本游戏中要用到的程序功能块,包括游戏环境设置、绘制图像、设置初始值以下是本游戏中要用到的程序功能块,包括游戏环境设置、绘制图像、设置初始值等。请将主程序的各功能语句放到合适的位置,完善程序流程图。等。请将主程序的各功能语句放到合适的位置,完善程序流程图。任务二 组装程序,测试运行1.1.创建程序窗口,创建程序窗口,设置背景。设置背景。调用调用pygame.display.set_mode(pygame.display.set_mode()函数,将返回)函数,将返回一个窗口。一个
11、窗口。如果想在窗口上绘制或是放置对象,如果想在窗口上绘制或是放置对象,需要指定这个对象在窗口的具体位置,即坐标。需要指定这个对象在窗口的具体位置,即坐标。pygamepygame中的坐标系原点在左上角,水平方向为中的坐标系原点在左上角,水平方向为x x轴,轴,垂直方向为垂直方向为y y轴。轴。xy0 需求分析之后、程序设计之前,需要对系统进行总体设计和详细设需求分析之后、程序设计之前,需要对系统进行总体设计和详细设 计。总体设计就是计。总体设计就是在需求分析的基础上对模型细化、分解任务,明确程在需求分析的基础上对模型细化、分解任务,明确程 序由哪些模块组成。概括地说,就是序由哪些模块组成。概括
12、地说,就是系统应该如何实现。详细设计主要系统应该如何实现。详细设计主要 指界面设计、过程设计等。指界面设计、过程设计等。活动1 界面设计 在在pygamepygame中,使用图像的最简单方法是调用中,使用图像的最简单方法是调用imageimage函数。通过函数。通过pygame.image.load(filename)pygame.image.load(filename)来载入图片,来载入图片,filenamefilename表示图像文件的表示图像文件的路径和名称路径和名称。图像文件必须和程序在同一文件夹下才可以。图像文件必须和程序在同一文件夹下才可以使用相对路径的引用方式。使用相对路径的引用
13、方式。以下是一个样例程序。以下是一个样例程序。import pygame import pygame 导入模块导入模块pygame.init()pygame.init()#pygame#pygame模块初始化模块初始化创建一个窗口创建一个窗口screen,screen,大小为大小为800800*600600screen=pygame.display.set_mode(800,600)screen=pygame.display.set_mode(800,600)pygame.display.set_caption(pygame.display.set_caption(实例实例)设置屏幕标题设置屏
14、幕标题screen.fill(144,238,144)screen.fill(144,238,144)窗口填充淡绿色窗口填充淡绿色img=pygame.image.load(ball.png)img=pygame.image.load(ball.png)载入载入ball.pngball.png图像到内存图像到内存将图像绘制在将图像绘制在screenscreen中,图像的左上角在中,图像的左上角在200,200 200,200 screen.blit(img,200,200)screen.blit(img,200,200)pygame.display.update()pygame.display
15、.update()窗口刷新窗口刷新创建一个窗口screen,大小为800*600screen=_设置窗口标题为“接福”back=_(bj.jpg)加载背景图screen.blit(_,0,0)将背景图画在窗口0,0位置_刷新画面根据以上分析完成根据以上分析完成“接福接福”游戏的界面设计游戏的界面设计pygame.display.set_mode(800,600)pygame.display.set_mode(800,600)pygame.display.set_caption(接福)pygame.image.loadback,pygame.display.update()2.2.绘制福字绘制福
16、字。在屏幕上出现福宇同祥可以使用以上在屏幕上绘制图像的方法。为了便于游戏循环中反在屏幕上出现福宇同祥可以使用以上在屏幕上绘制图像的方法。为了便于游戏循环中反复调用,可以定义成一个函数复调用,可以定义成一个函数showfu,showfu,在绘制福字时,需要设置图像显示的位置,因此在绘制福字时,需要设置图像显示的位置,因此showfushowfu中有两个参数,分别表示图像位置的横坐标和纵坐标。中有两个参数,分别表示图像位置的横坐标和纵坐标。def showfu(x,y):#def showfu(x,y):#定义函数,在坐标定义函数,在坐标(x,y)(x,y)上显示图像上显示图像gift=pygam
17、egift=pygame.imageimage.load(fu.png)#load(fu.png)#加载福字图像加载福字图像screen.blit(gift,x,y)#screen.blit(gift,x,y)#显示福字显示福字在实际使用中,只要提供一对坐标值,就可以调用在实际使用中,只要提供一对坐标值,就可以调用showfushowfu了。了。3.3.显示得分显示得分。方法为方法为:先定义显示字体,然后将先定义显示字体,然后将scorescore显示出来。为了增加代码的复用性,以便游戏显示出来。为了增加代码的复用性,以便游戏循环中状态更新时反复调用,可以定义成一个函数循环中状态更新时反复调用
18、,可以定义成一个函数showscoreshowscore。def showscore(score):#def showscore(score):#定义函数,显示分数定义函数,显示分数textfont=pygame.fonttextfont=pygame.font.SysFont(Arial,30)#SysFont(Arial,30)#字体为字体为Arial,Arial,大小大小3030#生成平滑的红色字符串生成平滑的红色字符串t=textfont.render(score:+str(score),True,(255,0,0)t=textfont.render(score:+str(score)
19、,True,(255,0,0)screen.blit(t,50,50)#screen.blit(t,50,50)#在窗口显示在窗口显示4.4.游戏状态的更新和屏幕的重绘游戏状态的更新和屏幕的重绘 在在pygamepygame的游戏循环中,我们通过调用以下语句来完成游戏状态的更新和屏幕的游戏循环中,我们通过调用以下语句来完成游戏状态的更新和屏幕的重绘,请在横线上注明各语句的功能的重绘,请在横线上注明各语句的功能。screen.blit(back,0,0)#screen.blit(back,0,0)#_ _ showscore(score)#showscore(score)#_ _x=random
20、.randint(50,700)#x=random.randint(50,700)#_ _ y=random.randint(50,500)#y=random.randint(50,500)#_ _showfu(x,y)#showfu(x,y)#_ _pygamepygame.display.update()#display.update()#_ _pygame.time.delay(800)#pygame.time.delay(800)#设置两次显示福字之间的延时设置两次显示福字之间的延时将背景图显示在窗口将背景图显示在窗口显示分数显示分数随机生成福字水平方向坐标随机生成福字水平方向坐标随机
21、生成福字随机生成福字垂直垂直方向坐标方向坐标在在(x,y)(x,y)位置显示福字位置显示福字刷新窗口刷新窗口活动2 人机交互及程序拼装 在本项目中,人机交互主要体现在鼠标单击上。在本项目中,人机交互主要体现在鼠标单击上。需要获取按键的情况,就要在监需要获取按键的情况,就要在监听事件中增加相应的判断语句。听事件中增加相应的判断语句。打开教科书配套资源中的打开教科书配套资源中的“接福接福pypy,找到相应的代码,仔细阅读并理解各语句,找到相应的代码,仔细阅读并理解各语句的含义,在下面横线上用自然语言描述其对应的功能。的含义,在下面横线上用自然语言描述其对应的功能。if event.type=pygame.MOUSEBUTTONDOWN:#_获取鼠标按下的坐标并记录在mousex,mousey中mousex,mousey=pygame.mouse.get_pos()判断鼠标是否击中福字,本例中福字宽为60,高为70if mousex in range(x,x+60)and mousey in range(y,y+70):score=score+5#_侦听到鼠标点击事件侦听到鼠标点击事件加分加分课堂小结综合问题的解决综合问题的解决
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。