最新消息:

Scratch少儿编程进阶 第一讲 小鱼的战斗(一)

Scratch 少儿编程 6032浏览 0评论
Scratch少儿编程进阶

友情提示:视频教程观看时请手动设置清晰度。

第一讲    小鱼的战斗(一)

 

本课程为Scratch的进阶课程,最终实现一个有故事情节的游戏,游戏展示请看视频。

 

 

 

一、游戏剧本介绍

游戏描述的是一个小鱼的成长故事。

第一幕是大鱼吃小鱼游戏,作为主角的小鱼通过不断吃掉海洋中的其他小鱼来长大,最终战胜鲨鱼进入下一关。

初始时,小鱼的生命值为10,分数为0

任何情况下,小鱼的生命值降为0则游戏结束。

我们假设第一幕中存在两种小鱼,每种小鱼都是随着时间的推移而不断增加,主角开始只能吃掉小鱼1,每吃掉一个小鱼1,可以获得1分。

当分数达到10分时,主角身体长大一点,可以开始吃小鱼2。在分数达到10之前,小鱼如果碰到小鱼2,则生命值减少1。当分数达到10,每吃掉一个小鱼2,分数增加2分。

第二幕为射击游戏,长大的小鱼将与章鱼怪进行作战。

 

 

二、导入游戏素材

新建程序,如图所示,导入背景“underwater2”,在角色列表中,删除小猫角色,导入“fish1”、“fish2”、“fish3”。调整三个小鱼的大小,fish1大小为20fish2大小为25fish3大小为30

Scratch少儿编程进阶 第一讲(一)

 

fish2命名为主角,将fish1命名为小鱼1fish3命名为小鱼2,将三个角色的旋转模式全部选择为左右旋转。

Scratch少儿编程进阶 第一讲(一)

 

命名后的角色列表如下

Scratch少儿编程进阶 第一讲(一)

 

选中主角,为主角创建2个变量,分别为生命和分数,并在脚本区初始化这两个变量,当开始时,让生命值为10,分数为0

Scratch少儿编程进阶 第一讲(一)

 

 

三、让三条小鱼都动起来

1、让主角移动起来

让主角移动起来,我们这里首先采取键盘控制的方式。

在主角的脚本区,编辑左右键按下的代码如图所示。

Scratch少儿编程进阶 第一讲(一)

 

注意这里在移动前首先改变主角的朝向。

那么上下键如何操作呢?是否应该是如下这样的代码呢?

Scratch少儿编程进阶 第一讲(一)

 

大家可以先尝试一下这个代码控制的上键操作情况,有没有发现什么问题?

我们发现,当小鱼面向右面的时候,响应是正常的,但是当小鱼面向左面的时候,按向上按钮,小鱼是先转到面向右面再向上移动。这与小鱼的旋转模式是左右旋转有关,当面向0度方向是,在左右旋转模式下,小鱼是面向右面的。因此我们需要对代码做简单的改变来解决这个问题。

我们知道,按上下键时,小鱼的横坐标不变,而纵坐标分别增加减少,因此这里可以采用如下代码。

 

再次试试四个方向键,已经可以达到预期的动作了。

2、让小鱼1和小鱼2动起来

这里重点学习一组新的指令。

Scratch少儿编程进阶 第一讲(一)

 

在入门阶段的课程中我们简单讲解过,这组克隆指令是复制一个当前角色的副本,副本继承了角色的全部信息和指令,可以作为一个个体单独存在和运行。

那么为什么要使用副本而不是直接定义多个角色呢?

我们希望小鱼1和小鱼2随着时间的推移,不断的在屏幕中出现,但是因为不知道游戏要持续多久,也不知道究竟需要生成多少个小鱼角色,因此这给定义多个角色带来了困难。其次,小鱼角色的行为类似,因此可以考虑克隆这组指令来完成小鱼的控制。

在角色指令中,每当执行一次“克隆”指令,则屏幕中生成一个与角色完全相同的角色副本,副本继承角色的全部指令动作。

克隆体生成后,需要为克隆体编写相应的指令,为克隆体编写的指令起点为“当作为克隆体启动时”这条指令,终点是“删除本克隆体”。

请注意,对于创建的克隆体。当不在使用时,最后一定要执行“删除本克隆体”指令,因为每一个克隆体都需要占用一部分计算机资源,如果不能在最后执行回收资源的操作删除掉克隆体,计算机会因为被占用的资源过多而死机,这点必须注意!

 

回到小鱼1和小鱼2,我们希望两种小鱼只是简单的在屏幕中来回游动。首先看小鱼1,编写如下代码

 

 

这段代码的目的是每隔2-5秒,在屏幕中的随机区域,克隆一个小鱼1的副本,这里我们使用了显示克隆体,隐藏本体的技巧,这样做的目的是为了保证,在游戏过程中被主角吃掉的都是克隆体的小鱼,因为本体小鱼始终处于隐身状态,可以用来持续操作产生新的小鱼。大家现在可以点击开始运行一下,会发现每个一段时间,屏幕中出现一条小鱼,小鱼出现的位置是随机的。

继续编辑下列代码

 

当小鱼克隆体启动时,让小鱼重复移动,这里我们让小鱼的移动方式相对简单一些,只重复的绕圈,移动的步数和右转角度上使用了随机数,让小鱼移动的规律略微有点变化。

下面我们增加小鱼1被吃掉的代码:

Scratch少儿编程进阶 第一讲(一)

 

我们在小鱼1的克隆体启动后,使用一个循环持续的侦测小鱼1是否碰到主角,如果碰到则删除克隆体表示小鱼1被吃,在删除克隆体前,让分数加1

同样的方式我们也可以定义编写小鱼2的代码如下:

Scratch少儿编程进阶 第一讲(一)

Scratch少儿编程进阶 第一讲(一)

Scratch少儿编程进阶 第一讲(一)

 

 

与小鱼1相比,小鱼2出现的间隔时间,和旋转的角度略有不同。

小鱼2与小鱼1代码的最大差别在最后这段,当碰到主角时,小鱼1直接被吃掉,而小鱼2需要做个判断,当分数没有达到10分时,主角假设打不过小鱼2,生命值被减1,而当分数达到10分时,主角吃掉小鱼2分数加2

现在点击开始,运行一下程序,看看有没有什么问题?

我们发现主角可以很成功的吃掉小鱼1,但是当主角分数不够10分时,一旦碰到小鱼2,生命值会瞬间下降非常多,可能一下就出现了负数,这是为什么呢?

查看我们代码的最后一段,这段的逻辑是,一旦主角碰到小鱼2的克隆体,如果分数不足10分,则生命值将会下降,但是此时小鱼2并没有被吃掉,还是存在的,因此他会持续的碰到主角,分数也就会持续的下降。

我们希望在这种情况下,没当分数较少1分时,可以给主角一个逃离的时间,因此最后一段代码修改如下

Scratch少儿编程进阶 第一讲(一)

 

现在试着再次运行,效果已经好一些了。

下面我们回到主角的脚本区,编写如下代码

Scratch少儿编程进阶 第一讲(一)

 

这部分代码的主要目的,在开始和中途分数到10的时候各说一句话,提醒游戏者哪种鱼可以吃,同时在分数到10的时候,让小鱼的身体变大一点。第一幕的场景已经可以简单的玩起来了。

下一讲我们将继续编写游戏的第一幕,让大鱼吃小鱼的游戏效果更加丰富。

始发于微信公众号:
一人耕者

您必须 登录 才能发表评论!