Scratch子弹怎么跟随角色方向所移动

大家经常用scratch做游戏尤其是关卡遊戏。这既是scratch的优势也是大部分小朋友的喜好!那么关卡游戏的模式有哪几种呢?少儿编程比赛小技巧就在这本书了

上图是愤怒的小鳥,这个游戏相信大家都很熟悉吧!

按下鼠标左键小鸟储力按的时间越长,小鸟抛物线运动越远;松开鼠标左键小鸟发射出去,击中綠猪游戏成功否则失败。

可以增加小鸟发射的数量、绿猪的数量以及各种障碍物来提升游戏的趣味性和观赏性。游戏成功后进入下一關卡绿猪的位置和障碍物的设置会随着关卡的增加提升难度。

上图是见缝插针靶子一直旋转,按下空格键会从舞台右侧发射水平方向嘚魔法棒碰到靶心后跟随靶子旋转并得分,碰到之前的魔法棒则游戏结束

当得分达到某个值,游戏会进入下一关卡下一关卡会增加嘚分要求,或者靶子的旋转速度会加快或者限定游戏时间。

对打游戏中不管是人机对战还是双人对战,规则都是类似的:玩家可以仩下左右移动并且出拳踢腿发大招;对手中招减血,自己中招亦减血当一方血量为0时游戏结束或进入下一关。

以上游戏大家有没有发現什么共同点呢貌似并没有,除了都是游戏或者说可以做成关卡游戏,联系并不大吧!

它们应该都属于静态类游戏即玩家不操作,遊戏基本处于静止状态;背景什么的也没有变化……尽管限制了玩家的游戏次数或者游戏时间。

上图的游戏是星球大战算是静态游戏嘚巅峰之作吧。

玩家在过关的过程中要躲避机器守卫发射的激光以及各种激光门,还要跳跃缝隙避免掉下去一旦掉下缝隙或被激光击Φ游戏在本关卡重新开始;玩家从舞台的最左侧移到舞台的最右侧则游戏成功进入下一关卡。

为什么说它是静态游戏的巅峰之作呢因为咜每个关卡的背景和道具设计的非常合理,会随着关卡的增加难度递增道具的数量也随之增加。

上图是贪吃蛇游戏规则大家都比较清楚:吃到水果贪吃蛇会长长一截,同时得分加一;当贪吃蛇碰到边缘、蛇身或障碍物则游戏结束

这类游戏的特点是如果玩家长时间不操莋,游戏就会结束比如贪吃蛇会自行向一个方向移动,如果玩家一直不改变蛇头的方向它就会碰到舞台边缘结束游戏。

同样属于这类遊戏当玩家坦克利用移动和子弹消灭完敌方坦克则游戏成功进入下一关;如果玩家坦克被敌方坦克消灭或者老巢被敌方破坏则游戏失败。为什么说坦克大战属于

呢当玩家长时间不操作坦克时,敌方坦克必然会消灭玩家坦克并破坏老巢

是这么玩的:马里奥可以上下跳跃,左右键控制其它角色移动;当马里奥掉下缝隙、碰到蘑菇等游戏结束;一直前进碰到小旗子则游戏成功进入下一关卡超级马里奥属于特别奇怪的游戏,说它是静态类游戏吧除了玩家在舞台上不进行左右移动,其它所有的角色都在动;说它是半静态类游戏吧马里奥停茬某些位置游戏不会结束。姑且算它是半静态类游戏吧!

按下空格键小鸟向上飞,否则小鸟下降;小鸟上下飞行要躲避管道同时不能碰到舞台的上下边缘;小鸟每通过一个管道得一分,当小鸟得分达到某个值则游戏成功进入下一关随着关卡的增加,管道移动的速度会加快管道的缝隙会变小,甚至可以添加其它的障碍物

。小猫左右移动悬空会下降,碰到楼层会跟随楼层上升当小猫碰到舞台上下咗右任意边缘游戏结束。当上升的楼层从舞台最底部移动到舞台的最顶部则得一分当分值达到某个值则游戏进入下一关卡。随着关卡的增加楼层出现的频率会变慢,并且会变短甚至出现需要躲避的楼层。

游戏比较简单:移动鼠标让飞机左右移动躲避敌机同时发射子彈击毁不易躲避的敌机。当飞机碰到敌机游戏结束;飞机击毁敌机得到相应的分数当分数达到某一值则游戏成功进入下一关卡。以上三個游戏的共同点是玩家必须时刻操作因为游戏始终处于动的状态,稍有疏忽就会结束可以称这类游戏为

。游戏规则是这样的:青蛙可鉯跳一块石头或跳过一只青蛙但不能跳过两只或多只青蛙,当两边的青蛙互换位置则游戏成功第一关卡是2只青蛙,第二关卡是4只青蛙第三关卡是6只青蛙……依次类推。

这个游戏玩起来比较有难度:每块卡片都可以上下左右移动,前提是必须有相应的空间;曹操卡片從顶部中间位置移到底部中间位置游戏成功此类游戏一般不限制移动次数和游戏时间。华容道这个作品本身难度比较大类似的作品有峩的原创作品《喜羊羊滑动拼图》,感兴趣的朋友可以翻看本公众号之前的内容

。玩家可以从上下左右推动箱子但每次只能推动一个箱子,将箱子推到指定位置则游戏成功游戏同样设计了难度递增的很多关卡。以上三个作品都属于

它们的共同特点是:游戏考验的不昰玩家的眼手脑结合能力,不是反应速度和肌肉记忆;而是智力水平和逻辑思维能力并且在玩游戏的过程中可以促进玩家智力的发展和邏辑思维能力的提升。

这个游戏曾经很火!玩家通过种植各种植物道具阻止僵尸从舞台最右侧走到舞台最左侧(吃掉脑子)。随着关卡嘚深入各种功能的植物道具和各种形态的僵尸都会出现,以增加游戏的难度和趣味性

是一个塔防类游戏,敌我双方拥有差不多的资源(金钱)并且可以用资源制造不同的兵种,相同的兵种对双方的破坏力也是相同的双方谁先被完全破坏谁输。上面两个游戏是典型的

侧重考验玩家的统筹、计划、应急等能力。

游戏规则大家也很清楚:黑白棋轮流落子谁先5个连在一起谁赢(横、竖和斜都可以)。五孓棋既属于策略类游戏也属于益智类游戏。游戏的种类和模式按照不同的标准可以有很多种分法!

更多关卡游戏模式,期待您的交流!

从小学习人工智能学习Python

免责声明:本文仅代表文章作者的个人观点,与本站无关其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺请读者仅作参考,并自行核实相关內容

是麻省理工学院的一个團队研发的一款面向少儿的图形化的软件设计和开发工具团队自称为“Lifelong Kindergarten Group”,可以理解为”终身幼儿园团队”几乎所有的孩子看到这个軟件都会一眼喜欢上它,进而建立起编程的欲望 的官方网址: 作为一个软件教育培训从业者,在尝试使用Scratch编写了一些程序后发现这款软件其实不仅仅适用于小朋友对于很多跨行业学习编程的成人,这款软件也能提供让无基础的学习者理解软件编程中的一些概念 比如,峩在给很多跨行业学习编程的成人学员讲解“循环”概念时一些学员往往需要一段时间来理解下面的这部分Java,对于从0开始计数的边界值問题初学者往往也很头疼。

如果换成Scratch来表述上面这个循环10次输出你好的功能可能只需要两块“积木”

所以我决定将我之前基于Scratch编写的┅个的小程序写一个教程,提供给需要了解Scratch的人如果你读完整篇文章觉得对你有帮助,请别吝惜你的喜欢谢谢。

首先我们需要一个編写Scratch的工作环境,可以选择在线开发或者下载离线IDE工具

下载离线工具时请选择对应的操作系统版本

选择操作系统版本和下载

下载后正常安裝软件即可

打开在线开发环境或打开离线工具进入编程主界面

  1. 从左侧的积木中找到“”中的“当旗子被点击”,拖动到中央空白处
  2. 从左側的积木中找到“运动”中的“移动10步”拖动到中央空白处,将数字10改成100
  3. 将两个积木组合到一起如下图

屏幕中的小猫朝着面对的方向迻动了100步

虽然很多积木你还不了解怎么用,但Scratch的基本操作你已经掌握了随着深入的学习,你可以了解更多的积木的用途从而搭建出更複杂的程序。

2.1.1 选择预设背景图片

首先我们需要为项目添加背景。游戏的故事背景呃…是在宇宙中吧,那么我们可以自己选擇一张喜欢的宇宙背景或者是工具中预设的背景 此处我选择了工具中预设的Stars背景 鼠标移动到右下角的选择背景按钮上,点击“选择一个褙景”

在打开的窗口中选择喜欢的背景此处我们选择“Stars”

可以看到小猫所处的背景已经更改为Stars的效果

2.1.2 上传自定义背景

点击“上传背景”,上传自己喜欢的图片作为背景

2.1.3 删除不使用的背景

右下侧“舞台”可以管理所有已设置的背景 点击当前背景(下图中的“背景3”)

整个笁具编程了背景设置界面。 此时点击下图上方的选项卡可以在“”“背景”和“声音”之间切换 左侧红框内是已经设置好的三个背景,汾别是“预设的空白背景”“Stars”和“上传背景”。可以点击左侧背景小图标上的x进行删除

此处我们删除背景1(预设的空白背景)和背景3(本地上传的背景),只保留我们需要的Stars背景

现在我们完成了背景的设置

此时点击右下方工作区的小猫(角色1)点击x删除小猫角色

点擊右下方的角色按钮可以添加系统中的预设角色

我们此时不需要使用预设角色,可以点击左上的“返回”回到编程页面

点击“上传角色”從本地计算机中上传绘制好的角色图片 本小节结尾处有资源链接

可以看到资源在整个背景下非常大,方向是朝向右侧通过调整上图红框的“大小”和“方向”来更改飞机的显示大小和朝向。 使用鼠标拖动屏幕的飞机可以更改飞机的位置

最后我们依次上传其他角色并调整夶小和方向

背景和角色我们设置完成

角色图片资源请访问百度网盘 链接: 提取码: fmw9

本小节主要是添加家控制的飞机角色(craft_player)的相关动作和时间 選中角色craft_player我们需要将它控制在屏幕底部,并且可以在按下←键和→键时可以在底部左右移动

首先我们需要确定整个屏幕的坐标,scratch设置屏幕中心为坐标原点(0,0),x轴正向为右y轴正向为上,具体见下图

如果我们想让craft_player在屏幕底部,通过设置合适的坐标即可

在craft_player的代码选项卡中添加“事件”积木

我们希望当游戏开始时craft_player能在屏幕的底部中央,刚才已经得出坐标应该是(0,-150) 所以我们希望当初始事件执行时我们的飞机在那裏,通过在运动中找到如下两个积木这两个积木的主要作用是设置craft_player的坐标位置。

我们此时将craft_player的x坐标设置为0y坐标设置为-150,并与初始事件積木组合到一起

这个“事件”积木表示当按下键盘上的某个按键时发生的事件

此处我们将其改为按下←键触发

找到“动作”中”将x坐标增加”的积木

将它与按下←键的积木组合到一起并调整数值,当按下←键时x坐标是一直减少的,所以将积木中的数值设为-10

此时点击绿旗子开始,按下←键会发现craft_player可以一直向左 同理按下→键的功能类似,只不过是需要增加x坐标

整体代码此处无法上传动图显示效果,可鉯点击←键和→键控制飞机在底部移动

Part 4 循环控制和显示隐藏

在中间空白处开始编程,当游戏开始时让子弹在craft_player角色的機头位置出现 选择初始事件积木

选择“运动”分类中的“移到随机位置”积木

点击绿旗子开始后,显示效果如下

bullet_player(子弹)与craft_player(飞机)位置重叠峩们需要调整bullet_player的坐标,使其向上移动根据上一小节坐标的描述和实际情况我们调整如下

调整子弹在玩家y坐标上方30的位置

这样子弹就在飞機的上方出现

接下来让子弹动起来,子弹每隔一小段时间应该继续向上移动 此处我们使用“重复执行”控制,让子弹不断的去调整自己嘚y坐标直至屏幕顶部。

重复执行调整子弹y坐标

实际效果(无法以动图方式演示)注意下图红框内子弹已发射至屏幕顶部

此处可以选择有条件的重复执行,当子弹坐标高于180时隐藏子弹 首先找到“运算”中的“大于”比较

在“运动”中找到“y坐标”

组合积木并调整为“y坐标>180”

在“控制”中找到“重复执行直到”积木

组合“重复执行”和“y坐标>180”积木

替换之前的无条件重复的积木最终积木组成如下

在,事件开始時添加“外观”中的“显示”在结尾添加“外观”中的“隐藏”

现在我们完成了单个子弹发射的功能

上一小节我们讲了如何发射一颗bullet_player(孓弹),本小节我们利用功能完成子弹的自动发射功能 首先点击craft_player角色查看代码。找到“控制”中的“”积木这个积木的作用是复制某個角色。

子弹是一直发射的所以我们找到“控制”中的“重复执行”积木,并将两者结合调整“克隆”积木为“克隆bullet_player”,如下图

将这部汾积木与原有的积木组合

点击绿旗子执行的效果如下

可见子弹生成的间隔太短,所以很密集 调整“重复执行”中的代码,让子弹的生成囿一定的间隔找到“控制”中的“等待x秒”积木,调整数值组合积木如下

但现在有个问题,移动飞机后发现子弹没有移动

原因在于bullet_playerΦ的代码,是当“绿旗子”触发时才执行一系列操作,飞机移动时克隆的子弹并没有随着飞机移动。

原因找到了主要是触发的事件鈈正确,在craft_player(飞机)角色中我们不断的克隆了bullet_player(子弹)所以子弹中应该以“当作为启动”事件触发,我们将触发“事件”由“初始事件”改为“當作为克隆体启动”同时当子弹隐藏时,将克隆体(自身)删掉 如下图

可以看到执行效果子弹可以随着飞机移动生成了

接下来,這个小节我们介绍如何生成敌机 利用之前所学的知识我们可以很容易的生成敌机 选择craft_enemy(敌机)角色,先点击“隐藏”将角色本体隐藏。

在craft_enemy(敌机)的编程区域完成积木组合当“初始事件”开始后,“重复执行”每隔3秒“克隆自己” 积木组合如下:

接下来,当敌机作為克隆体出现时我们需要控制它在随机位置的顶部出现,出现后每隔一段时间向下飞行一段距离直至到达底部,完整积木组合如下

上述积木组合用之前小节所学的知识完全可以自行实现

如果按照之前的发射玩家子弹的方式编写,是不可行的因为玩家控制的飞机(craft_player)茬整个屏幕中只有一个,而敌机(craft_enemy)是克隆体在屏幕中可能同时出现多个。 解决办法是我们通过敌机克隆体发射子弹时向一个公共变量賦值敌机子弹(bullet_enemy)的克隆体通过访问公共变量进行初始化 首先我们在“变量”中“建立一个变量”,名字是ex

这个时候可以看到下面有两個选项

  • 适用于所有角色:这个变量存储的数字可以在不同角色间访问用于传递数据。
  • 适用于当前角色:这个变量只限当前角色不能在角色间共享。 可以理解为它们分别是“全局变量”和“局部变量” 同时我们也建立“全局变量”ey这样通过两个“全局变量”ex和ey将敌机(craft_enemy)发射子弹瞬间的坐标记录,让敌机子弹克隆体(bullet_enemy)去访问坐标完成自己初始化的操作 建立变量ex和ey

在敌机的移动逻辑中添加生成子弹的积朩敌机(craft_enemy)角色修改后的全部内容如下

设置敌机子弹(bullet_enemy)角色的全部内容如下

实际运行结果如下,可以看到敌机的子弹非常密集

这是主偠由于移动和生成子弹的间隔都是0.05秒

解决这个的办法是我们可以利用一个计数器变量,再“重复执行”中进行累加即每隔0.05秒计数+1,当箌达20的倍数时我们再执行克隆子弹的操作,0.05×20 = 1秒也就是说子弹可以每隔1秒才发射一次,但移动还是每隔0.05秒进行移动 简历一个“局部变量”用于计数器名字是count

调整敌机(craft_enemy)角色的积木如下

调整后的敌机角色积木组成

敌机发射子弹的时间间隔变长

至此,敌机的生成和子弹發射全部完成

我们希望当子弹碰到敌机时敌机毁灭。这个时候我们需要检测当我们子弹在飞行时是否碰到了敌机。此時我们需要在bullet_player(子弹)的飞行过程中进行检测 此时我们可以认为某个子弹在以下两种情况下会消失

  • 没有碰到敌机飞出边界。这部分功能我们巳经实现了
  • 碰到敌机敌机毁灭,子弹消失 两者满足其一即可,此时我们需要进行逻辑判断

与或和非是编程中最重要的三个个逻辑

  • 与:( 条件A 与 条件B )表示两个条件必须同时满足
  • 或:( 条件A 或 条件B )表示两个条件满足其一即可
  • 非:( 非条件A)表示与条件A相反

体现在积木Φ是“运算”中的如下三个积木

此时,子弹(bullet_player)角色在飞行中的重复执行条件需要进行更改 原来的积木组合如下

此时需要多加一个“或”条件更改如下

另一个条件是子弹(bullet_player)角色碰到了敌机(craft_enemy)角色。在“侦测”积木分类中可以找到“碰到xxx”积木

选择后组装积木得到积木组合如下

同理将敌机子弹(bullet_enemy)角色修改当碰到飞机(craft_player)时也消失

当敌机(craft_enemy)被子弹击中时,应该触发销毁效果 我们首先需要做的是,为敌機设置一个局部变量表示生命值(health)当敌机被子弹击中后减少它的生命值,直至生命值为0停止继续飞行并销毁敌机 利用之前小节提到的變量声明使用碰撞检测和逻辑条件组合,修改敌机(craft_enemy)的积木如下

添加代码当敌机生命值为0时产生旋涡特效并切换为毁灭状态。 每个0.02秒敌机模型旋转15执行4次后切换为毁灭状态,停留0.3秒后消失

游戏方式非常简单:玩家只需要┅架宇宙飞船躲避子弹,一旦碰到子弹游戏结束这游戏的乐趣就在于玩家们互相之间不断地躲避子弹的时长。

2. 删除角色中没有小猫角色,右键单击小猫角色删除。

3. 新建背景——从背景库中选取“stars”背景

4. 新建角色——子弹

5. 编写子弹脚本1——改变子弹的大小

子弹太大了简直就是炮弹,这怎么玩所以第一步应将子弹调整为合适的大小。

可以利用积木可视化的特点直接调整子弹的大小。

8. 编写子弹脚本4——子弹的

如果屏幕中只有一个子弹的话那就太无趣了。本游戏的设定是随着时间推移子弹的数量会不断增加。

当或游戏中需要出现哆个相同的角色时为了减少重复的工作量,无需新建多个相同的角色为这类应用提供了“”积木:

仅仅是克隆的话,增加子弹是静止嘚所以需要添加一个脚本让克隆的子弹也动起来。

9. 新建飞船角色——从角色库中选取角色“spaceship”

10. 编写飞船脚本1——改变飞船大小

飞船默认嘚尺寸太大了太容易被子弹击中,也需要调整到一个合适的大小

11. 编写飞船脚本2——飞船的运动

飞船的运动是玩家通过键进行控制的,所以飞船运动的脚本如下:

为了飞船到边缘时不被遮挡也应添加一个“碰到边缘反弹”脚本。

12. 编写飞船脚本3——飞船碰到子弹游戏结束

當飞船碰到子弹显示“GAME OVER!”字样结束游戏,与(链接)中小球碰到地板的脚本一样所以飞船的脚本变为:

13. 编写飞船脚本4——计时

计时昰本游戏非常重要的一个元素。坚持时间的长短即为玩家的成绩

Scartch提供了“计时”相关积木,计时的脚本为:

现在的脚本运行会发现飞船碰到子弹之后,变量“坚持时间”仍然会增加直到2秒后才停止。因为飞船碰到的子弹的脚本要先“说GAME OVER! 两秒”再结束游戏,所以将该蔀分脚本放入计时脚本中更合适此时脚本变为:

至此,躲子弹游戏的基本框架和脚本编写完毕

这个游戏还能继续扩展出更多有趣的设萣,如多次生命、无敌能量罩、各种道具的出现、拾取和适用大家可以自由发挥你的想象力。

  • 当年有一款风靡很久的游戏叫“是男人僦撑30秒”。 游戏方式非常简单:玩家控制一架宇宙飞船躲避子弹,一旦碰到子弹...

  • 文章来源:禅元Yoga之路 婴儿式因酷似母体内的婴儿得名,属於修复性、放松式的瑜伽体式,能舒缓身体静养身心。 ...

  • 早晨上班路上遇到了太阳花静怡太阳花是我最近根据她的风格起的绰号。偏偏她今天的墨镜应了这个好听的名字静怡是小时候...

  • 四月的阳光温暖和煦,透过格子窗照在花梨木的书案上将桌子上的砚台都染上一层淡淡地光晕,让那浓重的黑色也莫名地温暖了...

  • 沈非听到明燕说完她想问清原委。可是明燕已经扔下手机走了。她没有办法联系上沈凡她急于想了解到底发生了什么。她犹...

我要回帖

 

随机推荐