1. 项目概述:从零开始的Scratch追逐游戏
如果你刚接触Scratch,或者想给孩子找一个有趣又直观的编程入门项目,那么制作一个简单的追逐游戏绝对是绝佳的选择。这个项目就像编程世界的“乐高”,你不需要记忆任何复杂的语法,只需要像搭积木一样,把不同颜色的代码块组合起来,就能亲眼看到角色在屏幕上动起来,听到音效,看到分数变化。整个过程充满了即时反馈的乐趣,能让你在不知不觉中理解编程的核心逻辑——事件、循环、条件判断和变量。
我们今天要做的游戏,核心玩法很简单:玩家控制一个角色(比如一只章鱼),在场景中四处移动,目标是收集闪烁的星星来增加分数,同时要避开到处乱跑的炸弹,碰到炸弹则会扣分。别看规则简单,它麻雀虽小,五脏俱全,几乎涵盖了所有入门级游戏的核心要素:角色控制、物体生成与移动、碰撞检测、分数系统以及音效反馈。通过亲手实现它,你会对“角色移动与变量控制”这两个Scratch乃至所有编程的基石概念,有非常扎实和直观的理解。
我之所以推荐这个项目,是因为它完美体现了“做中学”的理念。你不会感到是在学习枯燥的理论,而是在解决一个又一个具体的小问题:“怎么让章鱼听我指挥?”、“星星怎么才能到处乱跑?”、“碰到炸弹怎么扣分?”。每解决一个问题,游戏就完善一分,你的成就感就增加一分。这种正向激励对于保持学习热情至关重要。无论你是想自学编程的成年人,还是辅导孩子的家长或老师,这个教程都将提供一个清晰、完整、可复现的路径。
2. 游戏核心机制与设计思路拆解
在动手写第一行“代码”(拖第一个积木)之前,我们最好先花几分钟把游戏的整个蓝图在脑子里过一遍。理解了这个框架,后续的每一步操作都会变得目的明确,而不是机械地模仿。
2.1 游戏对象的角色与行为定义
我们的游戏世界里主要有四个“演员”:
- 玩家角色(Player Sprite):这是由玩家直接控制的精灵。它的核心行为是响应键盘输入(上下左右键),并在舞台上相应地改变位置(X和Y坐标)。我们需要确保它的移动是流畅、连续的,而不是按一下键只蹦跶一下。
- 星星(Star Sprite):这是游戏中的“奖励”物品。它的行为是在舞台上随机、不间断地移动,当被玩家角色触碰到时,需要触发三个动作:播放一个悦耳的收集音效、为分数变量加1、然后立刻瞬移到另一个随机位置,等待下一次被收集。
- 炸弹(Bomb Sprite):这是游戏中的“惩罚”物品。它的行为模式和星星类似,也是随机移动。但当被玩家触碰到时,则会触发:播放一个警示音效、为分数变量减2(惩罚比奖励更重)、然后也瞬移到随机位置。
- 舞台(Stage):作为背景和全局管理者。它需要初始化游戏环境,比如在游戏开始时将分数变量重置为0。虽然它不直接参与互动,但却是游戏逻辑运行的基石。
2.2 核心编程概念映射
这个简单的游戏,实际上是我们将几个核心编程概念具象化的过程:
- 事件驱动(Events):这是Scratch编程的起点。所有动作都源于某个“事件”。比如“当绿色旗子被点击”是游戏开始的事件;“当按下上/下/左/右键”是控制角色移动的事件;“当碰到星星”是触发得分逻辑的事件。理解事件,就理解了程序运行的“开关”。
- 循环(Loops):为了让星星和炸弹能持续不断地移动,我们需要使用“重复执行”或“永远”循环。这个循环块会包裹移动指令,让电脑不知疲倦地一遍遍执行它,从而实现动画效果。
- 条件判断(Conditionals):这是实现游戏逻辑的关键。“如果…那么…”积木块就是条件判断。我们用它来检测“如果玩家角色碰到了星星,那么…”和“如果玩家角色碰到了炸弹,那么…”。程序会根据条件是否成立,来决定执行哪一段代码。
- 变量(Variables):分数(Score)就是我们定义的第一个变量。你可以把它想象成一个贴在冰箱上的记分板,数字可以变化。在游戏中,我们“设置”它的初始值,“改变”它的值(加1或减2),并在舞台上“显示”它的值。变量是程序记忆和存储信息的方式。
2.3 技术选型与Scratch的优势
为什么用Scratch来做?对于游戏原型设计和编程教学而言,Scratch有几个无可替代的优势:
- 零环境配置:完全在浏览器中运行,无需安装编译器、配置开发环境,点击即用。
- 可视化调试:代码(积木)和效果(舞台)同屏显示,任何逻辑错误都能通过角色的异常行为立刻发现,调试过程直观得像在玩。
- 即时反馈:拖拽积木后,点击旗子就能立刻看到效果,这种快速的“编码-测试”循环能极大提升学习动力和效率。
- 降低认知负荷:省去了打字可能带来的拼写错误、语法错误,让学习者可以百分百专注于逻辑构建本身。
基于这些分析,我们的开发路径就很清晰了:先搭建舞台和演员(素材准备),然后赋予主角行动能力(移动控制),接着让配角(星星、炸弹)自己动起来,最后用变量和条件判断将它们之间的互动规则建立起来,并加上音效点缀。
3. 项目环境与素材准备详解
万事开头难,但在Scratch里,开头可能是最简单的部分。我们先把“舞台”和“演员”请到位。
3.1 访问与创建项目
首先,打开浏览器,访问Scratch官网(一个以scratch点mit点edu结尾的网站)。如果你是新用户,点击右上角“加入Scratch”进行注册,只需要一个邮箱即可;如果已有账号,直接登录。登录后,点击页面左上角醒目的**“创建”**按钮,一个新的项目页面就会打开。
注意:进入新项目后,你会看到一只默认的橙色小猫站在空白舞台上。我们的第一步,就是右键点击右下角“角色”区里的这只小猫,选择“删除”。这是一个好习惯,从零开始构建,避免残留代码造成干扰。
3.2 选择与导入游戏精灵
精灵(Sprite)就是游戏中的所有角色和物体。我们通过右下角那个“选择一个角色”的按钮(图标是一个小猫头像)来添加。
- 添加玩家角色:点击“选择一个角色”按钮,会打开庞大的精灵库。你可以通过顶部的分类(如“动物”、“奇幻”、“人物”)浏览,也可以直接在搜索框输入关键词,比如“octopus”(章鱼)、“penguin”(企鹅)、“dinosaur”(恐龙)。选择任何一个你喜欢的角色,点击它,它就会出现在舞台和角色列表中。我选择了一只章鱼,因为它有多条触手,看起来动感十足。
- 添加星星:再次点击“选择一个角色”按钮,在搜索框输入“Star”,你会找到很多闪闪发光的星星精灵,选择一个你喜欢的添加即可。
- 绘制炸弹精灵:Scratch的精灵库非常丰富,但确实没有现成的炸弹。这正好给我们一个机会学习使用内置的绘图编辑器。点击“选择一个角色”按钮,但这次不要选库里的,而是将鼠标移到按钮上方,选择**“绘制”**(图标是画笔)。一个全新的画布编辑器会打开。
3.3 使用绘图工具制作炸弹
绘图编辑器界面简洁,功能却足够强大。我们一步步来画一个卡通炸弹:
- 绘制弹体:在左侧工具栏选择“圆形”工具。在画布中央,按住Shift键(可以画正圆)拖动鼠标,画出一个大小合适的圆形。
- 填充颜色:画好后,选择“填充”工具(油漆桶图标),在颜色选择器中,将色调调到黑色区域,并将“亮度”滑块拉到最左边(0),这样我们就得到了一个纯黑色的圆形。
- 绘制引信:选择“画笔”工具,将线条粗细调粗一些。在黑色圆形的顶部,画一个短小的、倾斜的矩形作为炸弹的引信座。
- 绘制火花:接着,不要松开鼠标,从引信座的顶端画出一条弯曲的、像绳子一样的线条,并在末端点几个小点,模拟火花四溅的效果。将画笔颜色改为亮黄色(色调约16,亮度100),让火花更醒目。
- 添加立体感(可选但推荐):为了让炸弹看起来更精致,我们可以给它加点阴影。使用“选择”工具(箭头图标)点击选中黑色圆形。然后点击“填充”工具,在填充模式中,选择第二个选项“径向渐变”。你会看到两个色标。将中心的色标设置为深灰色,边缘的色标设置为纯黑色。这样,炸弹中间会亮一些,边缘暗一些,立刻就有了立体球体的感觉。
画完后,关闭绘图编辑器,你的自制炸弹精灵就出现在角色区了。你可以右键点击它,选择“重命名”,将其改为“Bomb”以便管理。
3.4 设置游戏背景
最后,我们来布置舞台背景。将鼠标移到右下角“选择一个背景”的按钮(图标是山和太阳)上,点击它。同样,你可以从分类中挑选,也可以搜索。因为我选择了章鱼,所以我搜索“underwater”(水下)或“ocean”(海洋),找到了一个蓝色的海底背景,点击即可应用。
至此,所有视觉素材准备完毕。你的角色区应该至少有四个条目:玩家角色(如Octopus)、Star、Bomb,以及一个背景。舞台上也应该呈现出相应的画面。一个好的开始是成功的一半,清晰的素材管理会让后续的编程逻辑更清晰。
4. 实现玩家角色的平滑移动控制
这是游戏交互的核心,我们要让玩家角色听从键盘指挥。Scratch中的移动,本质上是改变精灵的X(水平)和Y(垂直)坐标。
4.1 基础键盘事件与坐标移动
首先,在角色区点击选中你的玩家角色(比如章鱼)。中间区域的代码标签页会显示该角色对应的代码区,目前是空的。
- 添加事件监听器:从左侧积木区,点击黄色的“事件”类别。拖出一个“当按下空格键”积木到代码区。但我们需要的是方向键,所以点击积木上下拉箭头,将其改为“上移键”。
- 添加移动指令:点击深蓝色的“运动”类别。找到“将y坐标增加10”积木,将其拖拽并拼接在“当按下上移键”积木下方。这样,当你按下键盘的上箭头时,角色的Y坐标就会增加10,也就是在屏幕上向上移动。
- 完善四个方向:重复以上步骤,再创建三组代码:
当按下下移键+将y坐标增加 -10(向下移动)当按下左移键+将x坐标增加 -10(向左移动)当按下右移键+将x坐标增加 10(向右移动)
现在点击绿色旗子运行程序,再按方向键,你会发现角色可以移动了,但动作是“跳跃式”的,按一下动一下,很不流畅。这是因为我们只响应了“按下”的瞬间。
4.2 使用循环实现持续移动
为了实现类似主流游戏按住键持续移动的效果,我们需要引入循环和条件检测。
- 重构代码结构:我们不再为每个方向键使用独立的“当按下键”事件。而是用一个“当绿色旗子被点击”事件作为所有移动逻辑的起点。
- 创建主循环:从橙色的“控制”类别中,拖出一个“重复执行”积木,放在旗子事件下面。这个循环会以极快的速度(每秒几十次)重复执行其内部的代码。
- 嵌入条件判断:在“重复执行”循环内部,放入四个“如果…那么”积木。这四个“如果”的条件分别是:“按下上移键”、“按下下移键”……等等。你需要从浅蓝色的“侦测”类别中找到“按下…键?”积木,并将其放入“如果”积木的六边形条件缺口处,并选择对应的方向键。
- 连接移动动作:在每个“如果…那么”积木的内部,放入对应的移动积木(
将y坐标增加10等)。
此时的代码逻辑是:游戏开始后,程序每秒检查数十次——“现在上键被按下了吗?如果按下了,就向上移动10步;下键被按下了吗?……”这样,只要玩家按住键,角色就会持续移动,松开即停,实现了平滑控制。
4.3 移动优化与参数调整
基础的平滑移动已经实现,但还有两个细节可以优化:
- 移动速度:移动积木里的数字“10”决定了每次循环移动的步数,也就是速度。你可以根据角色大小和舞台尺寸调整这个值。比如改成15会更快,改成5会更慢。注意:向左和向下移动的积木里是负数(-10),修改速度时这两个也要同步修改为对应的负值(如-15)。
- 面向方向:如果你的角色有多个造型(比如有朝左和朝右的造型),你还可以在移动的同时改变其方向。在“运动”类别中,使用“面向…方向”积木,或者在“外观”类别中使用“下一个造型”积木,可以让角色的动作更生动。例如,在“如果按下左移键”的代码块内,在移动命令前加一个
面向 -90 度(面向左)。
实操心得:在调试移动时,一个常见的困惑是角色“跑出舞台不见了”。Scratch的舞台坐标范围大约是X轴从-240到240,Y轴从-180到180。如果你希望角色到达边缘后停止或反弹,可以在移动后加入条件判断。例如,在移动代码后加入:
如果 x坐标 > 230 那么 将x坐标设定为 230。这样可以给角色设定一个活动边界。
5. 实现星星与炸弹的自动行为逻辑
现在主角会动了,我们需要让游戏里的“道具”(星星和炸弹)自己活跃起来,增加游戏的挑战性和趣味性。
5.1 为星星添加随机移动代码
在角色区点击选中“Star”精灵。
- 初始化与循环:从“事件”中拖出“当绿色旗子被点击”。然后从“控制”中拖出“重复执行”积木接在下面。所有星星的行为都将在这个无限循环中发生。
- 实现随机移动:从“运动”类别中,找到“在1秒内滑行到随机位置”积木,将其放入“重复执行”循环内。这个积木是核心:它会让星星在1秒的时间内,平滑地移动到舞台上的一个随机坐标点。滑行时间(1秒)可以调整,时间越短,星星移动得越“跳跃”,游戏难度可能越高。
- 添加视觉特效(可选):为了让星星更吸引人,我们可以在循环里加入一些外观特效。从“外观”类别中,可以加入“将颜色特效增加25”积木,这样星星会不断变色。或者加入“将大小增加10”和“将大小增加-10”来实现呼吸闪烁的效果(注意这需要更复杂的循环控制)。
5.2 为炸弹添加相似但独立的移动逻辑
选中我们自制的“Bomb”精灵。它的移动逻辑可以和星星完全一样:当绿旗被点击->重复执行->在1秒内滑行到随机位置。你可以直接从星星的代码区用鼠标框选所有积木,然后右键“复制”,再粘贴到炸弹的代码区。这是代码复用的体现。
但是,这里有一个非常重要的优化点:我们需要避免游戏一开始,炸弹就和玩家角色出生在同一个位置,导致瞬间扣分的不公平情况。
- 设置初始位置:在炸弹的
当绿旗被点击积木下方,重复执行积木上方,插入一个“移到x: y:”积木(在“运动”类别中)。 - 指定角落坐标:将这个积木的x和y坐标设置为舞台的一个角落,例如
x: -220, y: 160。这样,游戏开始时,炸弹会先出现在左上角,然后再开始它的随机滑行之旅,给了玩家反应时间。
5.3 理解“重复执行”与“滑行”的工作原理
这里涉及到两个重要的编程概念:
- “重复执行”循环:它像一个永动机,只要游戏不停止,就会不断地执行它包裹的代码块。对于星星和炸弹,就是不断地命令它们“滑行到随机位置”。
- “滑行”与“移到”的区别:“移到”是瞬间完成,角色会“闪现”到新位置。“滑行”则是在指定时间内(如1秒)平滑地移动过去,会产生动画效果。使用“滑行”能让游戏画面更柔和,也给了玩家预判移动轨迹的可能(虽然轨迹是随机的)。
注意事项:星星和炸弹的移动代码是各自独立的,它们运行在自己的“线程”里。这意味着它们移动的时机和目标是完全独立的,互不干扰,这正是一个多角色游戏该有的样子。如果你觉得一个炸弹不够刺激,完全可以右键点击角色区里的炸弹精灵,选择“复制”,瞬间就能创建第二个、第三个炸弹,它们会自动运行相同的代码,游戏难度立刻升级。
6. 构建游戏互动:碰撞检测与变量控制
游戏的核心乐趣在于互动。现在我们需要让玩家角色与星星、炸弹产生“碰撞”,并由此改变游戏的状态——分数。
6.1 创建与初始化分数变量
变量就像一个存储数据的盒子,我们给它贴个标签叫“Score”,里面放一个数字。
- 新建变量:在左侧积木区,点击深橙色的“变量”类别,然后点击“建立一个变量”按钮。
- 命名变量:在弹出的窗口中,输入变量名“Score”(分数),并选择“适用于所有角色”。这个选项至关重要,它意味着这个分数变量是全局的,所有精灵(玩家、星星、炸弹)和舞台都能读取和修改它。如果选择“仅适用于当前角色”,那么其他角色就访问不到这个变量了。
- 初始化变量:游戏开始时,分数应该清零。因此,在玩家角色的代码区(或者舞台的代码区,因为它是全局管理者),在
当绿旗被点击事件下,首先拖入一个“将Score设定为0”的积木。这样每次重新开始游戏,分数都会归零。 - 显示变量:创建变量后,舞台上会自动出现一个显示框。你可以拖动它到合适的位置,比如舞台右上角。在“变量”类别里,可以勾选或取消“Score”前面的框来控制它是否在舞台上显示。
6.2 为玩家角色编写碰撞处理逻辑
我们将主要的碰撞检测逻辑放在玩家角色身上,因为它才是互动的主动方。
- 创建主循环与条件判断:在玩家角色的代码区,在初始化分数之后,我们放入一个
重复执行循环。在这个循环内部,放入一个如果…那么积木。 - 侦测碰撞条件:点击“侦测”类别,找到“碰到…”积木。将其拖入
如果后面的六边形条件缺口处。点击下拉菜单,选择“Star”。 - 定义碰撞后行为:在
那么的内部,我们需要顺序完成三件事:- 增加分数:从“变量”类别,拖入“将Score增加1”。
- 播放音效:点击代码编辑器左上角的“声音”标签页,点击底部的小喇叭图标,打开声音库。搜索一个适合收集的音效,比如“Chime”或“Pop”。添加后,回到“代码”标签页,从紫色的“声音”类别中,拖出“播放声音…直到完毕”积木,并选择你刚添加的声音。
- 重置星星位置(可选但更佳):为了让游戏体验更好,我们可以在玩家碰到星星后,立刻命令星星移动到新位置,而不是等它自己慢慢滑行过去。这需要用到“消息广播”。在“事件”类别中,使用“广播消息1”积木,将其命名为“StarCollected”。然后,在星星角色的代码区,添加一个
当接收到StarCollected的事件,并在下面放入在0.1秒内滑行到随机位置。这样,碰撞发生后星星会立刻消失并出现在别处,反馈更即时。
6.3 为炸弹编写惩罚逻辑
炸弹的逻辑与星星类似,但效果是惩罚。
- 复制与修改:我们可以右键点击玩家角色代码区中处理星星碰撞的那一整段
如果…那么积木,选择“复制”。然后修改复制的积木块:- 将条件
碰到 Star改为碰到 Bomb。 - 将动作
将Score增加1改为将Score增加 -2(即减2)。 - 将播放的声音换成一个代表惩罚的音效,比如声音库里的“Boom”或“Laser1”。
- 同样,可以广播一个“BombHit”消息,让炸弹也立刻瞬移到新位置。
- 将条件
- 并列判断:将处理炸弹碰撞的这个
如果…那么积木块,与处理星星碰撞的积木块并列放在同一个重复执行循环内。这样,程序在每一帧循环里都会同时检查是否碰到了星星和是否碰到了炸弹。
6.4 代码整合与执行顺序
现在玩家角色的核心代码结构应该是这样的:
当绿旗被点击 将Score设定为0 重复执行 如果 <碰到 Star> 那么 将Score增加1 播放声音 Chime 广播 StarCollected 如果 <碰到 Bomb> 那么 将Score增加 -2 播放声音 Boom 广播 BombHit这个结构清晰体现了游戏的主循环:持续检测碰撞,并根据碰撞对象更新分数和播放音效。广播机制则优雅地解耦了逻辑,让玩家角色只负责触发事件,而星星和炸弹负责响应事件更新自己的状态,这是一种很好的编程实践。
7. 音效添加与游戏性增强技巧
音效是游戏的灵魂之一,它能极大提升沉浸感。Scratch内置了一个丰富的声音库,让我们可以轻松地为游戏添彩。
7.1 为不同事件添加匹配音效
我们已经在上一步为碰撞添加了音效。添加音效的通用步骤是:
- 在代码编辑器上方,点击“声音”标签页。
- 将鼠标悬停在左下角的“选择声音”图标(一个喇叭加号)上,点击进入声音库。
- 声音库按类别组织,你也可以使用搜索框。为不同动作选择匹配的音效:
- 收集星星:选择清脆、悦耳的声音,如“Chime”、“Pop”、“Coin”。
- 碰到炸弹:选择低沉、警示的声音,如“Boom”、“Laser1”、“Screech”。
- 背景音乐(可选):你甚至可以添加一段循环播放的背景音乐。添加一个较长的音乐文件后,在舞台的代码中,使用
当绿旗被点击->重复执行->播放声音...等待播完来实现循环播放。
实用技巧:在声音库中,将鼠标悬停在任何一个声音的预览按钮(一个小播放图标)上,无需点击就能试听,这能帮你快速找到最合适的声音。
7.2 游戏难度与扩展性调整
基础游戏完成后,你可以通过调整一些参数来改变游戏体验,这也是学习变量和条件判断的延伸:
- 调整移动速度:修改玩家角色移动积木中的数字(如10改为15),可以改变其灵敏度。修改星星/炸弹“滑行”积木中的时间(如1秒改为0.7秒),可以增加它们的移动频率,使游戏更难。
- 增加生命值系统:创建一个新的全局变量,命名为“Lives”(生命),初始值设为3。当碰到炸弹时,除了扣分,再增加一个
将Lives增加 -1。然后添加一个判断:如果 Lives = 0 那么,在这个条件下使用停止全部积木来结束游戏。 - 设计关卡目标:使用条件判断来创造胜利条件。例如,在玩家角色的循环中增加:
如果 Score > 20 那么,然后在这个条件下,使用“外观”类别中的说“恭喜通关!” 2秒,并停止全部。 - 丰富视觉反馈:当碰到炸弹时,除了扣分和音效,还可以让玩家角色闪烁几下以示警告。使用“控制”类别中的
重复执行10次循环,里面嵌套将颜色特效增加25和等待0.1秒,可以快速实现闪烁效果。
7.3 项目保存、分享与迭代
完成所有代码后,记得点击Scratch编辑器顶部的“文件”->“保存到电脑”,将项目文件(.sb3格式)下载到本地备份。 更棒的是,你可以点击编辑器右上角的“分享”按钮,将你的游戏发布到Scratch社区。这样你就能获得一个链接,可以发送给朋友或家人,让他们在线玩你制作的游戏。
最后的心得:编程学习最大的敌人是完美主义。你的第一个游戏不必尽善尽美。也许角色的移动有点飘,也许音效搭配有点怪,这都没关系。最重要的是你完成了从构思到实现的全过程。接下来,最好的学习方式就是“折腾”:复制一个炸弹看看会怎样?把星星的移动速度调快十倍呢?给背景加一个会动的云朵精灵?大胆尝试,观察变化,遇到问题就拆解问题(是移动不对?还是碰撞没检测到?),然后去对应的代码块里寻找答案。这个过程,就是计算思维在生根发芽。这个追逐游戏是一个完美的起点,你已经掌握了Scratch最核心的几块积木,接下来,整个世界都是你的舞台。