Skip to content

Latest commit

 

History

History
315 lines (165 loc) · 24.5 KB

File metadata and controls

315 lines (165 loc) · 24.5 KB

6 小行星破碎机。。。在太空!

原文:https://inventwithscratch.com/book3/chapter6.html

Alphabet-a 类固醇是雅达利公司于 1979 年开发的经典游戏。从那以后,许多程序员重新制作了这个游戏,这也是一个很棒的从头开始的编程项目。玩家驾驶一艘飞船,必须摧毁太空小行星,同时避免碎片脱落。。。在太空!(众所周知的事实是添加”。。。在太空!”让一切变得更加精彩。)

玩家推动飞船,而不是直接控制飞船移动的方向,就像冰上的冰球一样;因为玩家的船有惯性,所以绕着舞台滑行。为了让飞船减速,玩家必须把它推向相反的方向。在不失去控制的情况下移动飞船需要技巧,但这只是游戏的一半乐趣。另一半的乐趣是炸毁小行星。

在你开始编码之前,看看在 https://www.nostarch.com/scratch3playground/[的最终*小行星破碎者*程序。](https://www.nostarch.com/scratch3playground/)

f06001## 勾画出设计草图

让我们在纸上画出游戏应该是什么样子。在我们的游戏版本中,玩家用 WASD 键控制他们的飞船,用鼠标瞄准来袭的小行星。

下面是我的草图:

f06002下面是我们在每一部分要做的事情:

  1. 制作一艘被推来推去的宇宙飞船
  2. 让飞船环绕边缘
  3. 用鼠标瞄准,用空格键开火
  4. D. 制造四处漂浮的小行星
  5. E. 撞击时使小行星一分为二
  6. F. 记录分数并制作计时器
  7. 如果宇宙飞船被击中,就会爆炸

如果想节省时间,可以从资源 ZIP 文件中名为asteroidbreaker-skeleton . sb3的骨架项目文件开始。到 https://www.nostarch.com/scratch3playground/[的](https://www.nostarch.com/scratch3playground/),右键点击链接,选择**将链接另存为**或**将目标另存为**,将 ZIP 文件下载到你的电脑上。从 ZIP 文件中提取所有文件。骨架项目文件已经加载了所有的精灵,所以您只需要将代码块拖动到每个精灵中。

Head A 制造一艘被推来推去的宇宙飞船

在我们编写游戏中令人兴奋的部分之前,我们需要设置背景和精灵。我们将通过添加星星背景和飞船精灵来使这个游戏变得太空化。点击右下角的选择背景按钮,然后选择明星

我们不会使用 Scratch 开始时使用的Cat精灵,所以在精灵窗格中右键单击或长按该精灵,并在继续之前选择删除,或者单击精灵旁边的垃圾桶图标。在 Scratch 编辑器中启动一个新项目,输入小行星破碎者作为项目名称。

1.创建飞船精灵

我们将为飞船使用一个飞碟图像,您可以在参考资料 ZIP 文件中找到它。

将鼠标悬停在选择精灵按钮上,点击出现的上传精灵按钮。然后从资源 ZIP 文件中选择 Spaceship.png 的图像文件。

在橙色的变量类别中,点击制作一个变量并创建一个名为x velocity的变量。使x velocity成为这个精灵唯一的变量的**。重复前面的步骤,创建一个名为yT5 的变量。**


如果该子画面的只有没有出现,则选择舞台而不是Spaceship子画面。关闭新建变量窗口,选择Spaceship精灵,再次点击制作变量


你还需要创建两个名为Scoreplayer is alive的变量,但是要为所有精灵创建这些变量**。**

接下来,将下面的代码添加到Spaceship sprite 中。该代码定义了船的起始位置和变量的初始值;它还包含定义用户控件的逻辑。

f06003你可能想知道为什么我们没有重用以前游戏中使用change x bychange y by方块的代码。在这个程序中,按住其中一个 WASD 键可以增加或减少x velocityy velocity变量。然后,脚本底部的代码通过使用这些变量中的值来改变Spaceship sprite 的 x 和 y 位置。即使在玩家放开按键后,变量仍然反映更新后的位置,因此飞船继续移动。


## 保存点

单击绿色标志来测试到目前为止的代码。按下 WASD 键,看看飞船是如何被推动的。确保所有四个 WASD 键将飞船推向正确的方向。然后点击红色停止标志,保存你的程序。


Head A 使飞船环绕四周边缘

g06001当您测试代码时,您是否注意到Spaceship sprite 在运行到舞台边缘时会立即停止?原因是 Scratch 防止精灵离开舞台,这在大多数 Scratch 程序中是有帮助的。但是在小行星破碎者中,我们希望精灵离开舞台的一边,而绕到的另一边。

2。将环绕代码添加到飞船精灵中

下面的代码将使飞船到达舞台的另一边。现在添加此代码。

f06004载物台的左右边缘分别位于 x 坐标 240 和 240 处。载物台的底部和顶部边缘位于 y 坐标 180 和 180 处。我们使用这些边界来编写代码,当Spaceship sprite 经过这四个坐标时改变它的位置。每当Spaceship精灵的 x 或 y 位置在这些边缘的五步之内时,这个新代码将把Spaceship精灵移动到舞台的另一边。因为x velocityy velocity变量仍将以相同的速度和相同的方向移动Spaceship 精灵,所以Spaceship精灵将看起来像是在舞台上连续移动。


## 保存点

单击绿色标志来测试到目前为止的代码。确保所有四条边都将Spaceship精灵发送到另一边。然后点击红色停止标志,保存你的程序。


3.将随机推送代码添加到飞船精灵

这个游戏的控制提供了一个挑战,但让我们玩这个游戏更加困难。我们将在Spaceship精灵中添加随机的小推力,这样玩家就不会停留在中心而完全不动。

将以下代码添加到Spaceship sprite 中,使随机推送每秒发生一次:

f06005forever循环中,x velocityy velocity变量在一秒钟的停顿后发生微小的随机变化。这意味着每一秒钟,飞船的运动都会受到随机的推动。


## 保存点

单击绿色标志来测试到目前为止的代码。不要按任何 WASD 键。等着看飞船是否开始自己移动。然后点击红色停止标志,保存你的程序。

      • img/img/## 用鼠标瞄准,用空格键开火

控制Spaceship精灵的代码已经完成,现在让我们添加能量爆炸。这些爆炸将粉碎那些危险的太空小行星!在太空!

4.创建能量冲击波精灵

Scratch 的精灵库有一个精灵,我们可以用它来进行能量爆炸。点击右下角的选择一个精灵按钮。选择Ball。在精灵窗格中,将其重命名为Energy Blast

我们希望Energy Blast精灵在Spaceship精灵开火时发出激光声。单击块调板上方的声音选项卡。然后点击左下角的选择声音按钮。选择Laser1

我们将制作Energy Blast精灵的克隆体,但是克隆体和原始精灵将运行不同的代码。只有一个Energy Blast精灵,但是玩家应该可以一次发射很多能量冲击波。我们将创建原始Energy Blast精灵的克隆体,这样舞台上就可以出现不止一个能量爆炸。原始精灵将保持隐藏;所有出现在舞台上的Energy Blast精灵都将是克隆体。

我们将使用一个名为I am a clone的变量来跟踪哪个是原始的精灵,哪个是克隆的。点击代码标签,返回代码区。在橙色的变量类别中,点击制作变量按钮。为此 sprite 只创建一个变量,命名为I am a clone。原来的Energy Blast sprite 会把这个变量设置为no,克隆体会把它设置为yes。将以下代码添加到Energy Blast sprite 中:

f06006原始精灵在游戏开始时隐藏自己,并保持隐藏状态。它制造的克隆体将出现在舞台上。此外,我们使用的精灵对于游戏来说太大了,所以将其大小设置为 10 %,使其变小。

现在将下面的脚本添加到Energy Blast精灵中。玩家将通过按空格键发射能量冲击波。最初的Energy Blast精灵会创建克隆体,显示自己并向鼠标移动。由于Energy Blast克隆体向鼠标移动,玩家可以移动鼠标瞄准能量冲击波。

f06007g06002when space key pressed块下的代码将为原来的精灵克隆体运行,如果我们不给出指令说明这段代码应该只为原来的精灵运行。但是我们不希望现有的克隆体产生新的克隆体。if then块检查I am a clone变量是否被设置为no,以便只有原来的Energy Blast精灵运行该代码并创建克隆体。

显然,Spaceship精灵只有在玩家活着的情况下才能激发Energy Blast克隆体,因此代码还检查了player is alive变量是否被设置为yes

接下来,将以下代码添加到Energy Blast sprite 中,以便克隆体在创建后向鼠标移动:

f06008克隆体从展示自己开始,向前移动。克隆体也应该环绕舞台的边缘,就像Spaceship sprite 一样,所以我们在这里使用类似的代码来实现。

请注意,克隆体会将自己的I am a clone变量设置为yes。这是为了使克隆不运行when space key pressed脚本中的代码。只有当I am a clone设置为no时,脚本中的if then块才会运行代码。

克隆人每次向前移动 10 步,移动 50 次。这意味着Energy Blast克隆体的活动范围有限,不会永远移动。循环重复 50 次后,克隆体会删除自身并从舞台上消失。


## 保存点

单击绿色标志来测试到目前为止的代码。用鼠标瞄准,按空格键发射。确保Energy Blast克隆体从Spaceship精灵开始,并向鼠标移动。克隆体应环绕舞台边缘,并最终消失。然后点击红色停止标志,保存你的程序。


Head A 让小行星四处漂浮

现在我们需要玩家击中的目标。这个游戏中的小行星四处漂浮,直到一个Energy Blast克隆体撞上它们。它们会不断分裂成两个更小的小行星,直到小到足以被蒸发。

5。创建小行星精灵

g06003将鼠标悬停在选择精灵按钮上,点击出现的上传精灵按钮,并选择asteroid.png文件,添加新的小行星精灵。该文件位于资源 ZIP 文件中。点击橙色的变量类别,然后点击制作变量按钮。为这个精灵创建一个名为hits的变量。重复这些步骤,创建名为x velocityy velocityrotation的变量。所有的都是这个精灵唯一的变量。在第 6 步中,我们将使用hits变量来记录小行星被撞击的次数和大小。

让我们编写一些代码,让Asteroid sprite 创建出现在舞台上的新克隆体;每个克隆体都有随机的速度和旋转。结果将是不可预测的小行星群。。。在太空!

将以下脚本添加到Asteroid精灵中:

f06009Energy Blast精灵一样,原来的Asteroid精灵会隐藏自己,生成克隆体。每 8 到 12 秒就会创建一个新的克隆。当克隆体被创建时,它显示自己,被赋予随机速度和旋转,并开始移动。

此外,像SpaceshipEnergy Blast精灵一样,Asteroid精灵将环绕舞台边缘。将以下脚本添加到Asteroid精灵中:

f06010img/* * *

## 保存点

单击绿色标志来测试到目前为止的代码。确保Asteroid精灵缓慢移动和旋转,并环绕舞台边缘。此外,确保每 8 到 12 秒出现一次新的克隆。然后点击红色停止标志,保存你的程序。

      • img/img/## Head A 让小行星在撞击时一分为二

当一个Energy Blast克隆体击中一个Asteroid时,Asteroid会创造出两个新的更小的克隆体,让它看起来像舞台上的Asteroid一分为二。

g06004### 6.添加小行星的分裂代码

声音选项卡中,点击选择声音按钮,然后选择Chomp。每当克隆人撞击小行星时,就会发出Chomp的声音。

将以下脚本添加到Asteroid精灵中。您需要创建一个名为asteroid blasted的新广播消息。

f06011当一个Energy Blast克隆人击中一个Asteroid克隆人时,Asteroid克隆人会播放Chomp音效并广播asteroid blasted消息。

然后Asteroid2点加到Score变量上,并将hits变量增加1。被击中的Asteroid精灵也会缩小一点,改变它的大小-25,这样当它(“父”)克隆自己两次时,它的“子”克隆将是较小的大小。最后,Asteroid克隆删除了自己。

g06005两个更小的子克隆将拥有比父克隆开始时多一个的hits变量。第四次点击Asteroid克隆时,hits变量是4,代码删除克隆,而不是创建两个新的克隆。(delete this clone块后的代码不运行,因为克隆体不再存在。)这防止了 1 个Asteroid精灵变成 2 个,然后 4 个,然后 8 个,然后 16 个,然后 32 个,并且永远是指数增长的Asteroid精灵。

不过,如果你想要成倍增加Asteroid个小精灵,那就增加if hits = 4 then块中的数量。

7.将小行星爆炸消息代码添加到能量爆炸精灵中

在精灵列表中选择Energy Blast精灵,并将该脚本添加到其中:

f06012所有的Energy Blast克隆体都会收到asteroid blasted消息,但是只有那些当前接触到Asteroid精灵的克隆体会被删除。(人们将触摸一个Asteroid,因为只有当它触摸一个Energy Blast子画面时,消息才由Asteroid子画面广播。)这就是一个Energy Blast精灵在碰到一个Asteroid后消失的样子。


## 保存点

单击绿色标志来测试到目前为止的代码。尝试爆破一些小行星。确保能量爆炸消失,并且Asteroid精灵被两个更小的克隆体代替。第四次小行星被撞击,它应该会消失。然后点击红色停止标志,保存你的程序。


Head A 记录分数并制作计时器

g06006当许多小行星绕着舞台飞行时,小行星破碎者游戏很快变得具有挑战性。一个好的游戏策略是缓慢而小心,在向大精灵开火之前干掉小精灵。但我们也想给玩家施加一些压力,所以让Score变量开始每秒下降 1 点,当Score0时游戏结束。这样,玩家在射击Asteroid精灵时必须保持更快的速度。

8.创建超时精灵

将鼠标悬停在选择一个精灵按钮上,并点击出现的绘制按钮。在画图编辑器中,使用文本工具用红色大写字母写出超时

f06013回到代码标签,转到精灵窗格,并将精灵重命名为Out of Time

将以下脚本添加到Out of Time雪碧中:

f06014这段代码在游戏开始时隐藏Out of Time精灵,并在一秒钟的暂停后通过1减少Score变量。当Score变量到达0时,代码显示Out of Time精灵。


## 保存点

单击绿色标志来测试到目前为止的代码。确保Score变量每秒减少1点。当Score变量为0时,应显示Out of Time精灵。然后点击红色停止标志,保存你的程序。


Head A 让飞船被击中爆炸

如果玩家不能足够快地爆炸小行星来阻止他们的Score到达0,他们可能会输掉游戏。但是如果一颗小行星撞上飞船,他们也会失败。让我们添加代码来检测这种情况何时发生,并显示一个很酷的爆炸动画。

g06007### 9.上传爆炸精灵

八个图像可用于爆炸动画的帧。这些服装在资源 ZIP 文件的explosion . sprit 3文件中。

*在 Scratch 编辑器中,将鼠标悬停在选择精灵按钮上,点击出现的上传精灵按钮,选择 Explosion.sprite3 。爆炸动画的八种服装出现在精灵的服装标签上。

10.添加爆炸精灵的代码

对于Explosion sprite,您将创建一个名为explode的新广播消息。当Explosion精灵收到这条信息时,它会出现并切换其服装来显示爆炸动画。

爆炸发生时,精灵还会播放声音效果。通过点击块调板上方的声音选项卡载入声音。然后点击左下角的选择声音按钮。选择Alien Creak2音。

将以下代码添加到Explosion sprite 中:

f06015Explosion sprite 隐藏起来,直到它接收到explode广播。然后它播放一个声音,走到飞船所在的位置,七次切换服装,制作出一个超赞的爆炸动画!

11.将分解代码添加到飞船精灵中

Spaceship精灵接触到其中一个Asteroid克隆体时,它会广播explode信息。将以下脚本添加到Spaceship sprite 中:

f06016爆炸动画的工作原理是,在移动到下一个服装之前,简单地展示其中一个服装。这类似于漫画和动画书使用的逐帧动画。每个服装都是一帧,代码快速变换服装,让爆炸看起来很真实。

f06017img/* * *

## 保存点

单击绿色标志来测试到目前为止的代码。确保游戏开始时Explosion精灵不可见。飞入一颗小行星,确保Explosion精灵出现在Spaceship精灵所在的地方。然后点击红色停止标志,保存你的程序。

这个程序的代码太大,无法在这里显示,但是您可以在参考资料 ZIP 文件中查看完整的代码—文件名是 asteroidbreaker.sb3


版本 2.0:有限的弹药

一旦你掌握了游戏的诀窍,小行星破碎机就会变得太容易了。使它变得容易的一个特征是你可以像按空格键一样快地开火。这个动作让玩家不分青红皂白地开火,而不是小心翼翼地瞄准小行星。但是我们可以通过添加一个新的Energy变量来改变这种行为。每次发射一次能量爆炸都会减少这个变量 1。如果Energy变量是0,飞船就不能发射。Energy变量会随着时间慢慢增加,但它迫使玩家小心瞄准他们的投篮,不要浪费。

g06008你需要一个变量来记录飞船的能量水平。选择橙色的变量类别,点击制作变量按钮。制作一个名为Energy的变量,为所有精灵选择**。在块调色板中,确保选中了Energy旁边的复选框(就像选中了Score的复选框一样),这样它就会出现在舞台上。**

Energy变量将在游戏开始时从10开始,然后随着玩家每次发射能量冲击波而减少1。只有当变量Energy大于0时,玩家才能开火。

修改Energy Blast sprite 中的代码以匹配以下内容:

f06018脚本 1 是新的。在进入forever循环之前,它首先将Energy变量设置为10。在循环内,如果Energy小于10,程序等待 0.4 秒后将Energy增加1。这样,Energy值永远不会超过10。脚本 2 稍作修改,使得Energy必须大于0才能让玩家开火。当一个能量冲击波发射时,change Energy by -1块减少Energy值。


## 保存点

单击绿色标志来测试到目前为止的代码。确保Energy变量在Score变量附近的载物台上可见。Energy变量在游戏开始时应该是10,玩家每按一次空格键就减 1。当Energy变量在0时,按空格键应该不会再发射Energy Blast克隆体了。此外,确保Energy变量大约每半秒充电 1 次。然后点击红色停止标志,保存你的程序。

      • img/img/## 作弊模式:星爆炸弹

小行星破碎者2.0 版本中有限的能量更具挑战性,但让我们添加一个秘密的欺骗来解决它。拥有无限能量的骗局会很无聊,所以我们会添加一种特殊的能量炸弹,在飞船周围以星爆模式发射。

当玩家按下 X 键时,星爆将会爆发。这个代码类似于玩家按空格键时的常规射击代码。

将以下代码添加到Energy Blast sprite 中:

f06019when space key pressed脚本一样,这个脚本检查玩家是否活着,以及精灵是否是克隆的。只有原始的精灵应该运行这段代码,而不是克隆体。

if then区块内,Energy Blast精灵移动到飞船并指向鼠标的方向。然后,精灵克隆自己 24 次。每次克隆完成后,精灵会逆时针方向改变 15 度。这导致了向四面八方的能量爆发。


## 保存点

单击绿色标志来测试到目前为止的代码。按下 X 键,看着Energy Blast克隆体从Spaceship精灵中向四面八方飞出。因为这一招是秘密的,所以无论玩家的能量水平如何,都要确保玩家可以使用它。然后点击红色停止标志,保存你的程序。


摘要

在本章中,您构建了一个游戏,它具有以下功能:

  • 使用冰球推风格来控制宇宙飞船
  • x velocityy velocity变量来跟踪Spaceship精灵移动的速度
  • 让精灵环绕舞台边缘
  • 拥有能够制造两个更小的克隆体的克隆体
  • 变量ScoreEnergy分别随时间不断减少和增加
  • 具有爆炸的逐帧动画

这个游戏给玩家提供了一个真正的挑战,但是作为程序员,我们不得不一个接一个地添加这些功能!玩家不直接控制飞船,而是推动它。如果我们在这一点上停止编码精灵,玩家可以躲在一个角落里,远离小行星,所以我们让所有精灵围绕边缘。即使有了那个附加物,玩家也可能试图在舞台中央保持不动。那时我们给飞船增加了随机的小推力。

很难避开许多小行星,所以玩家可以在瞄准大行星之前慢慢地小心地完成小行星。在这一点上,我们让分数随着时间的推移而减少,以鼓励玩家更快地开火。玩家也可以在不仔细瞄准的情况下随意射击,所以我们做了一个Energy变量来限制玩家射击的速度。

每次你在游戏中加入一个特性,记住它是如何影响游戏性的。太难玩的游戏令人沮丧,太容易玩的游戏令人厌烦。一切都是为了找到平衡。

下一个游戏是迄今为止最先进的程序:它是一个类似于超级马里奥兄弟超级肉仔的平台游戏。它不仅像篮球游戏一样有跳跃和重力,而且你可以在不改变代码的情况下为它设计自定义关卡!


复习问题

试着回答下面的练习题来测试你学到了什么。您可能不会马上知道所有的答案,但是您可以探索 Scratch 编辑器来找出答案。(答案也在http://www.nostarch.com/scratch3playground/在线。)

  1. 回绕代码是如何工作的?
  2. 为什么Energy Blast sprite 有一个I am a clone变量?
  3. 是什么阻止了Asteroid克隆体永远分裂成更多的碎片?
  4. 精灵的代码是如何让飞船看起来像要爆炸的?
      • img/img/*