1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【scratch】class_3_打砖块小游戏

【scratch】class_3_打砖块小游戏

时间:2021-12-06 14:23:15

相关推荐

【scratch】class_3_打砖块小游戏

一、游戏说明

实现一个打砖块的小游戏,基本元素包括小球,挡板,砖块,终点线,分数,背景自选。

二、需求分析

1. 小球

小球碰到挡板和墙壁时都要反弹小球碰到砖块时砖块消失小球碰到终点线时游戏结束

2. 挡板

挡板随鼠标水平移动,竖直方向位置不变挡板碰到小球时小球反弹

3. 砖块

砖块在屏幕上方排列整齐砖块碰到小球时砖块消失

4. 分数

小球碰到砖块使砖块消失时分数加一

5. 终点线

小球碰到终点线时游戏结束

三、设计说明

1. 小球

游戏开始时,小球位于屏幕中间,向某一个方向飞出;这个方向最好不要向下或者斜向下;可适当调整小球的大小和飞行速度小球碰到挡板和墙壁时都要反弹,且反弹遵守反射定律,入射角和出射角相等

2. 挡板

挡板随鼠标水平移动,竖直方向位置不变

3. 砖块

砖块在屏幕上方排列整齐,三行,每行十个,可使用一个砖块克隆完成砖块碰到小球时砖块消失

4. 分数

小球碰到砖块使砖块消失时分数加一

5. 终点线

小球碰到终点线时游戏结束

四、代码实现

第一步,选择适当背景;选择‘Ball’作为角色,可以给它改名为‘球’;游戏开始时将小球放在屏幕中间,大小调成50,面向40°方向,重复向前移动,碰到边缘反弹。

至此实现了小球的基本运动,效果如图

第二步,选择‘挡板’为角色,放在坐标(0,-140)处,循环,把它的横坐标设置为鼠标的横坐标,这样它就会在水平方向上随着鼠标移动。

效果如图

第三步,当小球碰到挡板时,要使小球反弹,且遵循反射定律,先看反射的示意图

反过来也是一样的

所以小球撞到挡板后反射需要转过的角度=180° - 方向x2,在小球的代码中添加内容

效果图

第四步,添加砖块(难点)

首先添加一个长方体的模型当做砖块,把它放在屏幕左上角的位置并适当调整大小。

我们计划排列30个砖块,排成3行,每行10个;由于我们不会去添加30个砖块角色,虽然也能实现,但是非常繁琐。所以我们要用到‘克隆’来实现这个功能,将一个砖块克隆30次就可以了。

执行后会发现没有变化,是因为克隆是在“原地”执行的,也就是说克隆出来的30个砖块都叠加在一起了。所以我们要想办法把它们分开,当然不能手动拖拽。

我们需要建立两个变量,‘砖块数量’和‘砖块编号’。砖块数量用来记录画面内砖块的数量,适用于所有角色;砖块编号表示每个克隆出来的砖块的编号,仅适用于当前角色。

注意:克隆功能神奇的地方在于,当克隆体被启动时,它就自动拥有了被克隆对象的所有代码;如果建立的变量‘仅适用于当前角色’,那它被克隆体使用时,也将仅适用于此克隆体,而对其它克隆体没影响。我们接下来会举例说明

为了查看每个砖块的编号是否准确,我们设置点击砖块时显示砖块编号,这样可以方便我们看到效果

可以看到砖块都被编号了。那如果砖块编号不是‘仅适用于当前角色’会怎么样呢?会变成这个样子:

可以看到每个砖块的编号都是30,这是因为我们把砖块编号变成了‘适用于所有角色’,然后把它设置为了砖块数量,而砖块最后的数量就是30。

也可以这样理解

以上就是对‘适用于所有角色’和‘仅适用于当前角色’的解释。

我们需要对30个砖块进行整齐的排列,这就意味着我们要对每个砖块的位置严格控制。由于砖块刚克隆出来时都重叠在一起,这就需要它们自己“走到”各自对应的位置上,那应该怎么实现呢?假如30个砖块是以以下的方式排列的。

由上图我们知道了砖块的行数和列数与砖块编号的关系,所以我们需要再创建两个变量 ‘砖块所在行’和‘砖块所在列’来表示他们,然后再克隆体启动时为它们赋值,当然这两个变量也是‘仅适用于当前角色’的。

有了行列关系后,我们需要让每个砖块自己“走到”自己位置上去,这其中的关系如下图所示

按照这个移动逻辑来编辑克隆体移动的代码

至此砖块就排列好了。接下来我们要让小球碰到砖块时,砖块消失,而且积分

效果如图

但是我们还要实现当小球碰到砖块时也要反弹。这里我们用消息广播的功能,当砖块被小球碰到时,广播一个消息,通知小球反弹。

这样我们就发出了一个广播,现在要让小球接收到广播时反弹

效果如图

最后添加终点线,当小球落到终点线上时使游戏结束

至此这个游戏就基本完成了,但是其中还有很多细节可以完善,之后会再写一篇说一下。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。