4.4 综合问题的解决 教案(2课时)

文档属性

名称 4.4 综合问题的解决 教案(2课时)
格式 zip
文件大小 42.6KB
资源类型 教案
版本资源 教科版(2019)
科目 信息技术(信息科技)
更新时间 2020-11-23 15:46:44

文档简介

教科版2019信息技术必修1数据与计算
第4单元计算与问题解决4.4
综合问题的解决教学设计
教材分析
基于核心素养的教学,要符合课标的规定要求,又要在此基础上有所建构与创新;要充分体现学科思维,又能促进学生核心素养的全面、均衡发展;既保证知识技能的系统性,又注重项目与活动对学生创新意识与核心素养的驱动。从知识、技能和综合素质方面锻炼自己,培养综合能力和创新意识是中学生职业规划中很重要的内容。
以项目为情景,以任务为目标,以活动为载体,使学生具有分析算法、设计算法和实现算法的初步能力,让学生通过实践将书本知识转化为解决实际问题的能力。
针对一个实际需求,将一个复杂的问题分解成若干较为简单的问题,从而提高开发简单实用系统的初步能力。把基础知识、基本概念和应用程序开发有机地结合起来,通过对具体案例或任务的分析,引出了Python模块中pygame模块的应用,介绍了应用软件的程序设计方法。任务驱动型教学能激发学生学习兴趣,提高学生的动手能力和解决问题的能力,达到事半功倍的效果。
本节我们围绕项目“接福游戏”展开学习,体验软件开发的流程,感受综合问题的处理方法,本项目主要包含“基于需求,分解任务”和“组装程序,测试运行”两个任务。
教学建议
在关注生活趣味的同时,更关注学生的实际认知发展水平。高中生的形式逻辑思维比较发达,但辩证逻辑思维能力有待加强。考虑学生已有的知识和经验(包括生活经验与社会经验),也应注意其经验对课程知识及思维发展的支持程度和水平。
开发流程按顺序可以划分为:需求分析;软件的总体结构设计和模块设计;程序开发和调试;运行维护等。
在教学过程中,让学生了解面向需求的常用的软件设计方法,培养学生分析问题,整体把握、关注细节的能力,训练学生的综合问题解决能力;在解决复杂问题时,要学会将复杂问题分解成难度较小的小问题,一一突破,小问题解决了,大问题就迎刃而解了。本节的游戏项目是一个较大的工程,我们将它分解为:显示窗体,窗体上显示物体,物体怎样运动,怎样使物体连续运动等多个易于解决的小问题,便于学生理解和掌握,提高学生战胜复杂问题的信心。在实际教学中,我们也可以根据学生的实际情况,选择不同的代码编写要求,如:填空式的代码编写、功能模块的代码编写等。编写代码不是最终目的,培养学生掌握解决实际问题的方法才是关键。
教学目标
1.学会分析任务,描述需求分析,知道需要解决的关键问题。
2.体验软件开发的基本流程。
教学重点、难点
分析任务,描述需求分析,知道需要解决的关键问题。软件开发的基本流程。
教学方法
讲授法,演示法,任务引导法
教学过程
第一、二课时
引入
在解决一个综合问题时,我们通常先考虑总体,后考虑细节;先面向整体,再细化局部。面对软件开发这类综合问题时,需要立足对象间的相互联系,强调便捷的人机交互模式,尽量向需求靠拢。
春节是我国一个古老的节日,也是全年最重要的节日。“迎福”“纳福”是迎新春必不可少的传统项目。有道是:“大
福小福全家福,有福享福处处福。知福来福有祝福,清福洪福添幸福。接福纳福年年福,守福祈福岁岁福!
本节我们将围绕“‘接福’游戏”项目,创设游戏情境,实现通过单击鼠标,去接屏幕上不断出现的福字,并根据成功接到福字的次数记录分值。
本项目主要包含“基于需求,分解任务”和“组装程序,测试运行”两个任务。
任务一
基于需求,分解任务
“接福”游戏界面如图4.4.1所示。
活动1了解需求,分析问题
打开教科书配套资源中的“接福py”程序并运行,单击屏幕上不断出现的福字,观察屏幕变化。在下框中写出这款游戏的功能。
综合考虑游戏功能,需要导入的模块有pygame、random、?sys。其中,pygame模块提供了图像、声音等函数;?random模块用于产生随机数;sys模块包含了跟Python环境相关的函数。
pygame模块
pygame是-一个专门用来开发游戏的模块,可以包含图像、声音等。本项目中涉及的pygamc相关内容如表4.4.1所示。
模块
功能
pygame.display
访问显示设备
pygame.event
管理事件
pygame.font
使用字体
pygame.image
加载和存储图片
活动2分解任务,?设计流程
本项目中设计的重点和难点是人机交互,即如何实时获得鼠标的状态并对鼠标单击做出正确的响应。也就是不断地进行监听、更新游戏状态、重绘屏幕三个步骤的操作。
通常情况下,游戏的基本结构如图4.4.2所示。其中的事件主要指鼠标事件、键盘事件等。
游戏状态可以理解为程序中的变量值。随着鼠标单击,游戏中的分数需要更新,还有诸如游戏中人物的生命值、怪物数量等,这些状态经常随着鼠标单击或键盘输入等事件的发生而改变。
随着游戏状态更新或游戏场景变化,屏幕上显示的内容也会相应地发生改变。本游戏中福字在窗口随机出现,实际上就是显示不同位置的福字。要达到这个效果,需要完成两个步骤:?(1)?在新的位置上画出图像;?(2)?把原来的图像擦掉。计算机图像可不是铅笔画,用橡皮擦就能擦掉。要“擦掉”某个图像,可以选择“覆盖”它,通常采用重绘背景或者用其他对象来覆盖的方式。在该游戏中,我们通游戏状态,?这通常过重绘背景来覆盖前一个福字。
问题
最后一个问题是,如何实现这种监听?
pygame是专为游戏设计的,自带了一个监听类循环,不断检查用户的操作,比如用户按键、移动鼠标或者关闭窗口等。这个循环会在程序True(真)、?False
运行期间持续工作。其代码框架如下。
while?True:
#监听所有事件,获取事件列表
for?event?in?pygame?.?event?.?get():
if?event?.?type==pygame?.QUIT:
#Quit事件
sys?.exit()
#退出程序
#鼠标单击事件
if?event.?type==pygame?.MOUSEBUT?TONDOWN:
看来要获取按键的情况,只要在监听事件中增加相应的判断语句就可以了。
以下是本游戏中要用到的程序功能块,包括游戏环境设置、绘制图像、设置初始值等。请将主程序的各功能语句放到合适的位置,完善图4.4.3所示的程序流程图。
需求分析之后、程序设计之前,需要对系统进行总体设计和详细设计。总体设计就是在需求分析的基础上对模型细化、分解任务,明确程序由哪些模块组成。概括地说,就是系统应该如何实现。详细设计主要指界面设计、过程设计等。第三、四课时
任务二组装程序,测试运行
活动1界面设计
1.创建程序窗口,设置背景。
调用pygame.display.set?mode(函数,将返回一个窗口。如果想在窗口上绘制或是放置对象,需要指定这个对象在窗口的具体位置,即坐标。pygame中的?坐标系原点在左上角,水平方向为x轴,垂直方向为y轴。
在pygame中,使用图像的最简单方法是调用image函数。通过pygame.image.load(filename)来载入图片,filename表?示图像文件的路径和名称。图像文件必须和程序在同一文件夹下才可以使用相对路径的引用方式。
例子
以下是一个样例程序。
import?pygame
#导入模块
pygame?.init()
#pygame模块初始化
#创建一个窗口screen,大小为800
600
screen=pygame?.?display.?set.?mode(?[800?,?600])pygame?.?display.set?caption(?'实例')
#设置屏幕标题
screen.?fill((144,?238,?144))
#窗口填充淡绿色
img=pygame?.?image?.?load('?ball.?png')#载入ball.?png图像到内存#将图像绘制在screen中,图像的左上角在[200,?200]
screen.?blit(img,?[200,?200])
pygame?.display.update()
#窗口刷新
运行结果如图4.4.4所示。
你学会创建窗口了吗?仿照上面的代码尝试创建“接福”程序窗口,并设置图片作为背景。请注意图片文件路径的描述,思考背景图片应该在什么位置显示,有了背景图片窗口是否还要填充颜色等。画完以后一定记得利用update更新一下,否则画面会一片漆黑。
操作实践
#创建一个窗口screen,大小为800
600
screen=
#设置窗口标题为“接福”
back=
('bj.jpg')
#加载背景图
screen.?blit(
,[0,0])
#将背景图画在窗口[0,0]位置
#刷新画面
测试代码,可得到一个带有背景图的窗口。
2.绘制福字。
在屏幕上出现福字同样可以使用以上在屏幕上绘制图像的方法。为了便于游戏循环中反复调用,可以定义成一个函数showfu,在绘制福字时,需要设置图像显示的位置,因此showfu中有两个参数,分别表示图像位置的横坐标和纵坐标。
def
showfu(x,y):
#定义函数,在坐标(x,y)上显示图像
gift=pygame
.
image
.
load(
'fu.png'
)#加载福字图像
screen.blit(gift,[x,y])#显示福字
在实际使用中,只要提供一对坐标值,就可以调用showfu
了。
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])
#在窗口显示
仔细阅读代码并理解各语句的含义。
在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
.
de1ay(800)#设置两次显示福字之间的延时
活动2人机交互及程序拼装
在本项目中,人机交互主要体现在鼠标单击上。需要获取按键的情况,就要在監听事件中增加相应的判断语句。
打开教科书配套资源中的“接福.py”
,找到相应的代码,仔细阅读并理解各语句的含义,在下面横线上用自然语言描述其对应的功能。if
event
.
type==pygame
.MOUSEBUT
TONDOWN:#__
#获取鼠标按下的坐标并记录在mousex
,
mousey中
mousex,
mousey=pygame
.
mouse.get.
pos()
#判断鼠标是否击中福字,本例中福字宽为60,高为70
if
mousex
in
range(x,x+60)
and
mousey
in
range(y,y+7O):score=score+5
最后,我们可以参照流程图组装各程序块并调试运行,也可以在Python中打开教科书配套资源中的“接福.py”
并运行。
虽然游戏项目已开发完成,但这款游戏还有不尽如人意的地方,如游戏难度无法调整等,请在下面的框中填写你对游戏的改进意见。
拓展训练
尝试给“接福”游戏设计一个难度策略以增加游戏的趣味性。
参考答案:
难度策略:分数越高,福字出现的速度越快,即:延时的时间减少。
import
pygame,sys,random
#导入模块
pygame.init()
#初始化
def
showfu(x,y):
#定义函数,在(x,y)位置显示福字
gift=pygame.image.load('fu.png')
#加载福字图像
screen.blit(gift,[x,y])
#将福字显示在(x,y)位置上
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])
#在窗口显示
#主程序开始
score=0
#变量初始化
mousex=0
mousey=0
t=800
#延时的时间初识为800
screen=pygame.display.set_mode([800,600])
#创建一个窗口
pygame.display.set_caption('接福')
#设置窗口标题
back=pygame.image.load('bj.jpg')
#加载背景图像
screen.blit(back,[0,0])
#将背景图显示在窗口
showscore(score)
#显示分数
x=random.randint(50,700)
#随机生成福字水平方向坐标
y=random.randint(50,500)
#随机生成福字垂直方向坐标
showfu(x,y)#在(x,y)位置显示福字
pygame.display.update()
#刷新窗口
while
True:
for
event
in
pygame.event.get():
#侦听并获取事件列表
if
event.type==pygame.QUIT:
#接收到退出事件后退出程序
sys.exit()
if
event.type==pygame.MOUSEBUTTONDOWN:
#侦听到鼠标点击事件
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
#加分
t=abs(800-5
score)
#分数越高,延时的时间越短,难度调整的策略
screen.blit(back,[0,0])
#将背景图显示在窗口
showscore(score)
#显示分数
x=random.randint(50,700)#随机生成福字水平方向坐标
y=random.randint(50,500)
#随机生成福字垂直方向坐标
showfu(x,y)#在(x,y)位置显示福字
pygame.display.update()
#刷新窗口
pygame.time.delay(t)
#延时
2、有N根小棒(N是偶数),每根小棒长1厘米,要将这些小棒拼成矩形,怎样拼才能
使其面积最大?请编程实现,输出最大面积。
例如:
N=10,有以下两种拼法,面积分别是4平方厘米和6平方厘米,按第2种拼法拼
得的矩形面积最大。
参考代码:
n=int(input('请输入小棒的数量:'))
max=0
if
n%2==0:
for
i
in
range(1,n):
s=i
(n/2-i)
if
s>max:max=s
print('最大面积是:',max)
else:print('请输入偶数!')
3选择
1.以下关于算法中输入、输出的描述正确的是(
)。
A.算法可以没有输入,表示该算法不涉及任何数据信息
B.算法可以没有输出,表示该算法运行结果为“无解”
C.算法必须要有输入,否则算法无法进行
D.算法至少要有一个输出
2.采用盲目搜索的方法,在搜索的过程中,对所得的结果逐一筛选,排除不符合要求的结果,保留那些符合要求的结果,这种方法叫做(
)。
A.解析法
B.递推法
C.枚举法
D.选择法
3.在软件的生命周期中,明确软件系统具备哪些功能的阶段是(
)。
A.可行性分析
B.需求分析
C.概要设计
D.详细设计
参考答案:
D
2.
C
3.
B
教学反思