编程题
第 1 题 问答题
击鼓游戏
题目说明
准备工作:
将复台背景设置为“spotight-stage”,添加一个“Belerina"角色、两个“Drum1"角色和两个“Drum2”角色,并按照图 7-1 的位置摆放。角色“Beleina"的造型和颜色的设置须如图 7-1所示,五个造型的裙子颜色顺序为:白、红、蓝、绿、黄;四个鼓的额色分别设置为:红、蓝、绿、黄。
编程实现:
复台中央的小女孩会随机变换造型及衣服颜色4次,游戏玩家要记住衣服颜色出现顺序,并按顺序敲击相应额色的鼓,颜色顺序正确则可得1分,并开
始下一轮变换颜色,直到某一轮敲鼓顺序错误则游戏结束,更新最高得分。
具体要求:
1、每次点击绿旗后,舞台左上角的“得分”(显示位置见图-2) 都为 0;2、小女孩为造型 1 (白色裙子) ,并说“请观察颜色序列!”2 秒钟 (图-2) ;
3、小女孩切换 4 次造型,每次都是随机切换为造型 2 到造型 5 中的一个(这 4次切换的造型之间允许重复);而且第一次切换后要说"1“1 秒钟,第次说“2”1 秒钟,第三次说“3”1 秒钟,第四次说“4”1 秒钟 (图-3 至图-6) ;
4、在4 次造型切换完成后,小女孩切换回造型 1(白色裙子)》,表示一轮切换结束。小女孩说:“请按顺序点击相应额色鼓!”(图-7);5、游戏玩家根据刚刚小女孩 4 次切换造型中衣服颜色的顺序,依次点击(敲击)相应颜色的鼓,在敲击的第一次鼓后小女孩说“1”,第二次后说“2”,第二次后说3”,第四次后说“4”,如果玩家敲击的顺序与衣服颜色切换的顺序相一致,小女孩就说"正确!"2 秒钟,且得分加 1(图-8),并从步夏 2开始下一轮游戏;如果敲击的顺序错误,小女孩就说:“游戏结束”,并根据当前得分的情况更新复台右上角的最高得分(显示位置如图·-9 所示),程序结束。
将程序保存到桌面,命名为“7.sb2”
查看答案
答案
编程实现
根据题目描述,我们可以分3步来编写程序:
女孩随机切换造型
击鼓并记录顺序
判断游戏是否成功
1.女孩随机切换造型
首先创建两个列表,命名为"额色顺序”和"敲鼓顺序”,再创建一个变量"次数”,用来表示女孩切换造型的次数,后面还可以用来表示击鼓的次数,游戏开始时,将列表清空,并将次数设置为1
接下来,将女孩切换为白色造型,说“请观察颜色序列",然后重复4次随机切换造型,并将每次造型的名称保存到列表中,每切换一次造型,女孩都说出当前的次数。
造型切换完毕,女孩又切回到白色造型,并说“请按顺序点击相应额色鼓!”,同时将次数清零。对应的代码如下所示:
需要注意的是,女孩一共有5个造型,但我们只需要在红蓝绿黄四种颜色之间切换,所以这里使用了“在2和5之间取随机数“指令。保存到列表中的是女孩造型的名称,也就是红、蓝、绿、黄。
2.击鼓并记录顺序
接下来玩家要开始击鼓了,击鼓的时候需要完成两件事情,一是将当前鼓的颜色保存到列衷“敲鼓顺序”中,二是女孩说出当前击鼓的次
数。
4个鼓角色的功能基本一样,这里以最左边的红色鼓为例,编写代码如下:
需要说明的是,这里再次用到了变量“次数”,这就是为什么要在女孩切换完造型之后将变量清零的原因。每次敲完鼓之后,女孩都要说出当前敲击的次数,所以这里发送了一个“敲鼓”的广播消息。其它3个鼓角色的代码基本一样,唯一不同的是向列表中加入的颜色,分别是蓝、绿、黄。当女孩角色接收到“敲鼓”的广播消息后,说出次数即可,代码如下所示:
3.判断游戏是否成功当玩家击鼓4次之后,就要判断游戏是否成功了,我们可以在女孩说出次数之后进行判断,如果次数=4,说明已经敲完鼓了判断的依据前面已经说过了,直接判断两个列表是否相等即可,如果相等,将得分加1,并说正确,然后开始下一轮游戏。如果错误,则根据情况设置最高分,并说错误,然后停止全部脚本,这部分的代码如下所示:
在上面的代码中,使用了两个变量,一个是“得分”,一个是“最高得分”,在游戏开始时,需要将得分设置为0,而最高得分则不能设置
初始值的。
重新开始游戏,这里做了一个巧妙的处理,就是直接发送了一个"开始"的广播消息,同时将原来绿旗下面的代码一分为二,如图所示:
注意,这里并没有增加新的代码,只是将绿旗代码一分为二,通过广播机制将二者串联起来,这样就可以在游戏成功之后,再次发送“开始”广播,从而实现多轮游戏了,这是一个非常巧妙而又重要的编程技巧,希望你能够好好体会。
第 2 题 问答题
列表排序
题目说明
绵程实现:
老师给小猫出了一道题: 在列表 1 中生成 5 个在 1~99 范围内的随机整数,然后按照从大到小的顺序将它们依次移到列表 2 中。
例如:在列表 1 中随机生成的整数依次是“12,3,1,13,17”,在处理之后列表 2 中的整数依次是“17,13,12,3,1”。
具体要求:1、每次点击绿旗后,在屏幕中都显示如图-1 所示的列表 1 和列表 2,且在列表 1 中随机生成 5 个在 1-99范围内的随机整数,而列表 2 中内容为
空。然后小猫说“5 秒钟后开始处理”,并等待 5 秒钟;2、处理数据时,每间隔 1 秒钟,都将列表 1 中当前最大的一个数字移动到列表 2 中,注意: 是移动,不是复制;3、当处理到列表 1 为空后,列表 2 中的数据应从大到小排列,如图-2 所示,然后小猫说“处理完啦。”2秒钟,然后程序结束。将程序保存到桌面,命名为“6.sb2”。
2.依次将数据移到列表2中
根据前面的思路分析,我们先创建两个变量,分别命名为”max“和”i“,如图:
其中,max表示最大数字。i是循环计数器,通过可以取出列表中的每一个数字。我们先来完成一轮比较及移动操作,根据流程图,统
写代码
将最大数字加入到列表2中比较简单,值得注意的是如何从列表1中删除最大数。此处使用了组合指令,其中一个指令是”列表中的第个xx的编号”,通过该指令,我们就可以找到最大数对应的编号,有了编号,则除列表项就非常简单了,只需要使用指令"出除列表的第x项“即可。
还有一点需要说明,由于max是列表的第1项,所以我们是从第2项开始比较,所以的初始值设为了2,总的比较次数也减少一次,即”列表1的项目数 - 1“次。
列表一共有5个数字,所以,我们需要把这个比较重复5次,每次间隔1秒,排序完毕,说一句“处理完啦!“,代码如下:
第 3 题 问答题
自动驾驶
题目说明
编程实现:
将舞台背景改为“blue-sky”背景,在舞台上设置 1 个小车“Car-Bug”角色,并保留默认的小猫角色。小车从舞台左侧向右行驶。当小车快要碰到小猫时,小车能自动停止移动,而小猫被吓到了
具体要求:
1、每次点击绿旗后,舞台背景和小车角色的初始位置都要如下图所示,小猫角色的 坐标值为从 100 到200 范围内的一个随机数值,y 坐标参考图中位置来大致设置;
2、小车开始自动向右行驶。小猫的位置则始终保持不动;
3、小车在行驶到车头距离小猫一个车身范围以内时,小车能自动停止,视觉观察时,小车不能碰到小猫,两者之间留有一段距离。如下图所示:
4、在小车停下后,小猫说“哇!!!”2 秒钟,程序结束。将程序保存到桌面,命名为“5.sb2”
由于舞台较小,这里将小猫的大小设置为75,这个不是必须的,你可以设置任意大小。
2.小汽车行驶并自动停车
小汽车从舞台左边开始向右移动,需要先设置好初始位置,然后重复执行右移,很明显,此处使用直到循环最为简单,代码如下:
简单说明一下,这里将小车设置为50,此时一个车身的距离大概是120步,你可以根据实际情况来确定这个距离。当小车自动停止后给小猫角色发送了一个”停车“的广播消息。
3.小猫说唯
小猫在接收到”停车“广播消息后,说了一声哇,切换到小猫角色,编写代码如下:
至此,整个代码就编写完毕,你可以反复执行程序,测试一下自动驾驶功能,是不是还挺智能的.
第 4 题 问答题
折扇
题目说明
编程实现:
以坐标(0,0)点为中心绘制一把扇子: 扇面和扇把都是三分之一圆,扇面的半径为 100 左右,扇把的半径为 20 左右。
具体要求:
1、每次点击绿旗后,舞台背景为白色,舞台上不显示任何内容。然后连贯地画出扇子图案,中间不可停顿;
2、画出的扇子颜色为黑色,画笔粗细为 1,扇面和扇把的张角都为三分之一圆(120 度),扇面的半径为 100 左右,扇把的半径为 20 左右:
3、坐标 (0,0) 点是构成扇子的这些线段的相交点。
将程序保存到桌面,命名为“4.sb2”。
2.绘制折扇
首先要确定好旋转点和绘制第一条直线的方法,如图:
从图中可以看出,旋转点处于舞台下方,y坐标大概为-100,X坐标直接设置为0即可。而绘制第一条线的方向是左上方,整个扇面为120度,根据对称原理,左右各占60度,所以初始方向可以设置为-60。然后就是要确定扇面和扇把的长度了,这里我将扇面长度设置为200步,扇把长度设置为30步,接下来就可以开始绘制了,具体过程也比较简单,就是让小猫沿着-60度方向移动200步,然后反向移动230步,这样第一条直线就绘制完成了,接着继续移动30步,这样小猫就回到旋转点了,此时需要右转1度,重复此过程120次即可,具体的代码如下:
需要说明一点,就是这里的落笔和抬笔,为了确保不重复画线,在此处我只让反向移到230步的时候才落笔。在实际编程的时候,重复
绘制问题也是可以的。
第 5 题 问答题
计算游泳时间
题目说明
编程实现
你要参加运动会,每天都刻苦练习游泳,并给自己的游泳时间做了精确的计时(本题中的计时都按 24 小时制计算)。你只要说出自己从 a 时b 分直游泳到当天的 c 时d 分,你的小鱼教练就能计算出你这天一共游了多少时间。你的小鱼教练是怎么算出来的呢?具体要求:
1、程序开始运行时,小鱼教练询问游泳开始时间(分别询问 24 小时制的时和分)和结束时间(分别询问24 小时制的时和分)。
2、小鱼教练计算并说出游了多长时间。但如果你输入的结束时间早于开始时间,小鱼教练就会说“输入错误!结束时间早于开始时间”,程序结束.
将程序保存到桌面,命名为“3.sb2”。
2.计算游泳时间
接下来就需要换算时间,统一单位,这是本题的核心算法。为了方便,可以创建一个变量"总分钟数“,用于保存开始时间和结束时间相差的总分钟数,代码也比较简单,就是将小时乘以60,再加上分钟数,然后相减,代码如下:
对于计算得到的总分钟数,可能会出现两种情况,一是小于0,这说明你输入的结束时间早于开始时间,小鱼教练要给出输入错误的提示;二是大于0,此时则需要将总分钟数再转换成小时和分钟,然后组成一句完整的话,反馈给玩家,这部分的代码如下:
为了方便,这里创建了两个变量,分别是“小时“和“分钟“,如果总分钟数 >0,就说出小时和分钟,不过需要使用连接运算符,连接成句完整的话。
将总分钟数转换成小时和分钟,这里用到了数学中的余数知识,整数部分就是小时数,而小数部分则是分钟数。
将上面的3段代码连在一起,程序就可以正常工作了。
第 6 题 问答题
小猫打螃蟹
题目说明
准备工作
背景改为白色背景,保留小猫角色,导入角色库中角色螃蟹“Crab”;自行绘制子弹角色,颜色和大小可自行设定
编程实现:只在舞台左下角的小猫,发射子弹射击一只在舞台顶部的水平移动的螃蟹,击中螃蟹 5 次后程序结束!
具体要求:
1、程序运行后,小猫一直固定在舞台左下角,螃鳖在舞台上部进行最左->最右->最左的循环移动。注意:移动速度不要太快2、按下空格键,小猫发射一颗子弹,子弹须沿着里标方向发射出去,碰到螃望或者舞台边缘后消失。3、子弹击中螃蟹 5 次后,小猫说:“我赢啦”2 秒钟,游戏结束。要求击中的次数在舞台的左上角实时显示将程序保存到桌面,命名为“2.sb2”
这里使用了“将旋转方式设为左右翻转指令",目的是避免螃蟹在反弹的时候出现头下脚上的效果。至于螃鳖移动的速度,我将它设置为6,不快不慢,你可以修改成其它的值,速度越快,游戏难度就越大。
2.发射子弹
在子弹角色中,需要判断子弹是否碰到螃鳌并记录其次数,因此,我们可以先创建好变量“次数,”,并设置其初始值,代码如下·
当按下空格键时,开始发射子弹,这是典型的运动编程,根据运动编程4要索模型,我们需要确定好角色的起点、方向、速度和终点。子弹角色的起点是小猫所处位置,方向则是沿着累标方向,速度就是移动的步数,而终点,这里有两个,一个是舞台边缘,另一个则是螃蟹所在位置。在这种情况下,建议先不考虑碰到螃蟹的情况,也就是只考虑子弹自己的运动,对应的代码如下:
接下来再考虑碰到螃蟹的情况,是否碰到螃蟹是在子弹运动过程中,所以可以直接在循环中进行判断,增加代码如下:
之所以分两步来编写代码,是为了让你更好地理解编写代码背后的逻辑和思路。
3.小猫判断游戏获胜
小猫角色在舞台下方静止不动,只需要设置好其坐标即可,然后需要判断次数是否等于5,通常的方法是使用“重复执行“+"如果...那么"指令。其实,还有一种更为简单的方法,就是使用“等待条件”指令,对应的代码如下:
需要说明两点:
1.这里之所以添加了一个“等待0.1秒”指令,是避免再次点击绿旗时,直接说“我赢啦”,
2.“等待条件”指令只适合于一次性判断,如果是多次判断,则需要结合循环指令了。
第7题问答题
女孩顶球
题目说明
准备工作:
导入角色库中的两个角色小女孩“Anna”和足球“Ball-Soccer"
编程实现:
小女孩正在表演用头托住足球。为了把足球一直托在头顶,小女孩需要不停地晃动双手。小女孩还可以跟着望标一起移动。
具体要求:
1、程序运行后,小女孩要跟随鼠标一起移动;
2、小女孩可以不停地切换造型 (切换造型的间隔时间参考值为 0.2 秒) ,
3、无论小女孩是否移动,足球都始终处于小女孩的头顶。不用考虑足球是否追挡住小女孩的头部,只要靠着就可以,参考下图所示。
在移动的同时,女孩不停的切换造型,这可以使用“下一个造型“指令,很多同学毫不犹豫的写出如下代码:
执行这段代码,会发现女孩切换造型的速度太快,于是又增加了一个“等待1秒“指令,如下:
再次执行代码,又出现一个奇怪的现象,女孩的反应有些迟钝,这是什么情况?仔细想想,也不难理解,当增加了“等待0.2秒“指令后,女孩每一次移到黑标指针位置后,需要等待0.2秒,才会再次移到凰标指针位置,这就造成了卡顿现象。解决方法也比较简单,就是使用两个绿旗代码块,将移动和切换造型的代码分开同步运行,互不干扰,这就是编程中的多线程,代码如下:
实际上,在Scratch中经常采用多线程的编程实现,在一个角色中编写多个绿旗代码块.
2.足球位于女孩头顶
对于足球角色来说,每次移到女孩角色位置即可,可编写代码如下:
执行代码,结果如下:
足球位于女孩的腰部,你知道这是为什么吗? 原因很简单,就是将足球移动女孩角色位置,其实是将足球角色的造型中心和女孩的造型
中心重叠起来,而女孩的造型中心刚好是在腰部。要将足球放到女孩头顶,可以将足球在当前位置向上移动一定距离(大概100步)即可,因此,我们可以在每次移到女孩所在位置的同时,将y坐标增加100,代码如下: