带孩子玩Scratch编程:学龄前趣味程序(12)

上一篇

(12) 欧盟小猫

本集的任务比较简单,就是绘制一些五角星,但对于小朋友理解画笔的用法也很重要。尤其是前两个程序恐怕不易理解,但这个程序的逻辑,应该是可以掌握的。

代码量:17块积木

难度:★★

舞台背景:内置背景 Star

角色:默认角色

代码:

讲解

程序分为两段,一段是主程序(当绿旗子被点击那段),另一段你已经看到了,是“当作为克隆体启动时”运行的子程序。

这里又用到一个新功能 —— 克隆。就是产生一个角色的副本,让副本独立执行一些额外的任务。

我们主程序里,通过重复执行 12 次,也把小猫克隆了 12次。每一次都从一个固定的中心点(x:-30, y:5)转身 30°,之后移动 140步,这样,12个位置围成了一个圆圈。

小猫到了圆圈上的每个位置之后,就执行克隆。绘制五角星的任务由克隆体执行。

绘制五角星的程序也及其简单,就是通过重复执行 5次,画 5条长度一样的直线,而且每条直线和下一条直线之间,要旋转 144°,是不是很简单呢。

带孩子玩Scratch编程:学龄期趣味程序(11)

上一篇

本系列后半部分减少了操作提示,仅提供创意和代码,供感兴趣的朋友参考。

(11) 计算圆周率

本程序在上一集的基础上稍作修改,可计算画笔走过的路径长度。对圆形来说,画笔走一圈的路径长度叫做周长;而圆的高度、宽度都是相等的,叫做直径。圆的周长总是直径长度的固定倍数,它们的比值叫做圆周率。圆周率是多少呢,运行程序算一算吧。

代码量:20块积木

难度:★★★

舞台背景:内置背景 Xy-grid

角色:上一集的 Descartes、内置角色 Pencil

代码:

Descartes:

其中,“广播 (init) 并等待”是在“广播(消息1)并等待”积木的基础上修改而来的,需要添加一个新消息,如下图所示。

Pencil:

 

带孩子玩Scratch编程:学龄前趣味程序(10)

上一篇

(10) 笛卡尔心形线

程序目标描述

有一个流传很广的传奇故事,说法国数学家笛卡尔(Rene Descartes)曾被瑞典的一个国王聘请,做国王女儿克里斯蒂娜公主的家庭教师。他们每天讨论数学和哲学问题,时间一长,公主爱上了这位智慧的老师。国王发现后,十分恼火,把笛卡尔赶出了王宫,并不允许他和克里斯蒂娜再接触。为了表示爱意,笛卡尔把代表爱情的桃心,抽象成了数学公式 ρ=a(1-cosθ),对国王谎称是练习题,转交给公主。公主利用笛卡尔教给她的极坐标知识,画出了图形,这就是著名的笛卡尔心形线。

我们这集的程序,就是用计算机帮助公主绘图,把数学公式转化成坐标格纸上的图形。

牢骚的话

笔者小时候读过的各类《趣味程序xx例》,大多数在很靠前的时候就会介绍用程序绘图的例子。而我们这个系列,拖到了第 10 个例程,才开始使用“画笔”功能。这倒并不是笔者忘了这个题材,而是 Scratch 本身就是一种基于图形元素的编程语言,在大多数情况下,如果希望展现图形效果,并不需要动用“画笔”去绘制,而是直接操作“角色”的动作、外观、造型等等。“画笔”反倒是一种效果很不容易出彩的笨办法,往往代码量还很长。

这跟笔者小时候完全不同了,在那个 PC 刚出现的时代,电脑的图形功能并不强大,BASIC 语言、LOGO 语言提供的绘制直线、矩形、圆形的命令,让人们感到十分新奇,所以当然可以算作趣味程序。

而要用 Scratch 的“画笔”功能,写一个 20块积木以内的、有一定视觉效果的程序,着实费了些脑筋。只画一个三角、椭圆、五角星,感觉没什么意思,也没有故事可讲,复杂的图形又很难在 20块积木以内实现。这样,最终选择了笛卡尔心形线作为“画笔”的例程 。另有几个想法,如“卢瑟福α粒子散射轨迹”、“绘制欧盟标志”等,也能在 20块积木以内完成,但故事性略差,因此留到以后再说。

素材准备

笛卡尔头像(来自百度百科):

场景布置

舞台背景选择 Scratch 内置的“Xy-grid”,它是一张坐标格纸,对于这种科学作图程序来说很有用,能让你看到曲线轨迹的坐标数值。

除了添加 Descartes 角色以外,还要添加一个画笔角色,选择 Scratch 内置的“pencil”。然后,在 “pencil”角色的造型编辑活页卡中,按键盘 Ctrl+A 全选图形,并将笔尖移动到编辑窗口的中心标记处(这是为了在运行时让笔迹看起来是笔尖留下的),如下图所示:

回到代码活页卡,两个角色的初始位置随意摆放,将“pencil”角色缩小到合适大小(例如 30)。

代码搭建

在左侧积木分组栏下方,点“添加扩展”按钮,选择“画笔”扩展。之后,先搭建 Descartes 的代码:

这里“cos(…)”积木在“运算”积木箱里,是由“绝对值(…)”积木修改而来的。这个积木叫做“数学函数积木”,它提供了一系列有用的数学函数,可供编程中使用。cos 是一种三角函数,叫“余弦函数”。它具体的含义要到中学才能明白。

注意有 cos 函数这一行: (100) * (1 – cos(方向)),恰恰是笛卡尔心形线公式右侧 a (1- cosθ) 的具体化实例。这里,我们用 (100) 赋值给了公式里的 a,用 (方向) 替换了公式里的 θ。

之后,编辑 pencil 角色的代码:

运行

上述代码运行后,呈现开篇图中的效果。

这个程序还可以绘制其他极坐标方程,小朋友们可以尝试更多:

我们先把 Descartes 代码中的“移到 x:(0)y:(100)” 改为 “移到 x:(0)y:(0)”,让作图中心回到坐标格纸的原点 (0, 0)。

然后在 “移动(…)步” 积木内分别尝试以下公式:

圆:(100) *  (cos  (方向) )

4瓣花:(100) * (cos ( (2) * (方向) ) )

3瓣花:(100) * (cos ( (3) * (方向) ) )

8瓣花:(100) * (cos ( (4) * (方向) ) )

… 可以找找花瓣数量和“(方向)前面的系数之间有什么规律。

双翼异形曲线:(方向) *  (sin  (方向) )

海螺壳:( (方向) + (180) ) / (3)

也可以胡编乱造一些公式,让计算机绘制,看看有什么效果。

讲解

本集程序虽然只有 20块积木,拼起来不难,但可理解性是比较差的。实际上,我们是为了刻意缩短程序长度,牺牲了逻辑的清晰性。不过,鉴于函数、极坐标的概念也不是学龄前小朋友能够理解的,这里就压根不打算讲明白为什么本程序能画出心形线和其他图形了。

唯一值得对小朋友提及的,就是“画笔”积木箱中几块积木的作用。“全部擦除”、“将笔的颜色设为(…)”积木顾名思义,无须多讲。“落笔”、“抬笔”是配合角色的运动,实现留下运动轨迹的功能。在“落笔”之后的运动,所经之处都会留下笔迹,直到“抬笔”为止。

带孩子玩Scratch编程:学龄前趣味程序(9)

上一篇

(9) 钢琴曲:知更鸟罗宾

程序目标描述

可能小朋友已经发现了,在 Scratch 的积木箱扩展里,还有音乐、画笔等选项,看上去也很有意思。本集我们就使用“音乐”扩展,让计算机演奏一首非常好听的钢琴曲《知更鸟罗宾》。

素材准备

钢琴谱来自美国威利斯音乐出版公司的《约翰·汤普森简易钢琴教程3》,可能不少小朋友已经会演奏它了。由于版权问题,这里就不把五线谱贴出来了,没有该教材的小朋友可以让家长从网上寻找,或直接下载后边本站转码的 txt 文件。

如何把五线谱录入计算机,并让 Scratch 演奏出来,是本程序要解决的主要问题。我们这次跟上集类似,也是准备了文本文件,在搭建程序时,导入创建的列表中。由于钢琴曲有两个声部,我们也准备了两个文本文件,分别是:

旋律声部:track1.txt

60
0.5
0
0.5
62
0.5
0
0.5
64
0.5
67
0.5
0
1
64
0.5
0
0.5
62
0.5
67
0.5
0
1
64
1
60
1
0
4
60
0.5
62
0.5
64
0.5
67
0.5
0
1
64
0.5
0
0.5
62
0.5
67
0.5
0
1
64
1
60
4
60
1
62
1
64
0.5
60
0.5
0
1
62
0.5
0
0.5
64
0.5
60
0.5
0
1
62
0.5
0
0.5
64
0.5
60
0.5
0
1
62
0.5
0
0.5
63
1
0
1
60
0.5
62
0.5
64
0.5
67
0.5
0
1
64
0.5
0
0.5
62
0.5
67
0.5
0
1
64
1
60
4

伴奏声部:track2.txt

0
2
48
1
0
2
53
1
0
2
52
1
0
1
55
1
55
2
0
1
48
1
0
2
53
1
0
2
52
4
0
2
57
3
56
3
55
3
53
1
0
2
55
1
0
2
53
1
0
2
52
3
48
1

注意,上述文本文件中,不要有多余的空行。

可以在以下链接中下载:

http://www.fangtax.com/wp-content/uploads/2020/01/track1.txt

http://www.fangtax.com/wp-content/uploads/2020/01/track2.txt

至于上述文本文件中的数字是什么含义,可以简单解释一下:我们定义了一种保存乐谱的方式,就是每2行数字表示一个音符;第一个数字表示这个音符的高低,60 为中央C,61为#C,62为D,59为低八度B,依此类推,0代表休止符;第二个数字表示音符时值,1代表1拍,0.5代表半拍,依次类推。

搭建场景

舞台的背景并不重要,我们可以随意选择。本程序需要 2个角色来演奏不同的声部,角色选择什么形象也不重要,我们选择了默认的小猫,以及添加了另一个内置角色 —— 螃蟹 crab。

然后,我们在小猫的代码空间里,在“变量”分组积木箱中点击“建立一个变量”,并选择“仅适用于当前角色”,新建变量 i,如下图:

再新建变量 n,也是要“仅适用于当前角色”。

之后,再到螃蟹的代码空间中,重复上述操作,也建立“仅适用于当前角色”(螃蟹)的 i 和 n。

接下来,创建 2个列表 track1,track2,方法在前几集已经有过介绍,这里不再重复。建好之后,积木箱如下图所示。

可以按开篇图的方式,有条理地摆放各个变量、列表和角色。

将 track1.txt 导入 track1 列表中,方法在上一集已经介绍过,就是在舞台中的列表上点鼠标右键、再点“导入”,并选择相应的文件。

最后,将 track2.txt 导入 track2 列表中。

代码搭建

在左侧积木分组栏下方,点“添加扩展”按钮,选择“音乐”扩展。之后,先搭建小猫的代码:

共有 22块积木,相信对已经追到这集的小朋友来说,并不算太难哦。

对于螃蟹的积木,我们可以偷个大懒 —— 直接把小猫代码空间里的整块代码块,用鼠标拖着开头第一块积木,拖到“角色浏览器”里的螃蟹的图标上,如下图所示:

这样,我们给小猫编的代码,就复制给了螃蟹。

之后,对螃蟹的代码稍加修改,将 4处 “track1” 改为 “track2”:

这样就大功告成了。

运行

点击绿旗子,听听是计算机弹的好,还是你弹的好呢?

计算机虽然弹得熟练,但是没有你有感情哦。

对于高年级的小朋友,如果有兴趣,你们还可以深入研究一下本程序曲谱文件的格式含义,自己编码甚至创作一些其他曲子,可以选择不同的乐器音色哦。

讲解

本程序和上一集的课文朗读机,从本质上来讲十分类似,都是将外部文件的数据导入列表,在程序中遍历列表,并根据每一次取到的数据,播放相应的语音/音符。只是在本集中,我们每2行代表一个音符,因此,“遍历”重复执行的次数是列表总行数除以2,而每次循环内要将指针变量 i 增加 2次。