第3 章 Scratch3.0 程序设计及其调试 本节先给出6 个Scratch3.0 程序实例, 以便本章其他各节参考,也方便叙述。 3.1.1 川剧变脸 1. 创意来源 人的脸是经常变化的,喜怒哀乐均表现 在脸上。动物的脸也经常改变,有时候非常 可爱,让人捧腹大笑。川剧变脸你知道吗? 能不能用编程实现川剧变脸呢? 2. 编剧本并导演 事实上,编剧和导演的很多内容是在后 续的“程序调试及优化作品”中逐步完善的。 即遵循“自顶向下、逐步求精”的原则,为 节省篇幅,在这里一并叙述。 (1)什么是川剧变脸?川剧变脸是川 剧表演的特技之一,用于揭示剧中人物的内 心及思想感情的变化,即把不可见、不可感 的抽象情绪和心理状态变成可见、可感的具 体形象—脸谱。川剧变脸是运用在川剧艺 术中塑造人物的一种特技,是揭示剧中人物 内心思想感情的一种浪漫主义手法。 设计方案。基本功能描述:设计一个角 色猫咪,再为猫咪设计若干脸谱的造型,是 否变脸,由我们自己控制。每当按下键盘上 3.1 第3 章 Scratch3.0 程序设计及其调试 的空格键时,猫咪变脸一次。 (2)优化方案一:当按下空格键时, 舞台上的猫咪造型逐步由大变小,最终退出 舞台,而猫咪的下一个造型(脸谱)逐步由 小变大最终显示在舞台上,以此类推。 (3)优化方案二:给舞台设计一个背 景,如纯颜色的淡蓝色背景。 (4)优化方案三:设计一个漂亮的圆 形图片角色,如多彩转轮。程序执行时,让 多彩转轮旋转,这样可以增强作品的趣味性 和可看性。 (5)优化方案四:给作品配上音乐,音 乐的内容、节奏和风格等应该与本作品相呼应。 3. 准备素材 1)猫咪 从系统自带的角色库中选择cat,将角 色名称修改为“猫咪”。 2)脸谱 可以设计多幅脸谱造型,这样作品内容 更加丰富。这里,给出两个样式,如图3-1 和图3-2 所示,其余的脸谱读者自己设计。 3)多彩转轮 多彩转轮如图3-3 所示。 4)背景 背景如图3-4 所示,也可以配合变脸设 计多幅背景。 0 4 7 第3章 Scratch3.0程序设计及其调试 5)音乐 从网络上下载儿童歌曲《大猫小猫》和 《机器猫》。 4. 编程 根据剧本,设计程序如下。 1)猫咪的代码 猫咪的代码如图3-5 和图3-6 所示。 图3-5 猫咪的代码-1 图3-6 猫咪的代码-2 2)多彩转轮的代码 多彩转轮的代码如图3-7 所示。 图3-7 多彩转轮的代码 3)背景的代码 背景的代码如图3-8 和图3-9 所示。 图3-8 背景的代码-1 图3-1 脸谱-1 图3-2 脸谱-2 图3-3 多彩转轮图3-4 背景 0 4 8 Scratch3.0编 程 基 础 及 指 令 详 解 图3-9 背景的代码-2 5. 程序调试及优化作品 1)程序调试 程序设计好后,可以运行程序,看看 有什么问题。这些问题包括:程序逻辑是否 有误。例如本作品中,当按下空格键时,猫 咪没有变脸,程序执行后多彩转轮没有旋转 等;可以观察脸谱的尺寸是否合适等。 2)优化作品 在剧本的初稿中,有很多没有想到的地 方。运行程序,可以检查程序的错误,还可 以完善和优化作品。如同晚会的彩排,导演 可能会有更好的创意,在实践中发现问题和 不足,在实践中完善和优化作品。 6. 作者注释 (1)编写任何程序,都要为程序“赋 初值”,包括角色的位置、大小、方向、造 型和是否显示等。 (2)角色为什么要移到“最前面”? 这是因为舞台上有多个角色,他们会互相遮 挡,为了使你希望的角色放在舞台的最前面, 需要用到指令“移到最(前面或后面)”选 项,最前面和最后面是可选的。 (3)重复执行指令是语句体,语句体 里面包含了若干条指令,一直执行语句体中 的指令,反复执行直到程序停止。 (4)当“小绿旗”被单击时,是程序 开始执行的指令。不论程序简单或复杂,这 条指令都是整个程序执行的起点。 (5)当按下“空格键”(可选)指令, 是条件判断指令的一种,也就是说,当按下 空格键时,执行此条指令下面的指令。 (6)在这里,你就是导演。作品的创 意和实现方案是最重要的,根据创意和方案 来设计程序代码。程序设计好后,通过程 序的试运行,检验程序的正确性,特别是要 验证程序是否实现了创意,即是否达到了 目的。 (7)在程序代码基本正确的情况下,要 反复调整程序代码中的参数,以达到最佳效 果,如旋转的速度、角度和循环的次数等。 (8)为达到一个创意目的或实现一个 效果,程序代码的设计可以有多种方案和方 法。好的程序应该是:程序正确、代码简洁 及容易理解。 3.1.2 小猪佩奇跳蹦床 1. 创意来源 跳蹦床是常见的喜闻乐见的运动项目, 跳蹦床可以增强孩子身体各器官系统的协调 功能,使孩子体格健壮,能促进儿童的心肺 功能,使血液循环加快,新陈代谢加强。每 当参加完体育活动后,孩子们学习时的注意 力会更加集中,而且学习成绩也会提高。跳 蹦床还是国际奥林匹克运动会的竞技项目。 如何通过编程实现跳蹦床呢? 0 4 9 第3章 Scratch3.0程序设计及其调试 2. 编剧本并导演 大家都看过动画片《小猪佩奇》,小猪 佩奇很聪明也很有趣,它对什么都好奇。对 了,让小猪佩奇来表演跳蹦床吧! 注意:事实上,编剧和导演的很多内容 是在后续的“程序调试及优化作品”中逐步 完善的。即遵循“自顶向下、逐步求精”的 原则,为节省篇幅,在这里一并叙述。 (1)设计方案。使用运动指令“在…… 秒内滑行到x……y……”,来实现小猪佩奇 的上下移动(蹦上蹦下);使用外观指令“将 鱼眼特效设定为……”,来实现蹦床的变形。 (2)优化方案一:给舞台配上一幅“众 人观察跳蹦床”的图片,强化小猪佩奇跳蹦 床的实际效果。 (3)优化方案二:使用事件指令“当 按下……键”,来实现小猪佩奇跳蹦床的特 技。使用“当按下上移键”和“当按下下移键” 来实现小猪佩奇跳蹦床时的“左右扭动”; 使用“当按下左移键”和“当按下右移键” 来实现小猪佩奇跳蹦床时的左右翻转。 (4)优化方案三:给作品配上音乐, 音乐的内容、节奏和风格等应该与本作品相 呼应。 3. 准备素材 1)小猪佩奇 设计一个可爱的卡通小猪佩奇的角色, 如图3-10 所示。 2)蹦床 设计一个蹦床造型的角色,如图3-11 所示。 图3-10 小猪佩奇 图3-11 蹦床 3)背景 给舞台设计一个背景,从网络上找到了 如图3-12 所示的图片,该背景是一幅众人 观看表演的图片。图中虽然有一个卡通娃娃 与本作品不符,但蹦床会盖住这个卡通娃娃, 因此不需要处理。 图3-12 众人观看 0 5 0 Scratch3.0编 程 基 础 及 指 令 详 解 4)音乐和音效 从网络上下载儿童歌曲《认真锻炼身体 好》,作为本作品的背景音乐;使用系统自 带的声音“击打小军鼓”作为当小猪佩奇跳 到蹦床上的声音效果。 4. 编程 1)小猪佩奇的代码 小猪佩奇的代码如图3-13 ~图3-17 所示。 图3-13 小猪佩奇的代码-1 2)角色“蹦床”的代码 角色“蹦床”的代码如图3-18 所示。 图3-18 蹦床的代码 3)背景的代码 背景的代码如图3-19 和图3-20 所示。 图3-19 背景的代码-1 图3-20 背景的代码-2 5. 程序调试及优化作品 1)程序调试 程序设计好后,可以运行程序,看看有 什么问题。问题包括:程序逻辑是否有误。 例如本作品中,当按下空格键时,程序是否 停止执行,跳蹦床时蹦床有没有变形等;可 以观察小猪佩奇在舞台上的位置是否合适等。 2)优化作品 在剧本的初稿中,有很多没有想到的地 图3-14 小猪佩奇的 代码-2 图3-15 小猪佩奇的 代码-3 图3-16 小猪佩奇的 代码-4 图3-17 小猪佩奇的 代码-5 0 5 1 第3章 Scratch3.0程序设计及其调试 方。运行程序,可以检查程序的错误,还可 以完善和优化作品。如同晚会的彩排,导演 可能会有更好的创意,在实践中发现问题和 不足,在实践中完善和优化作品。例如: 小猪佩奇跳蹦床时的上下速度是否合理;当 按下左移键和右移键时小猪佩奇“扭腰”的 角度是否合理等。 6. 作者注释 (1)当“小绿旗”被单击时,是程序 开始执行的指令。不论程序简单或复杂,这 条指令都是整个程序执行的起点。 (2)编写任何程序,都要为程序“赋 初值”,包括角色的位置、大小、方向、造 型和是否显示等。 (3)重复执行指令是语句体,语句体 里面包含了若干条指令,一直执行语句体中 的指令,反复执行直到程序停止。 (4)在这里,你就是导演。作品的创 意和实现方案是最重要的,根据创意和方案 来设计程序代码。程序设计好后,通过程 序的试运行,检验程序的正确性,特别是要 验证程序是否实现了创意,即是否达到了 目的。 (5)在程序代码基本正确的情况下, 要反复调整程序代码中的参数,以达到最 佳效果,如旋转的速度、角度和循环的次 数等。 (6)为达到一个创意目的或实现一个 效果,程序代码的设计可以有多种方案和方 法。好的程序应该是:程序正确、代码简洁 及容易理解。 3.1.3 小工匠大梦想 1. 创意来源 我们居住的高楼大厦和千千万万的房子 都是辛勤劳动的工匠为我们盖的,他们是祖 国伟大的建设者。我们经常看到工匠身穿工 作服,手拿瓦刀砌墙的情景。通过编程能 实现砌墙吗? 2. 编剧本并导演 事实上,编剧和导演的很多内容是在后 续的“程序调试及优化作品”中逐步完善的。 即遵循“自顶向下、逐步求精”的原则,为 节省篇幅,在这里一并叙述。 (1)设计方案。设计一个角色“砖块”, 该砖块有两个造型,一个是横的,一个是竖 的。通过操作键盘上的“左移键”“右移键” 和“下移键”,来移动砖块。 (2)方案优化一:设计一个角色“鹦 鹉”,当程序执行时,鹦鹉提示让你自己设 置游戏的难度,即砖块移动的速度。数字 越大,表示砖头移动的速度越快,游戏难度 越大。 (3)方案优化二:设计两个变量“移 动速度”和“分数”,其中移动速度在游戏 正式开始前,由玩家根据自己的实际情况(如 年龄)设置。分数就是砖块的个数,它代表 了玩家砌墙所用砖块的数量,数量越多,说 明砌墙质量越高。 (4)方案优化三:设计一个“天”, 当砖块触摸到“天”时,游戏结束。设计一 个“地”,当砖块接触到“地”时,砖块停 0 5 2 Scratch3.0编 程 基 础 及 指 令 详 解 止移动。 (5)方案优化四:给本课动画配上合 适的音乐来增强本课的主题内容。 (6)给本课动画配上合适的音乐来增 强本课的主题内容。 3. 准备素材 1)砖块形状 砖块形状如图3-21 和图3-22 所示。 图3-21 砖块(横) 图3-22 砖块(竖) 2)鹦鹉造型 鹦鹉造型如图3-23。 图3-23 鹦鹉 3)背景 设计一个“天”“地”的背景图片,“天” 和“地”是用来判断的条件,如图3-24 所示。 图3-24 背景 4)音乐 从网络上下载歌曲《小工匠大梦想》。 注意,音乐的内容、节奏和风格等应该与本 作品相呼应。 4. 编程 1)砖块的代码 砖块的代码如图3-25 ~图3-31 所示。 图3-25 砖块的代码-1 图3-26 砖块的代码-2 图3-27 砖块的代码-3 0 5 3 第3章 Scratch3.0程序设计及其调试 图3-28 砖块的代码-4 图3-29 砖块的代码-5 图3-30 砖块的代码-6 图3-31 砖块的代码-7 2)鹦鹉的代码 鹦鹉的代码如图3-23 和图3-33 所示。 图3-32 鹦鹉的代码-1 图3-33 鹦鹉的代码-2 3)背景的代码 背景的代码如图3-34 ~图3-36 所示。 图3-34 背景的代码-1 图3-35 背景的代码-2 图3-36 背景的代码-3 5. 程序调试及优化作品 1)程序调试 程序设计好后,可以运行程序,看看有 0 5 4 Scratch3.0编 程 基 础 及 指 令 详 解 什么问题。这些问题包括:程序逻辑是否有 误,例如本作品中,当程序开始执行时,设 置了砖块的不同移动速度,程序是否正确; 当操作键盘上的按键时,是否有效;当砖块 碰到舞台的顶部和底部时是否停止;计分是 否正确等。 2)优化作品 在剧本的初稿中,有很多没有想到的地 方。运行程序,可以检查程序的错误,还可 以完善和优化作品,例如晚会的彩排,导演 可能会有更好的创意,在实践中发现问题和 不足,在实践中完善和优化作品。 6. 作者注释 (1)当“小绿旗”被单击时,是程序 开始执行的指令。不论程序简单或复杂,这 条指令都是整个程序执行的起点。 (2)编写任何程序,都要为程序“赋 初值”,包括角色的位置、大小、方向、造 型和是否显示等。 (3)图3-27 中,使用了控制指令“重 复执行直到……”,判断的条件是当移动的 砖块碰到“黑色”(可以认为是地面)或碰 到“棕色”(砖块的颜色),都要停止砖块 的移动,并且加分。 (4)在这里,你就是导演。作品的创 意和实现方案是最重要的,根据创意和方案 来设计程序代码。程序设计好后,通过程 序的试运行,检验程序的正确性,特别是要 验证程序是否实现了创意,即是否达到了 目的。 (5)在程序代码基本正确的情况下, 要反复调整程序代码中的参数,以达到最佳 效果。如旋转的速度、角度和循环的次数等。 (6)为达到一个创意目的或实现一个 效果,程序代码的设计可以有多种方案和方 法。好的程序应该是:程序正确、代码简洁 及容易理解。 3.1.4 金丝猴跳竹竿 1. 创意来源 中华民族是一个有着56 个民族的大家 庭,各个民族都有其灿烂的文明、文化和艺 术,非常珍贵,我们要保护好、传承好。黎 族人在庆祝新春时,都喜欢跳竹竿运动。跳 竹竿是一种古老而独特的活动,也是一项令 人陶醉的文艺体育运动。它不但姿态优美, 富于节奏,而且气氛非常欢快热烈,吸引 众人。 跳竹竿是黎族最富有浓郁乡土气息的运 动之一,每逢过年过节,黎族同胞便身着艳 丽的民族服装,欢聚在广场上,跳起“打竹 舞”。跳竹竿时,8 根长竹竿平行排放成四 行,竹竿一开一合,随着音乐鼓点的节奏, 不断地变换着图案,4 ~ 8 名男女青年在交 叉的竹竿中随着或快或慢的节奏,灵巧、机 智、自由地跳跃,当竹竿分开时,双腿或单 脚巧妙地落地,不等竹竿合拢又急速跃起, 并不时地变换舞步做出各种优美的舞蹈动 作。参加舞蹈的青年男女,一边跳舞一边由 小声到大声地喊着:“哎- 喂、哎- 喂”, 大大增添了热烈气氛。 太美了,可以通过编程实现跳竹竿吗? 0 5 5 第3章 Scratch3.0程序设计及其调试 2. 编剧本并导演 事实上,编剧和导演的很多内容是在后 续的“程序调试及优化作品”中逐步完善的。 即遵循“自顶向下、逐步求精”的原则,为 节省篇幅,在这里一并叙述。 (1)设计方案。游戏开始界面是介绍 黎族人跳竹竿,当单击角色“黎族人”时, 游戏开始。竹竿左右移动,操控键盘上的上 移键、左移键和右移键,移动角色“金丝猴” 到达红色的“标记”线,当金丝猴碰到竹竿 时,退回原始起点。金丝猴共有5 次机会, 超过5 次,游戏失败。 (2)方案优化一:当金丝猴到达“标 记”,相当于闯过一关,分数增加10 分, 此时退回原点开始下一关。每过一关,竹竿 移动的速度就快一点。 (3)方案优化二:当金丝猴碰到“礼 物”时,分数增加10 分,机会的“次数” 增加一次。 (4)方案优化三:当分数等于100 时, 跳竹竿成功,当次数小于0 时,跳竹竿失败。 (5)方案优化四:为衬托热闹的气氛, 设计8 个机器人(从系统自带的角色库中选 择),使它们围绕在跳竹竿场地的周围。 (6)给本作品配上音乐,培养学生的 音乐艺术素养。注意,音乐的内容、节奏和 风格等应该与本课动画相呼应。 3. 准备素材 1)金丝猴 设计一个角色“金丝猴”,从系统自带 的角色库中选择monkey,将角色名称修改 为金丝猴,该角色有三个造型。 2)竹竿 设计一个角色“竹竿”,尺寸为5×30, 单位为像素,如图3-37 所示。 图3-37 竹竿 3)配角角色 为衬托本作品热闹的场景,设计九个 配角角色,从系统自带的角色库中选择九个 角色,这些角色有很多造型,以便动态地展 示在舞台上。这九个角色分别是:andie、 ballerina、batter、ben、casey、catcher、 jordyn、pitcher 和ripley。 4)黎族人 设计一个角色“黎族人”,如图3-38 所示。 图3-38 黎族人 0 5 6 Scratch3.0编 程 基 础 及 指 令 详 解 5)奖品 设计一个角色“奖品”,该角色有若干 造型,分别代表不同的奖品。可以从系统自 带的角色库和造型库中选择,设计的奖品是 “蝴蝶结”系列,这里给出三个样式以供参 考。如图3-39 ~图3-41 所示。 图3-39 奖品-1 图3-40 奖品-2 图3-41 奖品-3 6)标记 设计一个角色“标记”,用于跳竹竿成 功,见图3-42 所示。图片尺寸为5×960, 单位是像素。 图3-42 标记 7)背景 设计四幅背景,如图3-43 ~图3-46 所示。 图3-43 背景-1 图3-44 背景-2 图3-45 背景-3 图3-46 背景-4 8)音乐 从网络上下载纯音乐《黎族竹竿舞》。 0 5 7 第3章 Scratch3.0程序设计及其调试 4. 编程 1)金丝猴的代码 金丝猴的代码如图3-47 ~图3-54 所示。 图3-47 金丝猴的代码-1 图3-48 金丝猴的代码-2 图3-49 金丝猴的代码-3 图3-50 金丝猴的代码-4 图3-51 金丝猴的代码-5(此图嵌入图3-50 中) 图3-52 金丝猴的代码-6 图3-53 金丝猴的代码-7(此图嵌入图3-52 中) 0 5 8 Scratch3.0编 程 基 础 及 指 令 详 解 图3-54 金丝猴的代码-8(此图接图3-53) 2)竹竿的代码 竹竿的代码如图3-55 和图3-56 所示。 图3-55 竹竿-1 的代码-1 图3-56 竹竿-1 的代码-2 其余11 根竹竿的代码如下,单击角色 区域的角色“竹竿-1”,在显示出来的菜 单中右击“复制”,此时会出现一个新的角 色“竹竿-2”。“竹竿-2”与“竹竿-1” 的造型和代码完全相同。因为本课共有12 根“竹竿”,所以,共复制11 根竹竿,方 法完全一样。复制的11 根竹竿的代码很相 似,其中图3-55 的代码完全相同,为节省 篇幅, 不再赘述。图3-57 ~ 图3-67 是11 根竹竿的第二段代码,与图3-56 很相似。 图3-57 竹竿-2 的代码 图3-58 竹竿-3 的代码 图3-59 竹竿-4 的代码 0 5 9 第3章 Scratch3.0程序设计及其调试 图3-60 竹竿-5 的代码 图3-61 竹竿-6 的代码 图3-62 竹竿-7 的代码 图3-63 竹竿-8 的代码 图3-64 竹竿-9 的代码 图3-65 竹竿-10 的代码 0 6 0 Scratch3.0编 程 基 础 及 指 令 详 解 图3-66 竹竿-11 的代码 图3-67 竹竿-12 的代码 3)标记的代码 标记的代码如图3-68 和图3-69 所示。 图3-68 标记的代码-1 图3-69 标记的代码-2 4)配角的代码 配角的代码如图3-70 和图3-71 所示。 图3-70 配角-1 的 代码-1 图3-71 配角-1 的 代码-2 其余9 个配角的代码如下,按照角色 “配角-1”的方法,新建其余8 个角色: ballerina、batter、ben、casey、catcher、 jordyn、pitcher 和ripley,对应修改角色名称 为:“ 配角-2(ballerina)”“ 配角-3 (batter)”“ 配角-4(ben)”“ 配角-5 (casey)”“配角-6(catcher)”“配角-7 (jordyn)”“配角-8(pitcher)”和“配角-9 (ripley)”。 单击角色区域的“配角-1”,在显示 出来的菜单中单击“复制”,此时会出现一 个新的角色“配角-2”,“配角-2”与“配角-1” 的造型和代码完全相同。因为本课共有10 个角色“配角”,所以,共复制8 个配角, 方法完全一样。 复制的9 个配角的代码很相似,其中 图3-70 的代码完全相同。图3-72 ~图3-79 是9 个配角的第二段代码, 与图3-71 很 相似。 0 6 1 第3章 Scratch3.0程序设计及其调试 5)奖品的代码 奖品的代码如图3-80 ~图3-82 所示。 图3-80 奖品的代码-1 图3-81 奖品的代码-2 图3-82 奖品的代码-3(此图嵌入图3-81 中) 图3-72 配角-2 的代码图3-73 配角-3 的代码 图3-74 配角-4 的代码图3-75 配角-5 的代码 图3-76 配角-6 的代码图3-77 配角-7 的代码 图3-78 配角-8 的代码图3-79 配角-9 的代码 0 6 2 Scratch3.0编 程 基 础 及 指 令 详 解 6)黎族人的代码 黎族人的代码如图3-83 ~图3-85 所示。 图3-83 黎族人的代码-1 图3-84 黎族人的代码-2 图3-85 黎族人的代码-3 7)背景的代码 背景的代码如图3-86 ~图3-88 所示。 图3-86 背景的代码-1 图3-87 背景的代码-2 图3-88 背景的代码-3 5. 程序调试及优化作品 1)程序调试 程序设计好后,可以运行程序,看看有 什么问题。这些问题包括:程序逻辑是否有 误,例如本作品中,当金丝猴碰到礼品时, 有没有加分;金丝猴跳竹竿失败的条件是否 能正确实现;金丝猴跳竹竿成功后,是否能 出现跳竹竿胜利的界面等。 2)优化作品 在剧本的初稿中,有很多没有想到的地 方。运行程序,可以检查程序的错误,即便 0 6 3 第3章 Scratch3.0程序设计及其调试 是没有错误,还可以完善和优化作品。如同 晚会的彩排,导演可能会有更好的创意,在 实践中发现问题和不足,在实践中完善和优 化作品。例如:竹竿的长度和宽度是否合适; 竹竿移动的速度是否合理等。 6. 作者注释 (1)当“小绿旗”被单击时,是程序 开始执行的指令。不论程序简单或复杂,这 条指令都是整个程序执行的起点。 (2)编写任何程序,都要为程序“赋 初值”,包括角色的位置、大小、方向、造 型和是否显示等。 (3)一个完整的游戏应该是有始有终 的,本作品一开始,告诉大家本课游戏的基 本内容,当成功和失败时,利用背景图片告 诉大家结果。本课还使用了多个卡通角色“配 角”来展示跳竹竿的热闹场面,本作品同时 使用了多个“声效”来增加游戏的趣味性。 (4)在移动金丝猴的代码中,使用了 运动指令“将旋转方式设为……”,单击该 指令右侧的箭头,出现如图3-89 所示菜单, 选择“不可旋转”。 图3-89 金丝猴移动时的旋转方式设定 如果设定为“左右翻转”,在左右移动 角色“金丝猴”时,金丝猴就会出现头朝下 的情况,不符合实际。 (5)程序执行效果如图3-90 和图3-91 所示。 图3-90 程序执行效果截图-1 图3-91 程序执行效果截图-2 请注意,该截图仅仅是程序执行到某 一时刻的效果,不能反映程序执行的整体 效果。 (6)在这里,你就是导演。作品的创 意和实现方案是最重要的,根据创意和方案 来设计程序代码。程序设计好后,通过程序 的试运行,检验程序的正确性,特别是要验 证程序是否实现了我们的创意,即是否达到 了目的。 0 6 4 Scratch3.0编 程 基 础 及 指 令 详 解 (7)在程序代码基本正确的情况下, 要反复调整程序代码中的参数,以达到最佳 效果。如旋转的速度、角度和循环的次数等。 (8)为达到一个创意目的,或实现一 个效果,程序代码的设计可以有多种方案和 方法。好的程序应该是:程序正确、代码简 洁及容易理解。 程序设计的步骤和方法 3.2.1 软件设计的原则 软件是一种特殊的产品,大中型软件设 计非常复杂,必须按照一定的原则和步骤进 行设计、管理和测试等。虽然少儿编程不会 涉及,但了解其原则、步骤和方法,会对以 后的软件开发工作有益。 1. 用分阶段的生命周期计划严格管理 在软件开发与维护的漫长生命周期中, 需要完成许多性质各异的工作,应该把软件 生命周期划分成若干个阶段,并相应地制订 出切实可行的计划,然后严格按照计划对软 件的开发与维护工作进行管理。 2. 坚持进行阶段评审 软件的质量保证工作不能等到编写阶段 结束之后再进行。这样说至少有两个理由: 第一,大部分错误是在编码之前出现的,根 据统计,设计错误占软件错误的63%,编 码仅占37%;第二,错误发现与改正的越晚, 所付出的代价越大。因此,这是一条必须遵 循的重要原则,在每个阶段都进行严格的评 3.2 审,以便尽早发现在软件开发过程中所犯的 错误。 3. 实行严格的产品控制 在软件开发过程中不应随意改变需求, 因为改变一项需求往往需要付出较高的代 价,但是,在软件开发过程中改变需求又是 难免的。由于外部环境的变化,用户改变需 求是一种客观需要,显然不能硬性禁止客户 提出改变需求的要求,而只能依靠科学的产 品控制技术来顺应这种要求。当改变需求 时,为了保持软件各个配置的一致性,必须 实行严格的产品控制,其中主要是实行基线 配置。 4. 用现代程序设计技术 从提出软件工程的概念开始,人们一 直把主要精力用于研究各种新的程序设计技 术。60 年代末提出的结构程序设计技术, 已经成为绝大多数人公认的先进程序设计技 术。在这以后又进一步发展出各种结构分析 与结构设计技术。实践表明,采用先进的技 术既可提高软件开发的效率,又可提高软件 维护的效率。 5. 结果应能清楚地审查 软件产品不同于一般的物理产品,它是 看不着摸不到的逻辑产品。软件开发人员的 工作进展情况可见性差,难以准确度量,从 而使得软件产品的开发过程比一般产品的开 发过程更难于评价和管理。为了提高软件开 发过程的可见性,更好地进行管理,应该根 据软件开发项目的总目标及完成期限,明确 开发组织的责任,规定产品标准,从而使得 0 6 5 第3章 Scratch3.0程序设计及其调试 到的结果能够清楚地被审查。 6. 开发小组的人员应该少而精 软件开发小组的组成人员的素质应该 高,而人数不宜过多。开发小组人员的素质 和数量是影响软件产品质量和开发效率的重 要因素,因此,组成少而精的开发小组是软 件工程的一条基本原理。 7. 承认不断改进软件工程实践的必要性 遵循上述六条基本原理,就能够按照 当代软件工程基本原理实现软件的工程化 生产。但是,仅有上述六条原理并不能保证 软件开发与维护的过程能赶上时代前进的步 伐。因此,承认不断改进软件工程实践的必 要性作为软件工程的第七条基本原理。按照 这条原理,不仅要积极主动地采纳新的软件 技术,而且要注意不断总结经验。 3.2.2 程序设计的一般步骤 1. 问题定义 问题定义阶段必须回答的关键问题是, 要解决的问题是什么?如果不知道问题是什 么就试图解决这个问题,显然是盲目的,只 会白白浪费时间和金钱,最终得到的结果很 可能是毫无意义的。尽管确切地定义问题很 重要,但是在实践中它却可能是最容易被忽 视的一个步骤。 要完成问题定义阶段的工作,系统分析 员应该提供关于问题性质、工程目标和规模 的书面报告。通过对系统的实际用户和使用 部门负责人的访问调查,分析员需要写出他 对问题的理解,并在用户和使用部门负责人 的会议上认真讨论这份书面报告,澄清含糊 不清的地方,改正理解不正确的地方,最后 得出一份双方都满意的文档。 2. 可行性研究 这个阶段要回答的关键问题是,对于 上一个阶段所确定的问题有行得通的解决办 法吗?为了回答这个问题,系统分析员需要 完成一次大大压缩和简化了的系统分析和设 计,即在较抽象的高层次上进行的分析和设 计。可行性研究应该比较简短,这个阶段的 任务不是具体解决问题,而是研究问题的范 围,探索这个问题是否值得去解决,是否有 可行的解决办法。可行性研究,一般包括经 济可行性研究、技术可行性研究、操作可行 性研究和法律可行性研究。 可行性研究的结果是让使用部门负责人 做出“是否继续进行这项工程的决定”的重 要依据。一般说来,只有投资可能取得较大 效益的工程项目才值得继续进行下去。可行 性研究以后的那些阶段将需要投入更多的人 力和物力。及时中止不值得投资的工程项目, 才可以避免更大的浪费。 3. 需求分析 这个阶段的任务仍然不是具体地解决问 题,而是准确地确定“为了解决这个问题, 目标系统必须做什么”,主要是确定目标系 统必须具备哪些功能。用户了解他们所面对 的问题,知道必须做什么,但是通常用户不 能完整、准确地表达出他们的要求,更不知 道怎样利用编程解决他们的问题;软件开发 人员知道怎样使用软件实现用户的要求,但 0 6 6 Scratch3.0编 程 基 础 及 指 令 详 解 是对特定用户的具体要求并不完全清楚。因 此,系统分析员在需求分析阶段必须和用户 密切配合,充分交流信息,得到经过用户确 认的系统逻辑模型。通常用数据流图、数据 字典和简要的算法描述系统的逻辑模型。 在需求分析阶段确定的系统逻辑模型 是以后设计和实现目标系统的基础,因此必 须准确、完整地体现用户的要求。系统分析 员通常都是软件技术专家,技术专家一般都 很快着手进行设计,然而,一旦系统分析员 开始谈论程序设计的细节,就容易脱离用户 需求,软件工程使用的结构分析设计的方法 为每个阶段都规定了特定的结束标准,需求 分析阶段必须提供完整、准确的系统逻辑模 型,经过用户确认之后才能进入下一个阶 段,这就可以有效地减少急于进行具体设计 的问题。 4. 总体设计 这个阶段必须回答的关键问题是:概括 地说,应该如何解决这个问题?首先,应该 考虑几种可能的解决方案。例如,目标系统 的一些主要功能是用计算机自动完成,还是 用人工完成;如果使用计算机,那么是使用 批处理方式,还是人机交互方式;信息存储 使用传统的文件系统,还是数据库……。通 常应该考虑下述几类可能的方案。 (1)低成本的解决方案。 系统只能完成最基本的工作,不能多做 一点额外的工作。 (2)中等成本的解决方案。 系统不仅能够很好地完成预定的任务, 使用起来很方便,而且还具有用户没有具体 指定的某些功能和特点。虽然用户没有提出 这些具体要求,但是系统分析员根据自己的 知识和经验断定,这些附加的功能在实践中 是很有价值的。 (3)高成本的“十全十美”的系统, 具有用户希望的所有功能和特点。 系统分析员应该使用系统流程图或其他 工具描述每种可能的系统,预估每种方案的 成本和效益,还应该在充分权衡各种方案利 弊的基础上,制订实现所推荐系统的详细计 划。如果用户接受分析员推荐的系统,则可 以着手完成本阶段的另一项主要工作。 上面的工作确定了解决问题的策略以及 目标系统需要哪些程序。但是,怎样设计这 些程序呢?结构设计的一条基本原理就是程 序应该模块化,即一个大程序应该由许多规 模适中的模块按合理的层次结构组织而成。 总体设计阶段的第二项主要任务就是设计软 件的结构,即确定程序由哪些模块组成以及 模块间的关系。通常用层次图或结构图描绘 软件的结构。 5. 详细设计 总体设计阶段以比较抽象概括的方式 提出了解决问题的办法。详细设计阶段的任 务就是把解法具体化,即回答下面这个关键 问题:应该怎样具体地实现这个系统?这个 阶段的任务不是编写程序,而是设计出程序 的详细规格说明。这种规格说明的作用类似 于其他工程领域中工程师经常使用的工程蓝 图,它们应该包含必要的细节,程序员可 0 6 7 第3章 Scratch3.0程序设计及其调试 以根据它们写出实际的程序代码。通常用 HIPO 图(层次图+ 输入/处理/输出图) 或PDL 语言(过程设计语言)描述详细设 计的结果。 6. 编码和单元测试 这个阶段的关键任务是写出正确的容 易理解、容易维护的程序模块。程序员应该 根据目标系统的性质和实际环境,选取一种 适当的高级程序设计语言(必要时用汇编语 言),把详细的设计结果翻译成用选定的语 言书写的程序,并且仔细测试编写出的每一 个模块。 7. 综合测试 这个阶段的关键任务是通过各种类型 的测试(及相应的调试)使软件达到预定的 要求。 最基本的测试是集成测试和验收测试。 集成测试是根据设计的软件结构,把经过单 元测试检验的模块按某种选定的策略装配起 来,在装配过程中对程序进行必要的测试。 验收测试则是按照规格说明书的规定(通常 在需求分析阶段确定),由用户(或在用户 积极参加下)对目标系统进行验收。 必要时还可以再通过现场测试或平行 运行等方法对目标系统进一步测试检验。为 了使用户能够积极参加验收测试,并且在系 统投入生产性运行以后,能够正确有效地使 用这个系统,通常需要以正式的或非正式的 方式对用户进行培训。通过对软件测试结果 的分析可以预测软件的可靠性;反之,根据 对软件可靠性的要求也可以决定测试和调 试过程的结束时间。应该用正式的文档资料 把测试计划、详细测试方案以及实际测试 结果保存下来,作为软件配置的一个组成 成分。 8. 软件维护 维护阶段的关键任务是通过各种必要的 维护活动使系统持久地满足用户的需要。通 常有四类维护活动:改正性维护即诊断和改 正在使用过程中发现的软件错误;适应性维 护即修改软件以适应环境的变化;完善性维 护,即根据用户的要求改进或扩充软件使它 更完善;预防性维护,即修改软件为将来的 维护活动预先做准备。 3.2.3 Scratch3.0图形化程序设计的 原则和步骤 Scratch3.0 图形化程序设计的原则和步 骤,从根本上与使用高级语言开发软件特别 是中大型软件的原则和步骤是一致的,但也 不完全相同。 1. Scratch3.0 图形化程序设计的原则 (1)自顶向下,逐步求精。 人的脑力是有限的,解决复杂问题的 唯一方法是把复杂的问题简化,把大的问题 化小。 (2)程序容易阅读。 对自己和他人来说,程序容易阅读是很 重要的。正确的程序不代表阅读性好,程序 虽然是正确的但难以理解,不利于自己或他 人对程序进行改进和升级。注释和命名需要 有意义,且结构清晰。 0 6 8 Scratch3.0编 程 基 础 及 指 令 详 解 (3)代码较小。 在保证正确和良好阅读性的前提下,代 码越少,程序执行的效率越高。 (4)程序完整。 这里强调的是,在初始界面中,就要告 诉用户程序如何操作。另外,程序应该有强 制停止执行的方法。请参考3.1.3 节和3.1.4 节两个案例。 (5)界面友好。 在图形化编程中,里面的图片、音乐和 音效等应尽可能精美,它们服务于作品的主 要内容。 2. Scratch3.0 图形化程序设计的步骤 请参考3.1 节中的四个案例。 (1)从生活中寻找创意。 要注意观察生活中的各种现象,利用自 己现有的知识和技能从生活中寻找灵感。认 真观察,深刻思考,就会有所发现。从这个 意义上说,应该博览群书并深刻思考,养成 注意观察和发现的好习惯。 (2)编剧本及导演。 有了观察后的灵感,就可以进一步思考 自己要实现什么和达到什么目标及效果。 (3)设计角色及其相互关系。 有了目标,即可进一步设计和确定作品 的方案,方案不可能一步到位,需要反复修改、 推敲和细化。然后,可以设计各个角色和背 景以及它们之间的相互关系。复杂的作品可 以画出角色之间的逻辑图和程序的流程图。 (4)初步编写程序。 有了上面的基础,现在可以编写程序 了。如同写作文,程序也不可能一步到位, 需要反复修改。 (5)运行程序并对程序纠错和完善。 程序设计好后,执行程序并认真观察 和思考出现的问题。纠错就是寻找程序出 现的各种错误,而完善程序则是对作品的 创意进一步修改和对角色图片的进一步设 计等。 (6)整理文档。 对于复杂的作品,应该写出作品设计 的步骤和注意事项,对于复杂的代码给出 必要的注释。这对于日后的修改和完善很 有帮助。 程序的调试 在程序开发过程中, 出现程序错误 (Bug)是不可避免的。这时候就需要对程 序进行调试,通过调试,发现错误,着手去 除Bug。 编写一段程序或许不难,难的是 程序出现错误后,调试、排查和修复。与编 写程序相比,程序调试对于开发人员的水平 要求更高。 从教学的角度来看,学生的程序调试排 错是一种较高的能力。学生跟着老师学习了 很多案例,每行代码都烂熟于心,但是当自 己开始编写程序时,出现Bug 却手足无措。 这时掌握程序排错的方法显得格外重要,好 的调试策略是设计程序时的一种法宝。程序 调试也是锻炼思维方式和培养解决问题能力 的极好途径。程序出现错误的原因,除了那 3.3 0 6 9 第3章 Scratch3.0程序设计及其调试 些编程语言共同的原因,还有一些Scratch 特色的原因。 1. 在运行程序中发现错误 程序设计好后,首先运行程序。在此过 程中,你首先会发现程序运行异常的问题。 导致问题的因素方方面面,主要有:指令使 用不当;指令参数不合适;角色与角色之间 的联系有误;变量原因;程序逻辑错误;程 序初值不正确等。下面举例说明。 创意的题目是《猫咪慢慢长大了》,为 达到一个创意目的或实现一个效果,程序的 设计可以有多种方案和方法。本创意的简单 实现方法,是让猫咪在舞台上左右来回走动, 若碰到舞台边缘,猫咪变大一点,长大到一 定程度,程序停止执行。猫咪的初步代码如 图3-92 和图3-93 所示。 图3-92 猫咪的初步代码-1 图3-93 猫咪的初步代码-2 上面的程序有什么问题吗?阅读程序, 似乎没有什么问题,但运行该程序若干时间 后,发现猫咪会走到舞台的顶部边缘。 1)问题-1 程序的错误往往隐藏在变量之中。 Scratch3.0 系统有变量类指令,它们在运行 时其值是变化的。另外,还有一种不是变量 的变量,例如图3-93 中的指令“将大小增 加10”。猫咪的初始位置在靠近舞台的下方, 当猫咪逐步变大以后,就会碰到舞台下方的 边缘,而在图3-92 中有“碰到边缘就反弹” 的指令,猫咪反弹就会形成角度,逐步向舞 台上方移动。 2)问题-2 慢慢长大的猫咪其体型会慢慢变大,而 走路的速度也会慢慢快起来。如何实现呢? 3)问题-3 猫咪在长到一定程度后,就会停止生 长,不能无限长大。如何实现呢? 4)问题-4 在运行程序后,你会发现,猫咪在碰 到边缘时,头就会向下,为什么? 针对以上四个问题,改进程序如图3-94 ~ 图3-96 所示。 0 7 0 Scratch3.0编 程 基 础 及 指 令 详 解 程序说明如下。 (1) 解决第一个问题的方法是: 在 图3-95 中添加“将y 坐标增加5”,当猫 咪变大后,让猫咪向舞台上方移动,这样就 不会碰到舞台边缘了。 (2)解决第二个问题的方法是:新建 一个变量“猫咪走路速度”,因为猫咪碰到 舞台边缘就会变大一点,此时猫咪的走路速 度应该加快一点。猫咪碰到舞台边缘时,该 变量值就会“将猫咪走路速度增加2”,在 图3-94 中,猫咪会“移动猫咪走路速度步”, 这样猫咪走路的速度随着体型变大而加快。 (3)解决第三个问题的方法是:设置 一个计时器,当计时器的数值到达某值时, 程序停止执行。在图3-96 中,计时器的值 如何确定呢?将指令库中的指令“计时器” 勾选,此时计时器的值就会显示在舞台上。 这样,可以先将计时器的值设定大一些(如 2000),当运行程序猫咪长大到合适的大小 时,查看舞台上计时器的值,然后修改指令 “计时器>2000”中的值为100。 (4) 解决第四个问题的方法是: 在 图3-94 中添加指令“将旋转方式设为左右 翻转”。 (5)图3-95 中,“等待1 秒”有什么 意义呢?如果没有这条指令,由于猫咪每次 移动是5 步,所以,当猫咪碰到边缘时,程 序有可能认为猫咪碰到边缘是几次而不是一 次,这样猫咪就会变大几次。 (6)编写任何程序,都要为程序“赋 初值”,包括角色的位置、大小、方向、造 图3-94 猫咪的代码-1 图3-95 猫咪的代码-2 图3-96 猫咪的代码-3 0 7 1 第3章 Scratch3.0程序设计及其调试 型、变量、背景和角色是否显示等。 2. 设置断点 有时候,需要查看程序执行到某一时刻 的状态,由于程序执行速度很快,无法查看。 此时可以将如图3-97 和图3-98 的指令插入 到程序的某一位置。当程序执行到该指令 时,就会停下来以便查看,然后按下空格键, 程序继续执行,以此类推。 图3-97 设置断点指令-1 图3-98 设置断点指令-2 3. 利用变量检验角色状态 如果去掉图3-95 中“等待1 秒”指令, 程序似乎没有问题,我们来检验一下。新建 一个变量“碰到边缘的次数”,图3-95 代 码修改为如图3-99 所示。 图3-99 利用变量检验猫咪碰到边缘的次数 执行程序后,发现猫咪碰到边缘后,其 次数应该是一次或增加一次,但结果却是若 干次,具体次数不尽相同。有了“等待1 秒” 指令,程序就正确了。由此看出,程序具有 复杂性,阅读程序时感觉没有问题,实际执 行时却不正确。 4. 利用指令“说……秒” (1)测算猫咪到小球的距离。 舞台上有一个随机移动的小球,可以利 用“说……秒”指令,方便地获取猫咪到小 球的距离,如图3-100 所示。 图3-100 测算猫咪到小球的距离 (2)计算表达式的值。 例如想知道表达式“5+9/3×8”的值 是否正确,可以执行如图3-101 所示的代 码,以便检验给出的运算指令是否正确。 该表达式的值应该是29,但程序执行结果 是5.38。 图3-101 计算表达式的值-1 实际上,我们的本意是计算“5+(9/3)× 8”,但在程序的运算表达式中却不是这样。 0 7 2 Scratch3.0编 程 基 础 及 指 令 详 解 正确的表达式如图3-102 所示。 图3-102 计算表达式的值-2 5. 改变参数 在调试的过程中,为了查看方便或加快 调试速度,可以改变参数。例如,在“小工 匠大梦想”中,可以将指令移动“移动速度” 步里面的变量“移动速度”先修改为常量, 数值可大可小。 6. 显示变量值 在指令区,很多“椭圆形”的指令都可 以通过“勾选”而显示在舞台上,且显示的 位置可以拖动鼠标调整。这样可以方便地查 看相关信息,例如在图3-94 中,在指令区 勾选后,该变量就会显示在舞台上。还有前 面所述的“碰到边缘次数”“计时器”和“y 坐标”等,如图3-103 所示。 图3-103 变量值显示在舞台上 7. 指令确认法 例如,为了查看角色的颜色特效,可 以执行如图3-104 所示的代码,根据查看的 结果,可以改变参数值,以达到我们想要的 结果。 图3-104 利用点击积木查看程序执行效果 8. 计数法 参见图3-96 的程序说明。这种方法很 灵活,当计时器归零后,就是一个起点,从 起点开始,观察程序的执行情况。 9. 黑盒调试法 由于不需要了解程序内部逻辑,只需要 关注输入和输出的结果,因此把这种方法称 为黑盒调试法。输入数据,查看结果,逐行 分析指令代码。将指令参数“回答”先修改 为常量,数值可大可小,以便观察程序的执 行是否正确。 10. 拆解法 如果程序复杂,可以将完整的程序拆 解,分模块和分段调试,少许改变程序指令 即可拆解。例如在“金丝猴跳竹竿”中,可 以单独测试金丝猴的移动、碰到终点或碰到 奖品等。