1. 从零开始为什么选择Scratch做你的第一个游戏如果你之前从来没接触过编程一听到“写代码”就觉得头大那我特别理解你。几年前我第一次带我侄子学编程时他一看那些密密麻麻的英文单词和符号就直摇头。后来我给他打开了Scratch他盯着那些五颜六色、像乐高积木一样的方块眼睛一下子就亮了。那天下午他自己就捣鼓出了一个会动的小猫动画。所以别怕今天我们要做的这个“接水果”小游戏就是你踏入编程世界最好、最有趣的那块敲门砖。Scratch是麻省理工学院MIT专门为青少年和编程初学者设计的图形化编程工具。它最大的特点就是完全不用你敲一行代码。所有的编程逻辑比如“让苹果掉下来”、“接到水果就加分”、“时间到了就结束”都是用拖拽积木块来完成的。你把积木像拼图一样拼在一起程序就跑起来了。这种感觉特别直观你马上就能看到自己每一步操作带来的效果成就感来得非常快。对于零基础的朋友来说这种即时反馈是保持学习热情最好的燃料。我们今天要做的“接水果”游戏虽然听起来简单但它麻雀虽小五脏俱全。一个完整的游戏该有的东西它基本都有开始界面、游戏主循环、得分系统、失败判定和结束界面。通过亲手把这个游戏做出来你不仅能熟悉Scratch这个工具更重要的是能理解游戏设计最核心的事件驱动和状态切换思想。什么叫事件驱动简单说就是“当……发生就做……”。比如“当绿旗被点击游戏就开始”这就是一个事件。状态切换呢就是游戏从“准备”变成“进行中”再变成“结束”这三个画面和逻辑是完全不同的。理解了这些以后你再学任何编程语言或者想做更复杂的游戏心里就有底了。我建议你打开Scratch的在线编辑器直接在浏览器搜索“Scratch”就能找到官网跟着我一步步来。不用担心做错编程最有意思的地方就是试错和调试。我当年也没少把角色弄得满天乱飞或者让分数莫名其妙地变成负数。咱们边玩边学我保证做完这个游戏你一定会觉得编程原来这么有意思。2. 开工前的准备认识你的“游戏工作室”在开始搭建我们的游戏世界之前我们得先熟悉一下Scratch这个“工作室”里的各个区域和工具。这就好比你要做木工得先认识锯子、锤子和刨子一样。Scratch的界面非常清晰主要分为四大块我带你快速过一遍后面用起来就顺手了。首先是舞台区也就是屏幕中间那块大白板。这里就是你游戏的最终呈现窗口所有角色都会在这里表演。舞台右下角有绿旗和红圆按钮绿旗是启动所有程序的开关红圆是停止一切。这个一定要记住我们测试游戏全靠它俩。舞台上方可以切换“背景”我们的游戏前、中、后三个画面就是在这里切换的。其次是角色区在舞台区的下方。这里管理着你游戏里的所有“演员”。默认会有一只小猫咪我们可以删掉它然后点击右下角那个“选择一个角色”的按钮从素材库里添加我们需要的角色。对于接水果游戏我们至少需要三个角色一个接水果的篮子或者小盆、一个苹果、一个香蕉。你完全可以根据喜好把篮子换成小丑的帽子或者把水果换成金币、星星让你的游戏独一无二。然后是积木区也就是屏幕左侧的部分。这里是我们的“工具箱”所有的编程积木都分门别类地放在这里。比如“事件”类里有“当绿旗被点击”“运动”类里有“移动10步”、“面向90方向”“控制”类里有“重复执行”、“如果…那么…”“侦测”类里有“碰到…颜色”。我们后面所有的游戏逻辑都是从这儿选取合适的积木拖到右边的脚本区拼接起来的。最后是脚本区在屏幕中间最大的空白区域。这里就是我们“搭积木”、写逻辑的地方。你从左侧把积木拖到这里把它们严丝合缝地拼接起来一个角色的行为程序就写好了。每个角色都有自己的脚本区互不干扰。你需要给篮子、苹果、香蕉分别编写属于它们自己的脚本。提示刚开始你可能会觉得积木种类太多有点眼花。没关系完全不需要背。你就记住一个原则你想让角色干什么就去对应的分类里找。想让角色动去“运动”类。想让它做判断去“控制”类。多用几次自然就熟了。除了这些我们还需要两个非常重要的东西变量。你可以把变量理解成游戏里的“记分牌”和“倒计时器”。我们需要创建一个叫“我的得分”的变量来记录接住了多少水果再创建一个叫“剩余时间”的变量来做60秒倒计时。创建变量的按钮在“代码”标签页的“变量”分类里点击“建立一个变量”输入名字选择“适用于所有角色”即可。创建好后舞台上就会显示这两个变量的实时数值非常直观。3. 搭建游戏舞台设计三个核心界面一个好的游戏体验是连贯的。你不能让玩家一上来就面对满天乱飞的水果那会让人不知所措。所以我们先把游戏的“外壳”——也就是三个核心界面做好。这就像拍电影得先把场景布置好演员才能进场。这三个界面分别是游戏开始前的准备界面、游戏进行中的主界面和游戏结束后的结算界面。首先是准备界面。这个界面通常比较简洁美观目的是吸引玩家点击开始。我们在背景库点击舞台区右下角的“选择一个背景”里找一张色彩明亮、有游戏感的图片。比如我选了一张画着各种水果卡通图案的背景。然后我们需要在这个背景上告诉玩家怎么玩。这里有个小技巧我们不用真的在背景图上写字而是可以创建一个新的角色来当“文字提示”。在角色区新建一个角色选择“绘制”用文本工具写上“接水果大挑战”和“点击绿旗开始游戏”。把这个角色的大小调整合适放到舞台中央。然后为这个“提示角色”编写一个简单的脚本当绿旗被点击时显示出来当游戏真正开始时我们再让它隐藏。这样界面和逻辑就分开了非常清晰。接下来是游戏主界面。这是玩家注意力最集中的地方背景不能太花哨以免干扰玩家视线。我通常选择一张干净的纯色背景比如浅蓝色模拟天空或者浅绿色模拟草地。这个背景的核心作用是承载游戏的核心信息。我们会把之前创建的“我的得分”和“剩余时间”两个变量显示器拖放到舞台的左上角或右上角。玩家在紧张接水果的同时能一眼就看到自己的分数和时间这种即时反馈是游戏爽感的重要来源。最后是游戏结束界面。当“剩余时间”变成0游戏就该结束了。我们需要切换到结束背景并展示玩家的最终得分。结束背景可以选一张有“Game Over”字样或者奖杯图案的图片。同样我们也可以创建一个新的“结算角色”。为这个角色编写脚本当它接收到“游戏结束”的广播消息时广播功能我们后面会详细讲就显示出来并且说出一句话比如“时间到你最终得到了【我的得分】分”。这里要用到“运算”类积木里的“连接……和……”积木把固定文字和变量“我的得分”拼接起来。注意背景切换是游戏流程控制的关键。我们不能简单地用“当绿旗被点击”就切换背景因为绿旗点击一次所有角色的脚本都会从头运行容易造成混乱。更专业的做法是使用Scratch的“广播”功能。我们可以在准备界面的“提示角色”脚本里当玩家点击它时广播一条“游戏开始”的消息。然后让“舞台”的背景监听这条消息一收到就切换到游戏主界面。同理时间用完时由控制时间的脚本广播“游戏结束”舞台再切换到结束界面。这样整个游戏的流程就通过消息来驱动逻辑清晰又不容易出错。4. 让水果动起来自由落体与随机生成舞台搭好了现在该请我们的主角——水果们上场了。我们想要的效果是苹果和香蕉从舞台顶部的不同位置不断落下如果被篮子接住就加分并消失如果落到舞台底部没被接住就直接消失然后立刻从顶部一个新的位置重新开始下落。这个过程要循环往复直到游戏时间结束。听上去有点复杂别担心我们用积木一步步拆解。第一步设置水果的初始状态。选中苹果角色我们给它编写第一段脚本这段脚本只会在游戏开始时执行一次。首先我们需要确定苹果的大小在“外观”类里找到“将大小设定为”积木我觉得50%的大小比较合适。然后我们要让苹果在游戏开始前先藏起来用“隐藏”积木。什么时候显示呢当它接收到“游戏开始”的广播时。所以我们拖出一个“当接收到游戏开始”的积木在“事件”类里然后在下面拼接“显示”积木。这样只有游戏正式开始苹果才会出现。第二步实现循环下落。这是最核心的部分。我们需要苹果不断地“克隆”自己每一个克隆体执行一次下落过程。这里要用到Scratch里非常强大的“克隆”功能。你可以把克隆理解成“分身术”本体可以不停地制造出和自己一模一样的分身每个分身都能独立行动。我们在“当接收到游戏开始”的积木下面继续拼接一个“重复执行直到……”的积木在“控制”类里。重复执行什么呢重复执行“克隆自己”这个动作。那执行到什么时候停止呢直到“剩余时间0”也就是游戏时间结束。这样只要游戏还在进行苹果本体就会不停地制造分身。第三步为每一个克隆体编写下落行为。光克隆出来还不够我们需要告诉每一个克隆体“你诞生后应该做什么”。这需要用到“当作为克隆体启动时”这个特殊的积木。在这个积木下面我们编写克隆体的完整一生随机定位用“运动”里的“移到x:… y:…”积木结合“运算”里的“在…到…间随机选一个数”让克隆体在舞台顶部y坐标设为180的横向随机位置x坐标在-220到220之间出现。自由落体用一个“重复执行直到……”的循环让克隆体持续下落。循环里放一个“将y坐标增加-5”向下移动再放一个“等待0.1秒”来控制下落速度。这个循环什么时候结束呢直到克隆体“碰到舞台边缘”即落到最底下或者“碰到篮子角色”。判断结果下落循环结束后用“如果…那么…否则…”积木进行判断。如果“碰到篮子”那么播放一个“咔吃”的音效在“声音”标签页添加然后“将我的得分增加1”最后删除这个克隆体。如果“碰到舞台边缘”即没接到那么直接“删除此克隆体”。无论哪种情况克隆体的使命都完成了都要消失。香蕉角色的脚本和苹果几乎一模一样你可以直接把苹果的脚本复制给香蕉只需要改一下下落速度比如将y坐标增加-6让它掉得快一点和初始大小游戏就会更有层次感。你看通过“克隆”和“循环判断”我们只用一套逻辑就实现了水果源源不断、随机下落的效果这就是编程的魅力。5. 制作灵敏的接物篮键盘控制与碰撞检测水果们已经欢快地下落了现在我们需要一个能接住它们的英雄——篮子。这个篮子的控制必须灵敏碰撞检测必须精准这直接决定了游戏的手感和可玩性。如果篮子移动起来一卡一卡的或者明明碰到了水果却没反应玩家很快就会失去耐心。所以这一部分我们要做得格外仔细。首先是键盘控制移动。我们希望用键盘的左右方向键来控制篮子左右移动。这非常简单在篮子的脚本区我们使用“事件”类里的“当按下左移键”和“当按下右移键”这两个积木。在“当按下左移键”下面拼接一个“将x坐标增加-10”在“当按下右移键”下面拼接一个“将x坐标增加10”。这样按下左键篮子就向左移动10个像素按下右键就向右移动10个像素。你可以调整这个数字来改变移动速度。但这里有个小问题如果玩家一直按住按键篮子会移动得非常快甚至冲出屏幕。所以我们可以加一个“重复执行”套在外面但里面要加一个“等待0.05秒”的小延迟这样既能保证移动流畅又不会失控。其次是设置篮子的初始位置和状态。和水果一样篮子也需要响应游戏的开始和结束。我们为篮子编写两段主要的脚本。第一段是初始化当绿旗被点击时将篮子移动到舞台底部中央的位置比如x:0, y:-150并将大小设定为合适尺寸比如70%然后隐藏。第二段是游戏进行时当接收到“游戏开始”广播时显示篮子并开始响应键盘控制。当接收到“游戏结束”广播时则隐藏篮子并且停止“该角色的其他脚本”这样键盘控制就失效了玩家不能再移动篮子。最关键的部分是碰撞检测的优化。在水果的脚本里我们已经写了“如果碰到篮子那么加分”。但Scratch默认的“碰到”判断是根据角色造型的轮廓不透明部分来计算的。有时候因为视觉误差或者角色造型不规则可能会觉得“明明碰到了却没反应”。这里我分享两个实测下来很稳的优化技巧为篮子角色添加一个简单的碰撞区域。在造型编辑界面用矩形工具画一个扁平的、颜色醒目的长方形覆盖在篮子开口的位置。然后在水果的碰撞判断条件里不直接用“碰到篮子”而是用“碰到颜色……”这个侦测积木颜色就选取你画的那个长方形的颜色。这样碰撞检测就只以这个长方形区域为准非常精准。防止单次碰撞重复计分。有时候一个水果克隆体下落时可能会和篮子接触多个瞬间导致一次接触就连续加了多次分。为了解决这个“粘连”问题我们可以在水果克隆体的脚本里一旦判断“碰到篮子”并加分后立刻让它“隐藏”或者“移到舞台外”紧接着就“删除此克隆体”。确保加分和消失是瞬间连续完成的不给它重复判断的机会。提示你可以给篮子设计两个造型比如一个正常的造型一个“接到水果时咧嘴笑”的造型。在判断碰到水果后除了加分和播放音效再加一个“将造型切换为…”和“等待0.2秒”然后再切回正常造型。这样一个简单的动画效果会让游戏的反馈感强很多玩家接住水果时会更有成就感。6. 游戏的大脑用变量实现计时与计分现在我们的游戏已经有了会动的角色和可控制的篮子但还缺少一个统管全局的“大脑”。这个大脑负责记录游戏的进程还剩多少时间和玩家的成就得了多少分并在适当的时候触发游戏开始与结束。在Scratch里这个大脑的角色通常由“舞台”或者一个隐藏的“控制器”角色来担任而实现它的核心工具就是我们之前创建的变量。我们先来打造游戏的“心跳”——倒计时。“剩余时间”这个变量就是我们的计时器。我们需要在游戏开始时将它设为60代表60秒然后让它每秒自动减1直到变成0。在哪里做这件事呢我习惯在“舞台”的脚本里做全局控制。选中舞台背景在它的脚本区添加如下逻辑当绿旗被点击时将“剩余时间”设为60并广播“游戏开始”消息这会触发所有角色进入游戏状态。然后用一个“重复执行直到……”的循环。在循环里先“等待1秒”然后“将剩余时间增加-1”。这个循环会一直执行直到“剩余时间0”。当循环结束即时间到0立刻广播一条“游戏结束”的消息。这条消息会通知所有角色游戏结束了该收尾了。这样一个简洁而可靠的计时系统就完成了。你可以在舞台上显示“剩余时间”变量玩家就能清晰地看到时间一秒一秒地减少紧张感自然就来了。接下来是游戏的“成绩单”——计分系统。“我的得分”变量记录玩家的成果。它的逻辑相对简单主要是在水果角色那边被修改。我们在水果克隆体的脚本里已经写好了如果碰到篮子就将“我的得分”增加1。这里我想分享几个让计分更有趣的小技巧差异化计分为什么不让不同的水果有不同的分值呢比如接到苹果加1分接到掉得更快的香蕉可以加2分。你只需要在香蕉角色的克隆体脚本里把“将我的得分增加1”改成“将我的得分增加2”就行了。这个小改动能立刻增加游戏的策略性玩家会更有动力去接那些更难接的水果。连击奖励我们可以增加一个隐藏的“连击数”变量。每当接到一个水果连击数就加1如果水果落地没接到连击数就归零。然后实际加分值可以设计为“基础分 × 连击系数”。比如连击达到3次系数变成1.2达到5次系数变成1.5。这样能鼓励玩家追求连续成功玩起来更刺激。分数动画当加分时让分数显示有一个“蹦跳”或“放大缩小”的动画效果视觉反馈会更强烈。这可以通过在舞台的脚本里当“我的得分”变量发生变化时短暂地改变变量显示器的样式来实现虽然Scratch原生不支持直接动画化变量显示器但我们可以创建一个专门显示得分的角色通过改变其造型大小来模拟。最后是游戏状态的协调。变量和广播消息共同构成了游戏的大脑和神经系统。“剩余时间”为0是触发“游戏结束”广播的条件。而“游戏结束”广播一发出所有角色都应该做出响应水果停止克隆和下落篮子停止移动并隐藏舞台切换到结束背景并显示最终得分。确保每个角色都监听了“游戏结束”消息并做出了正确的行为比如停止自己的脚本这是让游戏干净利落结束的关键否则后台可能还在运行着看不见的克隆过程消耗电脑资源。7. 调试与优化让你的游戏更流畅好玩游戏的基本功能都实现了点击绿旗也能跑起来。但先别急着庆祝我们现在进入到一个可能比写代码更有趣也更有挑战的阶段——调试与优化。我做过很多个小游戏几乎没有哪个是一次运行就完美无缺的。总会有点小毛病比如水果卡在边缘了、分数显示不对、或者游戏结束后声音还在响。别担心这些都是正常的解决它们的过程才是你编程水平真正提升的时候。首先进行系统性的功能测试。你可以把自己当成一个挑剔的玩家按照不同的场景去玩你的游戏正常游戏流程点击绿旗看到开始界面点击开始游戏启动水果下落篮子可控接到水果加分时间减少时间到弹出结束界面并显示分数。整个流程是否顺畅边界情况测试把篮子移动到最左边和最右边水果还能正常落下和消失吗在游戏结束时快速连续按键篮子还会动吗不应该再动。在最后一个水果还在空中时时间到了它会立刻消失吗压力测试试着把水果的下落速度调快同时下落的水果数量调多减少克隆间隔的等待时间看看游戏会不会变卡顿这是检验你程序效率的好方法。针对常见问题这里有几个我踩过的坑和解决方案水果堆积在底部不消失这通常是因为“碰到舞台边缘”这个条件不够精确。Scratch的舞台边缘是一个矩形框有时水果的造型可能因为旋转等原因其图形边界没有真正碰到那个框。解决办法是在下落循环的结束条件里加一个“或”逻辑除了“碰到舞台边缘”再加一个“y坐标 -180”假设舞台底部y坐标是-180。双保险更可靠。游戏结束后还有残留的音效这是因为音效播放积木“播放声音…等待播完”在游戏结束广播发出时可能正在执行。为了避免这种情况我们可以在播放音效前加一个判断。在水果克隆体的脚本里在“播放咔吃声”之前插入一个“如果剩余时间 0”的条件。这样即使克隆体在时间到的瞬间碰到篮子也不会播放音效了。变量显示干扰游戏画面舞台上的“我的得分”和“剩余时间”变量显示器有时位置和样式不太美观。你可以右键点击舞台上的变量显示器选择“大屏显示”或“正常显示”来切换样式。更高级的做法是隐藏这两个默认显示器自己创建两个“角色”来专门显示分数和时间这样就可以完全自定义字体、颜色和位置了。然后是游戏的优化与个性化。基础功能没问题后我们就可以想办法让它更好玩了增加难度阶梯不要让游戏60秒一成不变。我们可以用“时间”变量来控制难度。例如当“剩余时间”小于30秒时可以广播一条“加速”消息让所有水果角色的下落速度在原有基础上再增加一些或者让克隆的频率变高。这能给玩家带来渐进的挑战。添加背景音乐和更多音效在舞台的脚本里当游戏开始时用“播放声音…等待播完”和“重复执行”积木来循环播放一段轻松的背景音乐。同时为游戏开始、接到特殊水果、时间警告最后10秒、游戏结束等时刻配上不同的音效游戏的氛围感会大幅提升。设计更丰富的角色和道具除了苹果和香蕉你完全可以添加草莓、葡萄、甚至炸弹碰到会扣分为篮子设计多个造型让它接到一定分数后可以“升级”变大。这些改动无非就是复制角色、修改造型、调整脚本里的参数和判断条件。大胆尝试这是属于你的游戏。调试的过程可能有点繁琐但每解决一个问题你对程序运行逻辑的理解就会加深一层。当你最终看到一个流畅、有趣、几乎没有Bug的游戏在自己手中诞生时那种满足感是无与伦比的。记住现在这个接水果游戏只是一个起点你已经掌握了Scratch游戏制作的核心套路角色控制、克隆、变量、广播和循环判断。有了这些你完全可以发挥想象力去创造属于你自己的故事、动画或者更复杂的游戏了。