【Scratch3.0案例教学】手把手教小朋友制作飞机大战、空中格斗、星际争霸等超酷游戏

案例名称:空中格斗(飞机大战)

一、案例介绍

 小朋友们在书上或者电视或者电影里面经常可以看到,为了维护国家和地区安全,为了抵挡外来入侵等等。战斗机与战斗机互相在空中格斗的这么一个场景。我们今天就是来模拟一个空中格斗的游戏。在本案例汇总,敌机会源源不断的从上方飞来,不同的敌机坚硬程度不一样,我们通过鼠标来控制我们战斗机的移动,瞄准敌机将其击毁,每击毁一架敌机,就可以获得相应的积分,越是坚硬的敌机得分就越高。千万不要让敌机撞到我们的战斗机,否则我们的战斗机就会被撞毁,游戏结束。

二、案例演示

我们先通过一段视频来看一下我们最终实现的一个游戏效果

【Scratch案例演示】Scratch空中格斗 Scratch星际大战

三、案例分析

3.1、角色分析

  • 我方战斗机:通过鼠标控制移动(只能左右移动),不断发射子弹
  • 敌机1:移动速度3,血量1,产生时间2秒,1发子弹就可击毁,击毁后得分加1分
  • 敌机2:移动速度2.5,血量2,产生时间3秒,2发子弹就可击毁,击毁后得分加2分
  • 敌机3:移动速度1.8,血量3,产生时间4秒,3发子弹就可击毁,击毁后得分加3分
  • 敌机4:移动速度1,血量4,产生时间5秒,4发子弹就可击毁,击毁后得分加4分
  • 子弹:我方战斗机的弹药,通过发射子弹消灭入侵的敌机,子弹数量源源不断
  • 炸弹:这个是我们的超级武器,只要发射,屏幕上所有的敌机全部销毁,但这个炸弹是每间隔一段时间才会在舞台上出现,我方战斗机碰到之后才能拥有。
  • 游戏结束:当我方战斗机被撞毁之后,游戏结束。

3.2、背景分析

  •  背景:天空

四、角色和背景设置

4.1、角色设置

1、删除默认的小猫角色,然后从电脑上导入我们的战斗机角色,如下图所示:

  

2、采用同样的方式,将敌机角色、子弹和炸弹以及游戏结束角色依次导入进来,完成如下图所示:

4.2、背景设置

1、从电脑上导入我们蓝天背景,并删除默认的空白背景,如下图所示:

    

2、最后调整好每个角色的大小和位置,完成如下图所示:(除了我方战斗机,其它角色开是都是隐藏的)

五、流程分析

5.1、我方战斗机

我放战斗机将会有2条积木指令并行执行,具体分析如下:

1、程序启动的时候跟随鼠标来回移动,移动过程中是否碰到敌机;

2、当接收到游戏结束的时候,停止游戏

当接收到游戏结束→停止该角色的其它脚本→说我还会再来的

PS:【】代表循环结构,重复执行

        <>代表条件判断结构,是否满足条件(下同)

5.2、敌机1

每种敌机将会有4条积木指令并行执行,具体分析如下:

1 程序启动的时候初始化,并实现自我克隆(不断产生新的敌机)

  程序启动→隐藏→初始方向→初始大小→重复克隆自己【克隆自己→时间间隔】

2 作为克隆体启动的时候,实现从上往下飞,飞行途中碰到子弹会消失,碰到最底部边缘也会消失

3 当收到发射炸弹时,会消失

  当收到发射炸弹→将得分增加1→删除克隆体

4 当收到游戏结束时,停止游戏

         当接收到游戏结束→停止该角色的其它脚本

5.3、敌机2

敌机2同样有4条积木指令并行执行,具体分析如下:

1 程序启动的时候初始化,并实现自我克隆(不断产生新的敌机);跟敌机1不同的是,在初始化之后克隆之前会有一个等待时间,也就是出来的时间等待,比敌机1晚一点。

         程序启动→隐藏→初始方向→初始大小→等待时间→重复克隆自己【克隆自己→时间间隔】

2 作为克隆体启动的时候,实现从上往下飞,飞行途中碰到子弹会消失,碰到最底部边缘也会消失

3 当收到发射炸弹时,会消失

  当收到发射炸弹→将得分增加1→删除克隆体

4 当收到游戏结束时,停止游戏

         当接收到游戏结束→停止该角色的其它脚本

5.4、其它敌机

   其它敌机的程序流程可以参考敌机2 的流程,出来的时间比敌机2晚点,血量、移动速度、得分请参考前面的角色分析。

5.5、子弹

子弹将会有两条积木指令并行执行,具体分析如下:

1 程序启动时候,实现自我克隆(不断发射子弹)

程序启动→隐藏→初始方向→初始大小→重复克隆自己【克隆自己→时间间隔】

2 当作为克隆体启动时,实现子弹的发射

5.6、炸弹

炸弹我们这边设置了5条积木指令并行执行,具体分析如下:

1 自定义积木,由于多处用到炸弹的初始位置和出现时间间隔,所以设置成自定积木,简化积木的冗余  

 定义初始炸弹→隐藏→时间间隔(炸弹多久出现一次)→初始位置→显示

2 程序启动时,炸弹初始化以及下落的过程

3 程序启动时,实现我们炸弹一闪一闪若隐若现的效果

         程序启动时→不断若隐若现【将虚像特效设为0→时间间隔→虚像特效设为100→时间间隔】

4 当按下空格键,发射炸弹

 

5 当接收到游戏结束,停止角色的脚本

  当接收到游戏结束→停止改角色的其它脚本

5.7、游戏结束

游戏结束设置了2条积木指令并行执行,具体分析如下:

1 程序启动时,隐藏(开始的时候不显示)

  程序启动→隐藏

2 接收到游戏结束时,显示

         当接收到游戏结束→移到舞台中央→显示

5.8、背景

背景同样设置了2条积木指令并行执行,具体分析如下:

1 程序启动时,重复播放背景音乐

  程序启动→【播放背景音乐】

2 接收到游戏结束时,停止其他脚本

         当接收到游戏结束→停止该角色的其它积木指令

六、用到指令

6.1、运动模块

  • :角色移动指定的步数,正数就是向前,负数就是向后
  • https://img-blog.csdnimg.cn/20200626203615123.png​:将角色移动到舞台中央指定的X/Y坐标位置,默认坐标(x:0,y:0)
  • :将角色朝向指定的角度
  • :将角色的Y坐标也就是纵向增加指定的值,正数朝上,负数朝下
  • :角色碰到边缘后就会以垂直边缘为中线的对称角度进行反弹
  • :旋转方式有三种模式,分别是:左右翻转(正常向左向右)、不可旋转(不能旋转)、任意旋转(朝任何角度旋转也是默认旋转方式)
  • :获取当前角色X的坐标值
  • :获取当前角色Y的坐标值

6.2 外观模块

  • :说一句话,并在舞台上显示一定的时间
  • :将角色的大小设定为指定的值,这里面的大小指的是百分比
  • :这是设置角色的特效值,特效分别有颜色、鱼眼、旋涡、像素化、马赛克、亮度和虚像。我们这个案例中要用到的是虚像。
  • :将角色显示在舞台上
  • :将角色不显示在舞台上

6.3 声音模块

  • :播放某个声音并等声音播放完成在执行后面的积木指令

6.4 事件模块

  • https://img-blog.csdnimg.cn/20200626204050146.png​:程序启动之后,点击小绿旗,执行后续的程序脚本
  • :获取到键盘上指定的按键被按下的消息,默认的是空格键,下拉三角可选择字母a-z的26个键、数字0-9的10个键、上下左右方向键以及任意按键。
  • :当接收到某个消息的时候,执行后续的积木指令
  • :向所有的角色发送一个消息,同时执行后面的积木指令

6.5 控制模块

  • https://img-blog.csdnimg.cn/20200611195110690.png​:时间间隔,等待指定的时间后执行后面的指令
  • :一直重复执行积木框里面的积木
  • :条件判断,如果条件为真,那么执行积木框里面的积木,在执行后面的积木;条件为假,框里面的积木不执行,执行后面的积木
  • :停止脚本执行,下拉可选项有停止全部脚本、这个脚本和该角色的其他脚本

6.6 侦测模块

  • :是否碰到鼠标指针,下拉可选项还有舞台边缘和其它角色
  • :获取鼠标的X坐标值
  • :获取鼠标的Y坐标值
  • :获取舞台的背景编号、背景名称、音量、变量名称;或者是角色的X坐标、Y坐标、方向、造型编号、造型名称、大小、音量和变量名称

6.7 运算模块

  • :加法运算,两个参赛相加;参赛可以是具体的数值,也可以是其它变量或者系统变量,或者其它参数表达式
  • :在某个区间中随机产生数值,可以是整数也可以是小数
  • ​:逻辑判断模块,判断前面的值是否大于后面的值,大于返回逻辑值真,否则返回假
  • :逻辑判断模块,判断前面的值是否等于后面的值,等于返回逻辑值真,否则返回假

6.8 变量模块

  • ​:新建变量,弹出框中输入变量名称,可以选择适用所有角色和仅适用当前角色
  • :将指定的变量设为指定的值
  • :将制定的变量增加制定的值
  • :获取变量的值,前面方框有打钩就会在舞台上显示,没有选中就不会显示在舞台上

6.9 自制积木模块

  • ​:定义一个新的积木,弹出框中输入积木名称,还可以设置自定的积木是否需要带有输入项
  • :自己定义的某个积木

七、程序指令编写

7.1、战斗机

  1. 点击小绿旗,程序启动执行后面的积木指令
  2. 战斗机的初始大小
  3. 设定战斗机的初始朝向
  4. 将旋转方式设置为左右翻转
  5. 初始化得分变量(得分是一个全局变量,所有角色都可用)
  6. 战斗机一直左右移动,重复执行第7-10个积木指令
  7. 将战斗机跟随鼠标移动,由于只能左右移动,所以只要设置X坐标跟随鼠标的X坐标即可
  8. 设置战斗机碰到边缘后反弹
  9. 判断战斗机是否碰到敌机,由于敌机有多种型号,所以需要通过逻辑或运算将每种敌机都列出来,如果碰到了则执行第10个积木指令
  10. 向所有角色广播一个游戏结束的消息。
  11. 当接收到游戏结束的消息,执行后续积木指令
  12. 停止改角色的其它脚本
  13. 说:我还会在回来的一句话,并显示3秒钟
  14. 停止案例的所有脚本

7.2、敌机1

  1. 程序启动后,执行后面的积木指令
  2. 将敌机本体隐藏
  3. 初始朝向
  4. 初始大小
  5. 不断克隆自己,产生新的敌机1(重复执行第6-7个积木指令)
  6. 克隆自己
  7. 时间间隔2秒钟后在克隆
  8. 当接收到游戏结束时,执行后面的积木指令
  9. 停止该角色的其它脚本
  10. 当接收到发射炸弹时,执行后面的积木指令
  11. 将得分变量增加1
  12. 删除当前克隆体
  13. 当作为克隆体启动时,执行后面的积木指令
  14. 初始化敌机的位置,在舞台的上方Y=150,横坐标采用随机数的方式
  15. 将敌机显示在舞台上
  16. 将敌机1的血量设为1
  17. 敌机朝战斗机飞来,重复执行第18-25个积木指令
  18. 敌机1飞行的速度,每次向下飞行3像素
  19. 判断飞行途中是否碰到舞台边缘,如果是执行第20个积木指令
  20. 删除当前克隆体
  21. 判断飞行途中是否碰到子弹,如果是执行第22个积木指令
  22. 将敌机的血量减少1
  23. 判断敌机的血量是否等于1,如果是执行第24-25个积木指令
  24. 将得分变量增加1
  25. 删除当前克隆体

7.3、其它敌机

  • 其它敌机和敌机1的程序差不多,不同的地方在于上图标注的1-6
  • 1是敌机1不存在的,后面的敌机都有一个出场的时间,敌机越厉害的会越晚出场,时间间隔相差一点
  • 2是敌机每次出现的频率,同样越厉害的频率就会越小
  • 3是击毁敌机得到的分数,越厉害的敌机击毁后得分越多
  • 4是敌机的血量,越厉害的敌机血量越多
  • 5是敌机飞行的速度,血量越多的敌机飞行的越慢
  • 6和3是一样的

7.4、子弹

  1. 程序启动后,执行后面的积木指令
  2. 将子弹本体隐藏
  3. 初始朝向
  4. 初始大小
  5. 不断克隆自己,产生新的敌机1(重复执行第6-7个积木指令)
  6. 克隆自己
  7. 每间隔0.3秒钟就克隆一次
  8. 当作为克隆体启动时,执行后面的积木指令
  9. 由于子弹石油我们战斗机发射出去的,所以我们将子弹的X坐标设定为战斗机的X坐标,子弹的Y坐标设定为战斗机的Y坐标加上一个数值33,这样子弹出现的位置就在战斗机机头的位置,这样比较符合我们的案例
  10. 将子弹显示在舞台上
  11. 子弹向敌机飞去,重复执行第12-17个积木指令
  12. 子弹飞行的速度,每次向上飞行3像素
  13. 判断子弹飞行途中是否击中敌机,如果是执行第14-15个积木指令;由于敌机有多种型号,所以每个型号的敌机都通过逻辑或将他们列出来
  14. 非常短暂的间隔(删除之前,没有这个间隔,有可能在敌机的程序模块里面碰到子弹要扣血量时候有可能没有扣,因为如果角色删除了,与删除的角色有关的指令是不会执行的)
  15. 删除当前克隆体
  16. 判断子弹是否碰到舞台边缘,如果是执行第17个积木指令
  17. 删除当前克隆体

7.5、炸弹

  1. 程序启动后,执行后面的积木指令
  2. 炸弹掉落的同时若隐若现一闪一闪的效果实现,重复执行第3-6个积木指令
  3. 将虚像特效设为0
  4. 时间间隔0.1秒
  5. 将虚像特效设为100
  6. 时间间隔0.1秒
  7. 当按下空格键的时候,执行后续的积木指令
  8. 如果炸弹的数量大于0,执行第9-10个积木指令
  9. 将炸弹数量减少1
  10. 向所有的角色发送广播消息“发射炸弹”
  11. 自定义积木模块“初始炸弹”
  12. 将炸弹隐藏
  13. 炸弹出现的频率,每隔15秒出现一次
  14. 炸弹出现的初始位置,在舞台上方Y=160,横坐标随机
  15. 将炸弹显示在舞台上
  16. 程序启动后,执行后面的积木指令
  17. 初始炸弹(引用自定义积木,设置炸弹的初始信息)
  18. 炸弹的初始大小(当然我们也可以把这个初始大小写到自定义积木初始炸弹里面,只是我们炸弹的初始大小不需要每次都进行设置,后面还会多次用到初始炸弹这个自定义积木)
  19. 设置炸弹的初始数量0
  20. 炸弹从舞台上方往下落,重复执行第21-28个积木指令
  21. 炸弹下落的速度2像素
  22. 判断炸弹下落途中是否碰到舞台边缘,如果是执行第23个积木指令
  23. 初始炸弹(引用自定义积木,设置炸弹的初始信息)
  24. 判断炸弹下落途中是否碰到子弹,如果是执行第25-26个积木指令
  25. 将炸弹数量加1
  26. 初始炸弹(引用自定义积木,设置炸弹的初始信息)
  27. 当接收到游戏结束时候,执行后续的积木指令
  28. 停止当前角色的其它积木指令

7.6、游戏结束

  1. 程序启动后,执行后面的积木指令
  2. 将Game Over隐藏起来
  3. 当接收到游戏结束时,执行后续积木指令
  4. 将Game Over移到舞台中央
  5. 将Game Over显示在舞台上

7.7、背景

  1. 程序启动后,执行后面的积木指令
  2. 重复播放背景音乐,重复执行第3个积木指令
  3. 播放背景音乐,并等待音乐播完在执行后续积木指令
  4. 当接收到游戏结束时,执行后续积木指令
  5. 停止该角色的其它积木指令

八、知识点回顾

  • 掌握坐标轴和坐标值的概念及使用
  • 掌握条件判断语句的使用
  • 掌握消息发送和消息处理机制
  • 熟练掌握变量的定义和使用
  • 学会使用自定义积木,实现减少代码冗余
  • 熟练掌握碰撞检测机制,理解多角色之间是如何进行碰撞的
  • 充分理解并掌握运算模块中随机数、逻辑判断及逻辑或的使用
  • 学会将复杂的程序流程简单化,学会分析问题和解决问题

九、拓展思维

  • 优化我们的游戏案例
  • 添加子弹击中敌机音效
  • 添加战斗机被撞毁的音效和视觉效果
  • 添加炸弹爆炸的音效和视觉效果
  • 添加游戏结束时的音效
  • 思考如何实现敌机发射子弹
  • 思考如何实现敌机左右随机移动
  • 添加更厉害的敌机
  • 达到一定分数得时候添加敌机BOSS,让游戏更加丰富
  • 添加不同的子弹效果,实现更丰富的游戏体验

 

猜你喜欢

转载自blog.csdn.net/frank2102/article/details/108800704