scratch案例——俄罗斯方块

我们观察一下这个程序的特点,也就是比较独特的部分:1:首选我们看这个程序里有哪些角色,前面7个就是7个方块了,不好理解的是detecter这个角色。剩下的角色都好理解。我们一会再去单独谈detecter这个角色。

在这里插入图片描述

2:就是这个方格背景了,所有的方块都要严格的在这个方格背景里移动,这个看着简单,大家学scratch这么久了,应该知道还是有点难度的,如何做到,我们一会讨论。

在这里插入图片描述
3:第三个就是每个方块的移动,如何保证每个方块落到另一个方块上就会停下来。scratch里面一般是检测碰到角色,和碰到颜色,那么这个程序用的哪个呢?

在这里插入图片描述
4:当一个方块落到下面停下来后,怎么实现这方块就停留在下面,而新的同样的角色还在上面?这个是用什么方法实现呢?

在这里插入图片描述

5:就是当方块把某一层全部铺满的的时候,程序怎么能检测到呢?通过什么来检测呢?这是一个难点,说句实话,CC哥想了多方案,发现最后都没有设计者的构思的简单方便。
在这里插入图片描述

6:当检测到某一层铺满之后,程序怎么实现的消除呢?这也是个难点,因为消除怎么实现呢?而且你还要保证上面的方块全部移下来。消除完之后会有很多方块就不是原来的角色形状了。
在这里插入图片描述

这是CC哥在分析这个程序时所发现的一些技术点,如果我们能自己想出解决的办法,或者能看懂编程者的方法,那么我们自己也就可以写这个程序了。另外一些技术点就比较容易理解,CC哥就不花篇幅讲了,比如玩这个俄罗斯方块,大家都知道角色可以选择,可以有四个方向,是不是大家第一的反应就是用角色旋转来做?而编程者就不是用旋转来做的,而是用造型来处理的。是不是很巧妙?所以当按旋转按钮的时候,程序只要选造型就好了。

在这里插入图片描述
程序解析

在这里插入图片描述
我们先从简单的问题出发,第二个问题,编程者怎么控制这些角色沿着方格来运动的。而且在移动过程中如何检测碰到其他方块?

在这里插入图片描述
通过这个就能看出,其实每一步移动距离都是20,也就是方格的大小也是20。如何检测碰到其他角色呢?我们发现只有一个检测命令,就是检测黑色。如果移动后发现碰到黑色,就退回上一步。

从这里我们可以发现,这个编程其实最复杂的地方(设计程序经常会碰到虽然不难,但是很复杂的情况)就是如何精准的控制位置,和检测多个角色之间的相互碰撞。在检测方面编程者用了一招最简单的方式,通过给每一个方块加上一圈黑色的边,把整个方格区域的四周加上了一圈黑边,这样只需要检测黑色,就可以实现所有复杂的角色之间相互碰撞的问题了。但是这样简单的方式也带来了问题,就是要精准的控制角色的尺寸和位置。下面这个图看出问题来没有?
本来这个木棍方块应该在往下走一格的,但是肯定是碰到了下面黄色方块或橙色的T字方块的边上,导致没有落下来。这就是编程者没有精准的处理好角色的尺寸。这样的问题在消除的时候也会出现。

在这里插入图片描述
通过分析,回答了刚才2和3的问题。
然后我们看一下这几个方块角色的程序,基本上都一样,CC哥只简单讲这个T方块就好了:

在这里插入图片描述
1:当接收到T的消息,也就是说出来一个T方块,那么就往下落好了,程序不复杂,在没有碰到黑色以前(不论是其他角色和边框)一直下落,每次一格。2:如果碰到了,就回退一步,这样可以停留在被碰物体的上方。3:重点来了,当停稳后,图章! 图章命令大家学过了,就是在原地画一个该角色。这就回答了刚才第四个问题,编程者是通过图章命令来让角色停留在原地的。并不是通过克隆。

在这里插入图片描述

这个是用上箭头来进行方块的旋转,就是每按一次切换一个造型,其中在切换时一定要检测一下是否碰到其他角色或边框,如果碰到,就不做旋转。

在这里插入图片描述
这段程序是在程序开始界面里显示一下方块。

在这里插入图片描述

这段程序是在方格的右上角提醒下一个要出现的方块的样子。

在这里插入图片描述

  • 21
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
回答: Scratch俄罗斯方块是一款基于Scratch编程语言开发的游戏。在这个游戏中,玩家需要控制方块的下落和旋转,使其填满一行或多行并消除。根据引用\[2\]中的描述,编程者通过给每一个方块加上一圈黑色的边来实现角色之间的碰撞检测。当接收到T方块的消息时,程序会让方块向下落,并在碰到其他角色或边框之前一直下落一格。如果碰到了其他角色或边框,方块会回退一步停留在被碰物体的上方。而停稳后,通过使用图章命令,编程者让方块停留在原地。因此,编程者通过精确控制方块的位置和尺寸来实现俄罗斯方块的游戏逻辑。 #### 引用[.reference_title] - *1* [优秀课程案例:使用Scratch制作俄罗斯方块无网格背景版!](https://blog.csdn.net/IT_Scratch/article/details/117004893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [scratch案例——俄罗斯方块](https://blog.csdn.net/weixin_44602985/article/details/88092055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值