STEAM创新教育--Scratch2.0编程--第五节 变量和链表

 

本节我们将学习数据模块的两大块:变量和链表。...



本节我们将学习数据模块的两大块:变量链表

脚本在运行过程中要处理各种类型的数据:积木种要求输入的参数(包括数字、字符串、下拉列表等)。而完成一个相对复杂的程序,需要存储、访问、修改数据才能完成一个特定任务。Scratch中使用变量和链表来管理数据。

一、变量

1、变量的类型应用程序的任务是处理各种数据类型(数字、字符串、图像、声音等)的数据并运算结果。因此要完成编程任务必须先了解Scratch种数据类型的概念。Scratch支持三种数据类型:布尔类型(Ture或False)、数字类型、字符串类型。



如果输入的数据类型不对,Scratch将阻止你拖入。

变量是被命名的计算机内存区域。当你创建一个变量时,程序会开辟一块内存区域存储它,同时给这块区域取一个变量名,后续程序中直接使用变量名即可以得到这块内存区域的具体存储的数据。

变量的一个重要用法就是存储算术计算的结果,从而方便程序使用。比如计算一个算术运算式的结果:



现在我们用Scratch种几种表达结果来看看各自的优缺点:

(1)直接运算



注意看积木堆积出来的层次,这种方法的可读性非常差,很难理解。

(2)两个变量运算



设定两个变量A和B,分别为A和B赋予简单的运算式,再求结果。

(3)四个变量



先将每一个括号设定为一个变量,最后再来计算,是不是又显得过于细致?

所以实际上第二种表达方式是最合适的。当然在设计程序的过程中,如何运用还需要根据实际的情况来判定,选择最合适的方法。

下面我们制作一个小程序来看看变量的妙用。骰子随机滚动后,鸭子说出两个骰子的数值之和。



图1:骰子游戏

首先创建一个新项目,删除猫咪角色,在角色列表中加入角色Duck、D、E,角色D和E分别有6个造型。

角色Duck的脚本如下:



设定两个变量A和B,并生成1-6之间的随机数,广播一条消息“Roll”。角色Duck说出分别代表两个骰子数值的变量A和B之和。

角色D和E的脚本如下:





当角色D、E接收到“Roll”消息后触发脚本,转动骰子,最后停在变量对应的造型上。点击绿旗运行看看!2、变量的范围

变量还分为局部变量和全局变量,新建变量的时候,系统会询问变量的范围,适用于所有角色的即全局变量,适用于当前角色的即局部变量。



下面我们用一个小程序来说明这两种变量。新建一个项目,添加两个角色猫咪Cat和企鹅Penguin。我们需要在游戏中让企鹅说出猫咪脚本里产生的随机数,下面我们来看看局部变量和全局变量引用的区别:



图2:局部变量和全局变量引用的区别

如果C1为猫咪的局部变量,企鹅要引用他必须通过侦测模块的积木
来完成;如果C1为全局变量,则企鹅直接引用就好。

变量的值在脚本执行的过程中也是随时变化的,可以直接通过脚本指定,也可以通过运算得来。图3为蜘蛛织网的过程:





图3:蜘蛛织网

通过变量C的值不断的变化来让画笔画出一条蜘蛛网。当然这样多重坎套的程序可读性是很差的,在后面的章节中我们会讲到结构化的程序,把脚本的内容分成不同的小过程来调用。

3、克隆体中的变量当角色被克隆时,克隆体会继承原角色中所有的属性和局部变量,并且他们的值和原角色相同。但是在克隆之后,克隆体属性和局部变量的变化就不会再影响到原角色的值,原角色的局部变量也不会影响到克隆体,两者都是独立的了,相同的仅是在克隆的那一瞬间。

下面我们通过两个小程序来说明这个问题,为角色设置一个局部变量,并赋值为1,当局部变量变化时,并不影响之前克隆体的变量值。



图4:当变量作为局部变量时克隆体不会受到影响



图5:当变量作为全局变量时克隆体会受到影响

当某些场合需要显示变量的值在屏幕上时,可以有2种方法,一个是直接在变量前勾选复选框,然后舞台就会显示变量,可以拖动到自己想要放置的位置,第二个方法是通过脚本来控制。



4、变量的输入下面我们再来制作一个葵花籽按照不同角度分布的程序来说明变量的输入。



图5:使用不同的角度生成的葵花籽团

角度变量Var通过用户用滑块输入,当按下空格键后,程序根据Var的角度来绘制葵花籽。

还有一种方法是通过输入框得到用户的输入,利用侦测模块中的询问...并等待积木。并且在角色显示与隐藏的时候表现的形式不同。



图6:询问...并等待的积木有两种表现形式

图7是询问用户的年龄,等待用户输入后,显示并计算,这里用到了链接......积木。



图7:等待用户输入作为变量参与计算

还有下面两段脚本,执行试试看?



二、链表

一个变量可以存储一个值,但是如果要存储一系列的值就不行,比如好友们的点好号码,如果我有100个好友,那需要100个变量,这是不可取的。下面我们来介绍链表。链表是可以存放许多变量的数组,链表就像很多层的抽屉,每一层都有一个索引,根据索引就能找到你需要的值。

1、链表的创建和操作链表的创建和变量一样,在数据模块。链表也分局部访问和全部访问。数据模块,选择新建链表,就可以创建一个空的链表。链表创建后,数据模块会多出如下的链表操作积木:



图8:新建链表后增加的操作积木

用这些积木可以操作链表,比如增加、删除等操作。



创建链表后,舞台上会显示出来,这个时候如果已经有固定的值可以点击左下角的“+”号填入值。

例如我们让猫咪陆续说出链表中的星期几:

2、动态链表和数字链表

链表的功能非常的强大,在程序运行的过程中可以随意的增加、删除、查询等操作内部的变量。例如一位老师要录入一个班的考试成绩,也可以有两种方法:



下面我们来制作一个根据输入的数字绘制柱状图的程序。



程序根据输入的数据生成柱状图显示出来。



当全班的成绩被录入链表后,要知道最高分和最低分以及平均分,我们用下面这段脚本:



3、链表的搜索和排序

Scratch种包含积木可以检索出链表中是否含有特定的值,但是如果要知道这个值具体在链表的哪个位置,就需要自己通过搜索和排序来得到这个结果。

假如我们要知道这个班的学生中是否有考100分的人:



假设我们还要知道这个班中考100分的有多少人:



假设电话本里存储了很多人的信息,我们通常喜欢将其按照某些元素来进行排序便于查找。排序的方法有很多,冒泡排序是最常用也是最简单的方法之一。下面来举一组有5个数字(6,9,3,7,2)链表的冒泡排序的例子,首先将链表的第1位和第2位两个数进行比较,如果前面比后面大就交换位置,然后第2位和第3位,以此类推。因为链表有5个变量,所以需要这样比较4轮,我们用下图来说明这个过程:





明白冒泡排序的过程了吗?那么在Scratch种如何用程序来实现它呢?下面来设计一段脚本:



我们还可以来试试如果比较的是英文字母?或者排序按照从小到大而不是从大到小?

参考游戏实战:

07 中国地图


    关注 Scratch学堂


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册