编程题
第 1 题 问答题
报数游戏
题目说明
背景信息:
5个男生和3个女生,8个人围成一个圆圈,给定一个数字n (2 小于等于n 小于等于5)。从第一个开始依次报数,当报数为n时,这个人离开圆圈。然后下一个从1开始报数,再次报到m的人离开圆圈,如此循环进行游戏直至仅为5个人为止。请问游戏开始时,采用怎样的排法,才能使每次离开圆圈的都是女生,剩余的5人都是男生。
例如给定的数字为3时,每次报到3的人离开圆阔。
蓝色圆圈:男生,红色圆圈:女生。
编程实现
报数游戏 (初始由1开始顺时针报数)
具体要求:
1).点击绿旗,小猫说:“男生5人,女生3人,共8人”;
2).2秒后,小猫说:“报数为2”;
按照男生为蓝色,女生为红色,每次报到2的人离开圆圈的情况下,在复台中正确呈现男生与女生在此轮游戏中的初始位置,使得3轮报数后留下的5)都是男生;
3).2秒后,小猫说:“报数为3”;
按照男生为蓝色,女生为红色,每次报到3的人离开圆圈的情况下,在复台中正确呈现男生与女生在此轮游戏中的初始位置使得3轮报数后留下的5人都是男生;
4).2秒后,小猫说:“报数为4”;
按照男生为蓝色,女生为红色,每次报到4的人离开圆圈的情况下,在复台中正确呈现男生与女生在此轮游戏中的初始位置,使得3轮报数后留下的5人都是男生;
5).2秒后,小猫说:“报数为5”,
按照男生为蓝色,女生为红色,每次报到5的人离开圆圈的情况下,在舞台中正确呈现男生与女生在此轮游戏中的初始位置,使得3轮报数后留下的5人都是男生;
6).2秒后,程序结束。
接下来就是循环判断了,从第一个人开始报数,直到女生人数变成3为止,我们需要创建3个变量,分别命名为“女生人数”、“i"和"数
字”,如图所示:
其中,变量“i”表示计数器,是用于循环的,每次都从1开始,表示从第一个人开始报数。而变量"数字”则表示每个人报的数字,开始设为0,每报数一次,数字就增加1,如果数字等于目标数字n时,就需要重新设为0,此时,说明该位置的人是女生,需要将对应列表中的值修改为“女”,具体代码如图所示:
注意,这个自制积木是在小猫角色中来定义的。
2).小猫开始报数
排队的核心功能已经完成了,接下来,就可以让小猫角色开始进行报数了。游戏之前,需要先说"男生5人,女生3人,共8人",然后完成4次报数,这个可以使用循环来实现,代码如下:
代码不难,简要说明两点:
1).由于报数是2、3、4、5,它们是连续的数字,所以这里使用变量“报数”来表示,每循环一次,就将变量增加1,这样就可以通过循环来实现4次报数了;
2).每一轮完成报数后,列表中的数据就会变成5男3女了,此时需要让各个角色按照各自造型来排列。所以这里通过“广播诸神归位”指令向8个人物角色发送广播消息。
3).还原初始队形
在排队之前,8个人物角色都呈白色造型,当接收到广播x消息后,需要根据列表中的数据来切换相应的造型,如果是男生,就切换为蓝色造型,如果是男生,就切换为红色造型,这里以第一个人物角色为例,编写代码如下:
其它7个人物角色的代码基本一致,所不同的是,每个角色和列表中的不同项进行比较,这里就不再列出代码了。
第 2 题 问答题
统计字符串
题目说明
背景信息:
《(三国演义》是元末明初小说家罗贯中创作的长篇章回体历史演义小说,与《西游记》、《水浒传》、《红楼梦》并称为中国古典四大名著。编程实现:
对《三国演义》第一回原文进行数据处理,统计出现次数最多的5个汉字.
提示:
编程环境中已经预制一个列表名为“三国演义原文”,如下图所示,其中第一项存储着三国演义第一回文字。请注意务必不要删除这个列表.
具体要求
1).点击绿旗,小猫说“我要开始处理了!”2秒;
2).出现字符列表和次数列表,开始对三国原文进行处理,同时小猫一直说:“处理中....”(处理中不需要对文字使用数量进行排序);
3).等数据处理完毕后,小猫说:“现在开始排序”2秒;
4).次数列表中的数据按照从大到小的顺序进行排序(同时保证汉字与次数的数据一一对应),同时小猫说:“正在处理中”,
5).将出现最多的五个汉字与次数保存在列表中,同时将剩余的汉字与次数从列表中删除;
6).等待1秒后,小猫说:“处理完毕”2秒,程序终止。
注意,这里的三个自制积木目前都是空的,接下来,我们就需要分别来编写三个自制积木的具体代码了。
2).实现字符统计功能实现统计字符的逻辑比较简单,针对每次读取的字符,如果在列表中,则更新次数,否则插入到列表中,并在次数列表中增加次数,其次数为1。其代码如下:
这里的变量"max”用于保存最大的那个数字,在排序之前,为了确保它比列表中的任何一项都小,这里将它的初始值设为0,因为次数列表中的数字都要比0大,当然,你也可以设置为一个负数。旦找到最大数,就将最大数及其在列表中的编号记录下来,便于后续来交换位置。
4)删除列表数据
根据题目的描述,对于已经排好序的两个列表,我们只需要保留前5项,其代码如下:
注意,这里使用了一个小技巧,就是每次都删除列表的最后一项,每删除一项,列表的项目就减少一个,这样就可以重复删除列表项,
直到剩下前5项。
第 3 题 问答题
水中倒影
题目说明
编程实现:
水中倒影。
具体要求:
1).点击绿旗,角色、背景如图所示;
2).等待1秒后,画出小猫倒影 (使用画笔,且能看到绘制过程)
注意,为了确保倒影效果,扫描点要尽量小一点,通常就是1个像索大小,1个像索就等于Scratch中的1步。扫描过程是这样的:先将扫描点移到小猫左上方,然后自左至右进行第一行逐点扫描,第一行扫描完毕,接着又回到左边开始位置,同时v坐标下移一步,继续第二行逐点扫描,重复至整个小猫扫描完毕。所谓逐点扫描,就是一次移动1步,检测是否碰到小猫了,如果碰到小猫,说明这是一个有效打印点,可以使用变量将其坐标记录下来,然后发送“打印”广播,让画笔角色完成打印工作。
切换到扫描点角色,编写代码如下:
注意:这里使用“将虚像特效设定为100”指令的目的是不让扫描点角色在舞台上显示出来,有的同学会想,用“隐藏“指令不是更简单lb。
两个指令都可以让角色隐藏起来,但是使用隐藏指令后,就无法使用“碰到角色“指令来检测是否碰到小猫了,而使用虚像特效指令则不存在这个问题,这是很多Scratch游戏开发中都会用到的一个编程小技巧。2).逐层绘制小猫倒影
根据扫描点角色扫描得到的有效打印点,我们就可以在小猫下方绘制出相应的点,切换到pencil角色,编写代码如下:
代码很简单,对干倒影点来说。X坐标是相同的,关键点在于v坐标的确定,它是以水面作为对称轴的,水面处的V坐标是-66,所以这里的y坐标应该是”-132 -打印点y”。当然,如果你不熟悉对称轴坐标的计算,你也可以通过多次尝试找到倒影点y的坐标。点击绿旗,运行程序,就可以绘制出小猫的倒影了,只不过,这个过程有点慢,你可以使用加速模式,快速画出倒影效果。
第 4 题 问答题
奥特曼大战怪兽
题目说明
编程实现
奥特曼大战怪兽
具体要求:
1).点击绿旗,角色、背景如图所示;
2).等待1秒,怪兽说:“我要吃了你!! !”2秒;
3).等待1秒,奥特曼说:“动感光波”2秒;
4).奥特曼发射动感光波3次(怪兽被击中后有颜色变化)每次间隔0.5秒
5).等待1秒,怪兽逐渐变小旋转飞向舞台右上角后消失,同时说:“我还会回来的!!!”
这里的变量“打中次数”是用来记录光波击中怪兽的次数,这里将其初始值设为0。
2).奥特曼发射动感光波
怪兽要吃掉奥特曼,奥特曼当然不会坐以待毙了,1秒钟之后,它吼了一嗓子“动感光波”,然后连发3次动感光波,切换到奥特曼角色,编写代码如下:
简要说明两点:
.这里等待3秒,是因为怪兽说话占用了2秒,再加上等待的1秒,
.发射动感光波,其实就是克隆光波角色,此处直接选择在奥特曼角色中克隆光波角色,这是最省事的一种写法,也是一个常用的编程技巧。
3.光波击中奥特曼
一旦生成光波克隆体,它就从奥特曼所在位置开始向前移动,直到碰到怪兽。这是一个典型的运行编程场景,我们可以从运动的4要索
出发,即起点、方向、速度和终点4个方面考虑。起点就是奥特曼所在的位置,方向则是水平向右,可以使用“将x坐标增加10”指令,终点则是碰到怪兽,一旦碰到怪兽,需要给怪兽角色发送一个“击中”的广播消息,同时删除克隆体。
切换到光波角色,编写代码如下:
4).奥特曼逃跑
当光波击中怪兽时,怪兽有颜色变化,同时我们还需要更新击中的次数,如果次数达到3,怪兽就要逃跑了。怪兽逃跑的目标是舞台右上角,在逃跑过程中有旋转效果,同时逐渐变小。
角色在旋转的时候,方向会发生变化,所以此处的运动不能使用“面向方向+移动"的组合指令。对于已知目标的移动,使用“在1秒内滑行到x,y”指令相对比较简单,不过要注意,该指令是独占模式,这就意味着在滑行过程中,就无法旋转了。要想怪兽在滑行的同时旋转,我们可以使用多线程的编程思想,让怪兽角色兵分两路,具体实现就是利用事件广播机制,给自己发送一个广播消息。
切换到怪兽角色,增加代码如下
至此,整个作品就创作完成了,是时候来欣赏自己创作的奥特曼大战怪兽游戏了
第 5 题 问答题
帆船运动
题目要求
编程实现:
帆船运动。
具体要求
1).点击绿旗,角色、背景如图所示
2).按下键盘的上键,帆船向上移动,松开上键帆船停止移动 (不能移出水面)
3).按下键盘的下键,帆船向下移动,松开下键帆船停止移动 (不能移出水面)
4).按下键盘的左键,帆船向左移动,松开左键帆船停止移动 (不能移出舞台)
5).按下键盘的右键,帆船向右移动,松开右键帆船停止移动 (不能移出舞台)
对应的,其它3个方向也需要做相似的处理,其代码如下
这里对“如果..那么...否则“指令做了嵌套处理,是为了确保在任意时刻,帆船只能朝一个方向运动,这就避免了用户同时按下两个方向键的异常情况。
第6题问答题
热气球
题目说明
编程实现:
上升的热气球。
具体要求:
1).点击绿旗,角色、背景如图所示;
2).等待1秒,热气球向舞台上方移动 (能看到移动过程)
3).热气球碰到舞台上方停止移动,等待1秒后,热气球从舞台上方飞出。
第 7 题 问答题
蜘蛛侠大战灭霸
题目说明
背景信息
无限手套,是灭霸用于控制作为无限宝石的载体。将灵魂宝石,力量宝石,时间宝石,空间宝石,现实宝石,心灵宝石,这六块宝石聚集在一起持有者就拥有让所有现实灭亡的能力。
编程实现:
灭霸想要毁灭世界,蜘蛛侠只剩下10秒时间来阻止无限手套充能。如果无限手套上的6块宝石都被依次点亮,灭霸获得胜利,如果没有成功点亮全部六块宝石,蜘蛛侠获得胜利。
具体要求:
1).点击绿旗,角色、背景如图所示(注意:规软侠手中的蜘蛛丝是由画笔模块绘制出的白色线段,灭霸持续说:“无限手套充能中...);
2).用键盘的上、下键,控制蜘蛛侠上、下移动 (蜘蛛丝根据蜘蛛侠的移动伸长或缩短)
3).红色充能进度条开始缓慢增加,进度条和数值每秒增加10%;
4).六块能力宝石随进度条依次点亮(对应进度数值为10%,30%,50%,70%,90%,100%)
5.按下空格键,从蜘蛛侠的另一只手发射蜘蛛网,蜘蛛网呈抛物线移动(提示:水平速度不变,垂直速度不断变化);
6).当蜘蛛网落在灭霸的身上时,能量进度条和数值都会暂停增长1秒;
7).游戏时间为10秒,在舞台左上角显示,并准确呈现出倒计时功能(依次显示10、9、8.....2、1、0);
8).在10秒钟倒计时结束时,如果无限手套没有充能到100%,灭霸消失,进度条停止增加,蜘蛛侠说:“我胜利了!!!"
9).在10秒钟内,如果无限手套充能到100%,蜘蛛侠从舞台上消失,倒计时停止,灭霸说:“我胜利了”
在点击绿旗以及按住上下方向键的时候,分别发送了一个“绘制蜘蛛丝”的广播消息。切换到画笔角色,完成蜘蛛丝的绘制,编写代码如下:
绘制的方法也非常简单,就是每次擦除之前的所有内容,然后将画笔移到蜘蛛侠手的位置落笔,接着移动画笔到舞台最上方,最后抬笔即可。
需要注意的是,手的位置并不等于蜘蛛侠造型中心的位置,需要进行相应的调整,这里向左移动了40步,向上移动了70步》。在点击绿旗的时候,灭霸位于舞台右下方,并且持续说:“无限手套充能中...”,切换到灭霸角色,编写代码如下:
2).发射蜘蛛网
当按下空格键时,蜘蛛侠会发射一个蜘蛛网,根据前面的思路分析,使用克隆即可。在蜘蛛快绿旗下的重复代码块中,增加如下代码:
这里直接在蜘蛛快角色中克隆蜘蛛网角色,并没有使用广播消息机制,其目的是为了避免蜘蛛网克隆体在接收到广播时也会克隆自己从
而出现大量蜘蛛网的奇怪现象。一旦有了克隆体,蜘妹网就开始抛物线运动,所谓的抛物线运动,其实就是x方向和y方向同时运动的叠加效果,只需要保持水平速度不变,垂直速度不断变化即可。
切换到蜘蛛网角色,编写代码如下:
当蜘蛛网克隆体碰到舞台边缘的时候,就删除此克隆体,这里并没有考虑碰到灭霸的情况,稍后我们会单独处理。
3).进度条增加
这里的进度条每隔1秒就增加10%,直到进度为100%为止,由于在Scratch中,百分比是不能增加的,因此,我们需要使用两个变量个变量表示进度 (没有%) ,另一个变量表示进度值 (有%)。在克隆过程中,还需要注意,如果灭霸被蜘妹网击中了,进度条和能力值要暂停1秒钟。我们可以使用一个变量表示是否击中灭霸,在细蛛网碰到灭霸时设为1,1秒后再设为0,在蜘蛛顾角色中编写代码如下:
再切换到能量块角色,编写代码如下
4).点亮宝石
有了进度值,接着就可以实现点亮宝石的效果了,我们以灵魂宝石为例,首先要设置好宝石的位置,并使用亮度特效将其设置为黑色
当进度为10时,清除特效,就可以点亮宝石了,代码如下:
其余的5颗宝石角色代码基本一样,这里就不再列出了
5).倒计时及结束
倒计时也比较简单,新建变量“倒计时”,初始值设为10,每隔1秒减1,直到减为0。切换到蜘蛛侠角色,绵写代码如下:
对于获胜的判断,我们有一个非常简单的办法,如果倒计时到0了,进度还没有到100,则说明蜘妹侠获胜。相应的,如果进度增加到100,但是倒计时没有减为0,则说明灭霸获胜。
为了确保上述逻辑的正确性,一旦广播“快辣快胜利"或者“灭霸胜利"时,需要立刻停止对方的代码。在上述代码中,蜘蛛侠在接收到“灭霸胜利”的广播时,就立刻停止蜘蛛侠角色的所有代码,这样也就停止了倒计时功能。相应的,在能量块角色中,我们也需要做相同的处理,切换到能量块角色中,增加代码如下:
如此一来,一旦蜘蛛侠获胜,则能立刻所有的代码立刻停止执行。
对于灭霸角色,如果灭霸获胜,它会说“我胜利了“,如果失败,则需要隐藏,对应的,切换到灭霸角色,增加代码如下:
至此,整个作品就创作完成了,你可以来两盘蜘蛛侠大战灭霸了,轻松一下。
第8题 问答题
组合图形
题目说明
编程实现
组合图形:由边长为40的方砖,拼成一个正方形。
例如,方砖为:
具体要求:
1).点击绿旗,角色、背景如图所示,
2).等待1秒后,出现询问框说:“输入正方形一条边上的方砖数量”;
第 9 题 问答题
打棒球
题目说明
背景信息:
在棒球比赛中,本垒打是指击球员将对方来球击出后《通常击出外野护档),击球员依次跑过一、二、二垒并安全回到本垒的进攻方法,是棒球比赛中非常精彩的高潮瞬间。
编程实现:
呈现一次精彩绝伦的本垒打
具体要求:
1).点击绿旗,角色、背景如图所示,
2).按下空格键,自舞台左侧抛出棒球,棒球向舞台右侧水平匀速移动;
3).当棒球飞到下图的位置,击球员做出挥棒动作,刚好打到棒球:
4).棒球被击飞,向左上角移动,且移动中棒球变大 (有移动变大效果)
5).3秒后,棒球消失,击球员按照一垒-二垒-三垒的顺序跑垒 (逆时针方向,参见视频),最终回到本垒,程序结束。
击球员挥棒后,会碰到棒球,因此我们可以在棒球角色中检测是否碰到击球员,当碰到击球员后,让棒球向左上方移动直至消失、在移
动的过程中慢慢变大。
切换到棒球角色,添加代码如下:
由于“在1秒内滑行X。V“指令是独占模式,也就是在移动过程中不能执行其它指令,因此。这里采取了兵分两路的策略,在滑行之前.
给自己发送一个“变大”的广播消息。
当棒球飞出舞台消失后,击球员该跑垒了,所以这里发送了一个“跑垒”的广播消息。3).击球员跑垒
当击球员接收到“跑垒"广播后,依次跑过一、二、三垒并安全回到本垒,其实就是3次滑行动作,只需要确定好每一次滑行的坐标即可,切换到击球员角色,编写代码如下:
问答题第 10题
流星滑落
题目说明
编程实现
夜幕降临,空中滑落一颗流星。
具体要求:
1).点击绿旗,背景如图所示
2).1秒后,天色渐渐变暗1秒;
3).从舞台左上方出现一颗流星,斜向右侧方向移动到舞台中地平线逐渐消失(能看到流星逐渐变大和移动的过程)
这里强调一下虚像的设置,所谓虚像就是指角色的透明度,其范围为0-100,虚像值为0,即透明度为0,也就是完全不透明,随着虚像值的增加,角色越来越模糊了,当虚像值为100即透明度为100时,角色就是完全透明的,我们也就看不到角色了。在Scratch中,虚像通常应用在下面两大场景:
1.实现角色的渐变效果,包括逐渐显示和逐渐隐藏,本题刚好属于这一类;
(2.用于检测角色的判断,通常以辅助角色的形式出现,在游戏编程中应用较多。