项目18 童 话 世 界 有一只小兔,每天都过得很不开心,为一些小事烦恼,比 如妈妈不让它吃太多胡萝卜,不让它和别的小兔一起玩儿。有 一天,小兔离开家到森林里玩耍,它会遇到什么事呢? 本项目学习与变量相关的知识,学习新建变量、用变量 统计分数、变量的比较等,相关的新积木包括“重复执行直 到**”、运算符类的积木,继续巩固练习循环执行、克隆、改 变大小等学习过的编程知识和方法。在学习过程中,通过分析 任务要求,理出思路,编写代码实现自己的想法。 Dzjzw.indd 40 2024/9/10 17:00:48 项目18 童话世界 41 任务18.1 小兔进城堡 小兔看到一座城堡,开心地跑过去。它从舞台左下角向城堡门口奔跑, 越跑越远,身影越来越小,最终消失在城堡入口处。单击“运行”按钮,运 行程序,呈现出渐行渐远的动画效果。 1 . 选择背景和角色 根据任务要求,选择城堡为背景,小兔为角色。在背景库中选择castle2 为舞台背景,在角色库中选择Hare(野兔)作为角色,参考图18-1。 图18-1 “小兔城堡”舞台 2 . 编写控制程序 舞台上通往城堡的路从左下方向右上方延伸,很明显,这不是之前设定 过的水平或垂直方向。“小兔”默认方向是90o,想要沿着这条路跑向城堡, 需要调整其移动方向。“小兔”渐行渐远,跑到城堡门口时身影消失,程序 Dzjzw.indd 41 2024/9/10 17:00:48 42 图形化趣味编程(下) 结束。 根据以上分析,将控制程序分为两部分,即初始化和跑向城堡。 (1)“小兔”的初始化。 初始化内容包括“小兔”的大小、起始坐标位置和面向方向。 因为起始位置和面向方向这两个参数是互相影响的,所以先确定了初始 位置,调试时再调整面向方向,最终保证“小兔”恰好跑到城堡大门口(“小 兔”从起始位置跑向城堡大门是直线运动)。“小兔”朝着右上方跑去,面向 方向的角度一定是小于90°的,可暂定为70°,如图18-2 所示。 (2)“小兔”奔跑。 仔细思考,分析出奔跑的过程包括跑向“城堡”、到达“城堡门口”、消 失。其中,跑向“城堡”是一个重复的过程,有造型和大小的变化,在奔跑 中身影越来越小。消失就是角色被隐藏,而且是到达城堡门口时。 ①重复执行。“渐行渐远,看起来身影也越来越小,最后消失”,这个 过程是一个有条件的重复过程,而不是简单地循环执行。循环控制使用“重 复执行直到**”积木,如图18-3 所示。 图18-2 “小兔”初始化程序图18-3 “重复执行直到**”指令 这块积木可以实现内部代码有条件地重复执行,指令中的六边形区域是 用来放置条件积木的。意思是,重复执行积木内部区域的代码,直到条件满 足时停止执行。即条件满足时,就不再执行内部代码。拖曳此积木至编程区, 如图18-4 所示。 ②跑向“城堡”。“重复执行直到**”指令内部嵌入的代码就是跑向“城 堡”的动作。积木功能包括移动、造型变化、等待时间、变小。实现这些功 能的代码在之前的项目中都学习和使用过。从指令列表中找到这些积木拖曳 Dzjzw.indd 42 2024/9/10 17:00:48 项目18 童话世界 43 至编程区,并修改参数,完成后如图18-5 所示。 图18-4 使用重复执行图18-5 增加奔跑过程 单击“运行”按钮,观察运行结果。可以看到,“小兔”从起始位置跑 向终点位置(“城堡大门”),身影逐渐变小,最终消失在舞台边缘而不是“城 堡大门口”。这是因为还没有设置“小兔”消失的条件,也就是重复执行积 木中的条件。 ③到达“城堡门口”。到达“城堡门口”是重复执行结束的条件,应该 如何判断呢?按住鼠标左键拖曳“小兔”从起点位置至终点位置,就会发现 角色移动时其坐标值是不断变化的,到达终点位置的“小兔”的坐标值大约 是(170,20),超过这个坐标值就要停止移动。比较x 坐标值或者y坐标值 就可以判断“小兔”是否到达终点了。 本任务使用x 坐标值进行比较。x 坐标>170,作为到达“城堡”的条件, 也就是重复执行积木中的条件。 “x 坐标”积木在运动类模块中,如图18-6 所示。数值比较指令有3 个, 分别是大于、小于和等于,在运算符类模块中,如图18-7 所示,积木形状 都是六边形,符号两边的参数是可以修改的。 编辑比较类积木,拖曳“大于”比较积木块至编程区,再拖曳“x 坐标” 积木为左侧参数,将右侧参数设置为170,如图18-8 所示。 Dzjzw.indd 43 2024/9/10 17:00:48 44 图形化趣味编程(下) 图18-6 “x 坐标”积木图18-7 比较类积木 单击“运行”按钮,观察运行结果。可以看到,“小兔”跑向“城堡”, 大约在“城堡门口”的位置停止了,并没有消失。 停止了,说明重复执行的结束条件设置正确,符合预期。只要使用“隐 藏”积木增加身影消失功能即可。在程序的末尾使用了隐藏指令,就要在初 始化程序中使用显示指令,以便再次运行程序时,能够观察到角色,更新初 始化部分的程序,最终程序参考图18-9。 图18-8 设置重复条件图18-9 “小兔进城堡”代码 3 . 整体调试 程序编写完成,单击“运行”按钮,开始程序的整体运行,检测编写的 程序是否能够实现任务中的全部要求呢? Dzjzw.indd 44 2024/9/10 17:00:49 项目18 童话世界 45 (1)确定面向方向。 单击“运行”按钮,观察运行结果。发现“小兔”向前奔跑,身影越来越小, 可是却停止在大门略靠上方的位置。这说明设置的“面向方向”数值偏小, 适当增加数值即可,如设置为73,再次单击“运行”按钮,观察运行结果。 反复调试,直到“小兔”恰好停止并消失在“大门”位置。 (2)改变起始位置。 如果改变了起始位置,需要重新调试“面向方向”,以保证“小兔”能 够准确跑到终点坐标。 任务18.2 草莓小兔 小兔进入城堡,发现城堡里面是一个美丽的花园,到处都是五彩缤纷的 花草树木。突然,天空中落下很多红红的果子,它小心地尝了尝,是草莓酸 酸甜甜的味道。 通过编程模拟小兔吃草莓的动画场景。单击“运行”按钮,游戏开始, 舞台上随机出现一颗颗草莓,使用方向按键控制小兔移动,每吃到1 颗草莓 得1 分,这颗草莓会消失。单击“停止”按钮停止游戏,或者得分达到50 分停止游戏。 1 . 选择背景和角色 编写代码之前先进行舞台布置,包括选择背景和角色,并进行简单设置。 从背景库中选择Pathway 为背景图片,从角色控制中选择Hare 和“草莓”为角色。 程序执行时,两个角色都没有大小的变化,经过测试,将草莓角色大小 修改为30,Hare 角色大小修改为70,这样的比例看起来会比较协调,完成 后的舞台参考图如图18-10 所示。 2 . 编写控制代码 分别为“小兔”和“草莓”这两个角色编写控制代码。“小兔”跳跃控 Dzjzw.indd 45 2024/9/10 17:00:49 46 图形化趣味编程(下) 制比较简单,可以参照之前学习过的使用键盘控制角色移动的内容。“草莓” 的控制包括克隆自己,克隆启动时的得分和隐藏,以及达到50 分时停止游戏。 (1)“小兔”的代码。 “小兔”的动作是上、下、左、右移动。在之前的任务中,编写过很多 类似的动作方式,通过键盘上的4 个方向按键来实现。 单击小兔角色图标,进入代码编辑画面,编写程序参考图18-11 。可以 使用“移动”积木或者“坐标增加”积木,按照自己熟悉的方式编写,只要 能实现同样的动作就可以。 图18-11 小兔角色动作代码 图18-10 草莓小兔舞台 Dzjzw.indd 46 2024/9/10 17:00:49 项目18 童话世界 47 初始化中程序中将旋转方式设为“左右翻转”,然后测试一下小兔角色 的动作。按下向右键,小兔角色向右跳跃奔跑;按下向左键,小兔角色向左 奔跑跳跃;按下向上键,小兔在空中奔跑;按下向下键,小兔向地面奔跑。 (2)草莓角色的代码。 在任务11.1 中,学习过用克隆指令实现繁星满天的舞台效果。想要舞 台上呈现布满“草莓”的效果,方法类似。当单击“运行”按钮时,“草莓” 开始克隆,并在舞台上随机显示。此外,该角色的控制还包括得分统计和停 止游戏。 ①“草莓”克隆。进入草莓角色代码编辑画面,编写“草莓”的控制程 序。首先,编写程序,让“草莓”每隔1 秒克隆自己,并移到舞台的随机位 置,如图18-12(a)所示。 “草莓”出现了,“小兔”跳跃着去吃草莓。如果“草莓”碰到“小兔” 就隐藏,得分+1。第一块积木使用“当作为克隆体启动时”,碰到小兔角色时, 就消失(隐藏),如图18-12(b)所示。 图18-12 草莓角色的代码 ②得分统计。使用变量进行得分统计。在模块列表中单击“变量”模块, 显示相应的积木列表,如图18-13 所示,列表中没有“得分”这个变量,需 要新建变量。 单击图18-13 中的“新建变量”,弹出“新建变量”对话框,如图18-14 所示,输入变量名为“得分”,并选择“适用于所有角色”,单击“确定”按 Dzjzw.indd 47 2024/9/10 17:00:50 48 图形化趣味编程(下) 钮完成并退出设置。 图18-13 变量模块图18-14 输入变量名 完成后,在变量列表中可以看到以“得分”命名的变量,并默认选中, 如图18-15 所示。同时,在舞台左上方会显示得分数值,初始值为0。 草莓角色开始克隆时需要将得分设置为0,使用“设置得分的值为0” 积木。碰到小兔角色得分增加1,使用“将得分增加1”积木块,分别拖 曳至图18-12 所示的代码中,为程序增加得分统计功能,完成后的程序如 图18-16 所示。 图18-15 新建“得分”变量图18-16 增加得分功能 ③设置得分上限。如果不单击“停止”按钮,这个游戏可以一直玩下去, 理论上得分将会无限大。 Dzjzw.indd 48 2024/9/10 17:00:50 项目18 童话世界 49 设置得分上限,让游戏停止。如果“变量得分”等于50,那么停止全 部脚本,草莓角色停止克隆,得分统计也会停止。 使用运算符类的“等于”指令作为“如果…那么执行”中的条件,等号 左边的参数是“变量得分”,右边参数是数字50。循环执行这部分指令,在 草莓角色中编写代码,如图18-17 所示。也可以将此部分与克隆体启动时(得 分统计)的程序段合并。 图18-17 设置得分上限 3 . 运行与调试 游戏制作完成,单击“运行”按钮,测试运行结果。可以发现,舞台上 每隔1 秒就会出现1 颗“草莓”,使用方向键让“小兔”移动,每次“草莓” 碰到“小兔”就会消失,同时得分+1,直到得分是50 时,自动停止游戏。 游戏时,单击“停止”按钮可以随时终止游戏,单击“运行”按钮重新开始。 (1)修改参数。修改草莓角色的克隆速度,更快或者更慢,观察程序执 行情况。修改得分上限参数,观察程序执行情况。 (2)游戏比赛。和同学比一比,设置同样的得分上限,看看谁的“小兔” 更快完成。说说是怎样做到的。 任务18.3 扩展阅读:故事《最大最大的城堡》 金先生喜欢“大”的东西,所以他住在一座大山的山顶,他想给自己盖 一座大城堡。他剪下木块盖城堡,剪了一块又一块,山都被他剪出了一个一 Dzjzw.indd 49 2024/9/10 17:00:51