实际编程环境中会涉及很多数据类型,但在scratch中数据类型基本就三种:数字、字符串和布尔
输入一个数字很简单,在任何椭圆形的输入框内都可以输入数字。scratch甚至提供了专门的运算工具来处理数字
我们注意到在绝对值的指令块的下拉选项中,还有很多数学函数,包括三角函数、反三角函数、指数函数和对数函数,这些是高中数学中要学的东西。
这些指令块中还有一个比较特殊的是随机数,它用于生成一个1-10之间的随机整数。想一想,如果我们想生成一个任意区间之内的随机数,应该怎么操作?比如我想生成1-100之内的随机数。
生成1-100的随机数
我们日常生活中用到的数字都是十进制的,为什么呢,因为我们人类有十个手指头,最初的计数就是数手指。然后阿拉伯数字1-10代替了手指的功能。
计算机只“认识”二进制的数字,也就是只认识0和1。为什么呢,因为计算机是集成电路组成的,电路需要开关来控制,而开关只有“开启”和“关闭”两个状态。而二进制中的1就代表开启,0就代表关闭。
除了二进制外,还有八进制,十六进制。因为二进制虽然简单,但是计数起来位数很多有点麻烦,所以就有了八进制和十六进制,一般用于位计算和编码。
在任何输入框中也能输入字符,包括英文字母、汉字甚至其它语言文字。scratch也提供了专门处理字符串的方法
布尔型的变量只有两个值,true或者false(真或假)。就像它的值一样,布尔型的变量用于判断真假。
比如 (1+2=3),这句话是真的,是true;(1+3=2),这句话是假的,是false.
在scratch中所有“六角形”的代表的值都是布尔型的变量。
就像数字有加减乘除四则运算一样,布尔型的变量也有自己的运算,叫做逻辑运算。
最基本的逻辑运算包括与、或、非
操作名 | 英文名 | 操作符 | 举例 | 总结 |
---|---|---|---|---|
与 | and | & | true&true=true; true&false=false; false&false=false | 全真为真,有假为假 |
或 | or | | | true|true=true; true|false=true; false|false=false | 全假为假,有真为真 |
非 | not |  ̄ | ![]() |
真变成假,假变成真 |
在scratch工具中,与、或、非对应的命令是:
一切六角形的孔中都可以镶嵌布尔型的积木块
以下两种数据结构在之前已经介绍过了
数据结构_数组和列表
在scratch中,对象最直观的表现就是角色。
一个角色有:
角色名称,x坐标,y坐标,显示/隐藏,大小,方向
以上这些可以称为角色的属性。
一个对象,最主要的特点就是它的属性,以及对于它的属性的改变的操作。
所以,世界上任何一个物体都可以是一个对象,它都有自己的属性。
比如一个人,他有年龄,有身高,体重,长相等等。
比如一部手机,它有尺寸、使用寿命等等。
当我们了解了现实世界中物体的属性后,我们就可以用编程的方法把它抽象为一堆数据
比如在打砖块的游戏中,我们为砖块建立的“仅适用于当前角色的变量”,就属于砖块的属性。
流程控制,简单来讲就是根据条件的判断,使程序运行到不同的分支上去。
例如:我明天准备去旅游,但前提是明天不要下雨,如果明天下雨,我就不去旅游了;如果明天不下雨就去。这就是一个根据某个条件来决定接下来的进程的例子。
顺序结构就是程序执行过程中没有分支,比如用上面的例子来做顺序结构,明天下不下雨我都要去旅游
选择结果需要有条件来使程序分支执行,条件成立时和条件不成立时程序会走不同的路径
循环结构顾名思义,就是需要重复执行某个操作,分为有条件的循环和无条件的循环。有条件的循环在条件成立或者不成立时循环就要停止,而无条件的循环会一直循环下去,直到程序被强制结束。
比如上面的例子,如果下雨我就等待,一直等到不下雨为止
在scratch中,可以捕捉我们的输入的操作有很多,
关于这些命令的应用,在之前的小游戏中已经介绍过,在此不做赘述。
参看以前的小游戏
这里主要说一下“询问”和“说”的命令,它可以帮助我们和计算机进行“对话”,程序需要根据我们的输入进行判断时,就需要询问
Input/Output的简写,I/O可以简单的理解为文件的导入和导出,这也是输入和输出的一部分。大部分的计算机软件都有I/O的功能,以帮助我们处理文件。
我们曾经说过,计算机是用来处理数据的,而数据在计算机上的具体表现,就是数据文件。一段文字,一张图片,一个视频,都是文件。可以说我们处理数据,其实就是在处理各种数据文件(当然也不是所有的数据都会生成文件,比如网络IO,这个以后再说)
在scratch中,我们保存自己的作品到电脑上,就是导出文件;而从电脑中上传,就是导入文件。
此外,我们导入一张图片作为背景或者角色,导入声音作为素材,都是导入文件。
角色也是可以导出的,而且导出的角色中不止包含造型,还包含代码,比如我们把曾经做过的打砖块游戏中的“砖块”角色导出
注意,导出操作可能会出现下面这个错误,但是并不妨碍导出结果的生成,只要忽视它就好了
他会生成一个.sprite3为后缀的文件,我们可以在别的项目中导入这个角色,就连它的代码一起导入了
所以这个功能可以帮我们复制我们写过的复杂的代码,复杂的东西写一遍就可以了,以后只需要不断的完善
甚至列表也是可以导入和导出的,比如我们把上面例子中1-100以内的3的倍数的单数全部导出。
我们也可以按照它的格式,自定义一个列表然后导入进来,比如我们随便写一个偶数数组
然后建立一个空的列表,就可以导入这个数组了
监听是一个被广泛应用的计算机功能,但是可能有很多同学没有听说过。比如上面讲到的大部分输入操作,都要用到监听的功能。
简单来说,监听就是计算机一直在“监视”你的操作,一旦你做了某个操作,它必须立即回应你。比如你按下键盘鼠标,程序就“看到”你按下了键盘鼠标,它就会有动作。
scratch中的监听大概分为以下三类,一般监听事件都要用到无限循环操作。
想一想,为什么我要在程序中加一个“等待0.2”秒的操作
这个功能之前在打砖块的游戏中用到过,当球碰到砖块时,我们通知球转向。
这里我们再做一个小功能,令一名老师问一个学生100以内的加法,看是否能回答正确
其实鼠标键盘操作都可以称为事件。scratch中还提供了很多其它的事件,比如:
在编程过程中,对于一些复杂的逻辑编码,我们希望它们能够被重复应用。于是我们把它们“打包”成一个个的代码块,这种被打包的处理某个复杂逻辑的代码块就叫做函数。
函数有几个要素:函数名,参数,返回值
scratch中通过自定义积木,实现了函数的功能。
我们自定义一个判断输入年份是否是闰年的函数
可以看到,我们的回答作为参数传递到了函数内部进行计算。所以,对于使用函数的人来说,他不用关心函数内部的实现方法,他只需要关心的在使用函数时传递正确的参数。
当然一个函数是可以传递多个参数的,比如我们定义一个计算两数相加或者相减的函数,当布尔值传入true时就把两数相加,传入假时就把两数相减
有同学可能注意到自定义积木时有一个选项是“运行时不刷新屏幕”,这个功能是干什么的呢?
要回答这个问题我们可以看一下之前做的打砖块小游戏,还记不记得在绘制砖块的克隆体时出现了一个现象,就是30个砖块的克隆速度其实很慢,是一个一个克隆出来的,以至于球都飞出来了,砖块还没有克隆完。那这个问题怎么解决呢?
我们可以把砖块克隆的代码打包成一个函数,然后勾选执行时不刷新屏幕,就可以解决这个问题了
修改后可以试一下,发现30个砖块被瞬间克隆出来。原因是,克隆时,会重新绘制舞台,这很耗时间,所以把重绘舞台关闭就节约了时间。
一个函数执行结束后,是可以有返回值的,可惜的是,scratch中并不提供这样的功能,以后再讲其它编程语言时,会再提及
以上就是关于编程的一些基本知识,对于从没有接触过编程的同学来说,还是很新鲜的,希望同学们在学习scratch的过程中可以掌握这些知识。