Scratch位于“开始”→“编程”→Scratch 2,打开之后,我们先找到左上角的地球图标,将语言更改为简体中文,易于我们学习和理解,如图2-1所示。
图2-1 Scratch 2的界面
截至目前,Scratch一共有3个版本:原始版本界面较旧,比较老式;目前使用较为广泛的是Scratch 2,也是本书主要讲解的版本;至于Scratch 3,则是一款在线的浏览器版本,大家可以使用搜索引擎搜索后在线使用。
Scratch 2界面中各个位置的含义如表2-1所示。
表2-1 Scratch 2界面中各个位置的含义
可以看到,Scratch的界面非常简单,角色和分工一目了然。我们赶紧动手,使用Scratch来编写一个“Hello World!”程序吧!
用Scratch写一个“Hello World!”程序实在是太简单了,我们不需要编写任何一行代码,只需要移动代表操作的色彩方块就可以做到。
(1)在操作集面板中选择“事件”的操作集。
(2)在操作面板中单击“当按下空格键时”,拖曳到右侧脚本面板后放开。
(3)在操作集面板中选择“外观”的操作集。
(4)在操作面板中单击“说Hello!2秒”,拖曳到右侧“当按下空格键时”色块下方,松开。
(5)单击编辑Hello!,改成Hello World!即可。
现在,我们只需要按下键盘上的空格键,就可以看到操作的色块发出了黄色的亮光,然后我们的角色开始说出“Hello World!”,这样第一个程序就完成了,如图2-2所示。
图2-2 “Hello World!”程序
怎么样,是不是很简单?
如果做到这里要休息一下,记得保存项目。单击左上角的“文件→保存项目”,填上一个项目名称,就可以保存到你指定的位置了。
现在我们的程序已经有了两个操作:“当按下空格键”和“说(Hello World)(2)秒”,我们按下空格键时,角色就会说“Hello World”2秒钟,这就是一个非常简单的流程。我们的计算机程序就是一系列操作组成的流程,就像做菜时的食谱一样,中央处理器(CPU)像流水线一样按照顺序挨个执行操作指令。流程是一个非常基础的编程思想,复杂的系统由一个个互相平行的流程组成。
我们接下来学习向这个流程中添加更多的功能,比如我们想让角色向前移动20步,然后停下来思考2秒钟。
(1)在操作集面板中选择“动作”的操作集。
(2)在操作面板中单击“移动10步”,拖曳到右侧脚本面板的“说Hello World!2秒”的下方,松开。
(3)单击10,进行编辑,将其改成20。
(4)在操作集面板中选择“外观”的操作集。
(5)在操作面板中单击“思考Hmmm 2秒”,拖曳到右侧“移动20步”色块下方,松开,如图2-3所示。
图2-3 流程操作
再次按下空格键之后,可以看到我们的角色先说“Hello World!”2秒钟,再向前移动了20步,接着思考“Hmmm!”2秒钟,我们的目的达到了。我们再来给角色增加一个让它回来的功能。
(1)增加一个“移动10步”的操作,将10改成-20。
(2)增加一个“说Hello!2秒”的操作,将“Hello!”改成“I’m back!”,如图2-4所示。
这样这个流程就稍微完整了一些。上述流程执行完之后,角色还会回到当初的起点,并且说“I’m back!”。
通过这两个小节的学习,大家可以看到其实Scratch编程非常简单,只需要通过轻松地拖曳和改变参数就可以实现,大家可以继续观察“动作”“外观”操作集下的其他操作,以及其他的操作集,为我们的角色制定更多的动作吧!
图2-4 流程操作
截至目前,我们已经完成了一个流程。角色在回到原来的位置后会停止所有行为,因为后续已经没有操作可供它执行了。如果现在我们想让这个角色重复以上行为10次呢?应该如何操作呢?有人说把以上操作流程复制10遍不就可以了吗?肯定是可以的,但是这样太麻烦了,如果我们想让它执行100遍,就要把流程复制100遍吗?这肯定是不科学的。
科学的方法是使用循环。单击控制集面板中黄色的“控制”按钮,切换到控制操作,选择“重复执行10次”,拖曳到“说Hello World!2秒”上方、“当按下空格键”下方,黄色的“重复执行10次”会自动伸展成一个英文字符“C”的形状,包裹住下方的所有流程,如图2-5所示。
图2-5 循环
这样,当我们按下空格键之后,上述流程会被重复执行,如果你有足够的耐心,可以数一下是否是严格的10次。当然,如果觉得10次太多了,则可以单击舞台面板右上方的“旗帜”按钮,来终止操作的执行,将重复执行10次改成重复执行2次来进行观察。
本节我们要理解的概念是变量和条件。变量,顾名思义,变化的量值,就是随着程序的运行,值会不断地进行改变。变量有两个必要的属性:变量名和它的值。这个值可以是数字、文本、布尔值(0和1),甚至空值也可以。变量在软件工程中无处不在,比如我们使用视频播放器看电影的时候,播放时间就是一个变量;在玩游戏的时候,生命值、魔法值、游戏等级等都是变量。
首先,我们把迄今为止的实验成果保存起来,单击“文件→保存项目”,输入020103.sb2,选择保存在桌面上,单击“保存”按钮即可。然后选择“文件→新建项目”,新建一个空白项目,单击控制集面板中的“变量”,在其下方选择“新建变量”按钮,输入“loops”作为变量名称,勾选“适用于所有角色”,单击“确定”按钮之后,在控制面板中会出现一系列控制选项,如图2-6所示。
图2-6 变量和条件
我们依次进行如下操作:
(1)将“将loops设定为0”拖曳到右侧脚本面板。
(2)将“当按下空格键”拖曳到右侧脚本面板,放在“将loops设定为0”的上面。
(3)将“说Hello!2秒”拖曳到右侧脚本面板,放在“将loops设定为0”的下面。
这时如果我们按下空格键,角色就会说“Hello!”2秒钟。
现在我们来使用刚刚设定的“loops”变量。选中刚刚创建的“loops”(就是前面带选择框的橙色色块),拖曳到右侧脚本区域,拖曳到“Hello!”文字的上方,然后松开鼠标。这时会发现“loops”色块完美地嵌入说“loops”2秒钟这个色块中,如图2-7所示。
图2-7 色块嵌入
这时我们按下空格键,角色说的就不是“Hello!”了,而是0,如图2-8所示。
图2-8 变量发声作用
我们已经掌握了如何使用变量,下一步就来改变变量的值。为了更好地展示改变变量的效果,我们来给这个流程增加一个循环。
(1)将“将变量loops的值增加1”拖曳到“说loops 2秒”下方。
(2)将数据控制集里的“将变量loops的值增加1”拖曳到最下方。
(3)将控制数据集里的“重复执行10次”拖曳到“说loops 2秒”的上方,如图2-9所示。
再次按下空格键,可以观察到我们的角色一开始说0,2秒后说1,再2秒后说2,依次增加,直到9。
图2-9 循环
这里可以思考一下,为什么是9,而不是10?我们的控制是“重复执行10次”,为什么最后停在9上呢?这是因为其实loops初始的值为0,0也是一次循环,0~9一共是10次循环。
我们再来做一些实验,按住“说loops 2秒”往下方移动一些,将这个流程暂且搁置,然后把“重复执行10次”移动到左侧的控制面板中,将其删除,拖曳“重复执行到”到右侧包裹“说loops 2秒”这个流程,然后将整个“重复执行到”流程接到上方的流程中。最终效果如图2-10所示。
图2-10 循环
最后选择“数字和逻辑运算”这个控制集,拖曳控制面板中的菱形相等条件“=”到“重复执行直到”右侧的菱形方格中,如图2-11所示。
我们将loops变量拖曳到左侧的方格中,在右侧的方格中填写“5”,再次按下空格键,如图2-12所示。
图2-11 循环
图2-12 循环
这次可以观察到角色依次从0数到4就结束了,说明我们的控制符生效了。
接下来,我们尝试再追加一些功能,以达成图2-13的效果,不知道大家能不能完成呢?可以给一个提示,“如果,那么”的色块与“重复执行10次”属于同一个控制集。
图2-13 新的目标演示