一道难度等级比较高的少儿编程题目,你能做出来吗?

01题目要求

在Scratch图形化编程中私有变量,克隆和列表的题目是属于比较难的,如果结合了三者则会更加难。今天我们就一起看看这道综合了三者的九宫格题目。

题目要求:用编程的方式做一个九宫格的游戏,把1-9这些数字拖入左边9个方框内,使得每一行,每一列,斜对角三个数字相加都为15.

正确排列的结果:

错误排列的结果:

这个游戏涉及的角色如下:

02问题解答

这里大家可能会有一些疑问,其实澄清这些问题之后,这个题目会清晰很多,下面我们一起来过一下:

方格为什么不直接用画图指令画,这样还能画得更准确一些?

因为用画图指令画出来的方框,将无法用碰撞检测,只能通过数字的X,Y坐标来确定落在哪个格子。举个例子,如果要判断数字1是否在第一个格子,而第一个格子的X坐标是-120到-80, Y坐标是100到170。那么判断逻辑是这样的: 数字1的X坐标是否小于-80并大于-120, 数字1的Y坐标是否小于170并大于100,如果满足这个条件则说明在第一个格子,否则还需要依次判断数字1是否在其他格子里。每一次判断,X坐标需要做两次比较运算,Y坐标也需要做两次比较运算,一共是4次运算。

方格用角色的方式,可以用碰撞检测的方式来判断每个方格碰到数字几,每次判断只需要一次碰撞检测,比判断X,Y坐标的4次运算更加容易。

方格怎么画出来正正方方的?为什么我画出来的是长方形?

按住键盘上shift键,再用鼠标拖动矩形方框就可以画出来。

为什么不创建9个格子角色?

因为可以用克隆。这样同样的代码不用复制到9个格子角色里;同样发现一处问题,不需要改9个地方。

为什么数字角色不用克隆,只用一个角色9个造型?

如果数字角色用克隆,格子角色也能判断出来是否碰到克隆的数字角色,似乎看起来也行得通。可是再进一步思考,我们没有指令“碰到角色的造型”,“碰到角色的编号”等等,类似下面这样的指令只能获取到角色本体的造型编号,所以我们只能知道某个格子是否碰到数字,但是没法检测到格子具体碰到哪个数字。所以数字角色要有9个。

03具体代码

方格:


   1,2代码段运行之后,格子的编号是这样的:

   下面第三段代码是记录:格子中放置的数字。

数字的主要代码,需要拷贝9份到9个数字:

人物的主要代码:

人物这里有个技巧,我们用到了自定义积木,可以让代码更加清晰,同时用到了一个“停止判断”广播来停止其他脚本的技巧,因为Scratch的自定义积木中

“停止这个脚本”指令仅仅会停止自定义积木中的指令,并不能令执行过程停止。

而直接调用“停止该角色的其他脚本”指令也并不会令执行过程停止。

所以我们要加一个“停止判断”广播。

另外需要注意的是:在拖动数字的时候需要在运行模式,也就是需要点了右上角这个按钮到大窗口。否则Scratch不会把鼠标的拖拽动作与编程指令挂钩。

做到这里题目就结束了。同学们可以继续思考两个问题:

如果1个数字跨了2个格会有什么后果?如何避免这个问题呢?

能不能换种做法,用1个数字角色,而格子角色创建9个呢?

后面看同学们的响应程度再决定是否给出来这两个问题的答案。另外大家关注“码小爱”公众号回复“源码”,将可以得到本次程序的源码。

你可能感兴趣的:(一道难度等级比较高的少儿编程题目,你能做出来吗?)