您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 朕培创客-高中-Scratch-课件:17-OscarTime
1homebackfirstprevnextlast本节目标•我们这节课即将学习:–语句–布尔表达式–分支结构(条件执行)–循环结构(多次执行)–变量–线程–事件–Oscartime游戏2homebackfirstprevnextlast语句•语句是一条指令,用于告诉计算机完成指定的操作或任务。•语句是编程语言中,可以独立执行的最小的单元。在Scratch中,任何图块的标签如果读起来像一条命令,那么它就是一条语句。–例如,命令角色说话的图块就是一条语句:–另一个例子是命令角色移动到指定位置的图块:3homebackfirstprevnextlast布尔表达式2-1•有时,你希望语句只在某种条件下执行。这些条件通过布尔表达式(或叫做逻辑表达式)来定义•表达式是一个由运算符和操作数连接而成的一个字串,例如100+2*10是一个算数表达式•表达式不能够独立执行,只能作为语句的一部分。•表达式是可以计算求值的,计算完成后,表达式的结果一定是一个值。•根据取值的类型,表达式分为算数表达式、字符串表达式、布尔表达式等4homebackfirstprevnextlast布尔表达式2-2•布尔表达式的结果是一个布尔量,取值只有两种可能:真或假。在Scratch中,形状类似拉长的钻石(菱形)的图块,代表逻辑表达式。例如:•鼠标按键要么按下,要么没有,所以图块的取值要么为真,要么为假。再看一个例子:–两个数比较,前面数字是否小于后面数字,结果也是要么为真,要么为假。•通过逻辑表达式,我们可以构造出条件,下面我们就来看条件。5homebackfirstprevnextlast分支结构(条件执行)3-1•在编程中,条件是为了执行某些操作必须为真的逻辑表达式。–我们经常说条件为真或条件为假,条件成立或条件不成立。–在Scratch中,任何标签中含有“如果”、“当”、“直到”等字眼的图块都是条件结构。例如:–上面的结构通常称为“If结构”6homebackfirstprevnextlast分支结构(条件执行)3-2•if-else结构•这些结构可以嵌套,从而允许更多的条件判断7homebackfirstprevnextlast分支结构(条件执行)3-3•下面图块也是条件结构8homebackfirstprevnextlast循环结构(多次执行)•循环结构中的语句会重复执行多次–在Scratch中,标签以“重复”开头的图块是循环结构。例如:–下面图块允许指定循环的次数,即结构中语句重复执行的次数:–下面图块允许重复执行图块中的语句直到给定条件为真才结束循环:9homebackfirstprevnextlast变量2-1•在编程中,变量是用来存放某个值的占位符,很像代数里常见的变量如x和y。–在Scratch中,变量用拉长的圆形图块来表示,标签由你来指定–变量通常分为局部(local)和全局(global)变量。在Scratch中,局部变量只能被一个角色使用,全局变量在所有角色的代码中都可以使用–如果一个变量的值只能是真(可用1表示)或假(可用0表示),这种变量就被称为逻辑变量(或布尔变量)10homebackfirstprevnextlast变量2-2•你希望多次执行某些语句,每次执行时,语句并不是完全的重复,而是行为有一点变化,这时我们就会需要用到变量11homebackfirstprevnextlast线程2-1•在编程中,线程就像是一个微型程序–一个程序可以包含多个线程,每个线程可以和其他线程同时执行–多线程的程序可以同时做多件事情,例如,一边使角色移动,一边播放背景音乐–在Scratch中,标签以“当”开头的图块,就代表着线程的开始;在Scratch中,每个“脚本”(script)就是一个线程–一个程序中如果有两个这样的图块,就会有两个线程运行12homebackfirstprevnextlast线程2-2•下面代码中,左边线程负责播放声音,右边线程不断检测用户是否按下了空格键,用于判断用户是否要关闭或打开声音13homebackfirstprevnextlast事件3-1•在编程中,不同线程之间可以通过广播和处理事件来彼此交互通信。事件就像一个线程发送给其它线程的消息–在Scratch中,标签以“广播”开始的图块用于发送事件;标签以“当”开始的图块用于处理事件,这也代表一个线程的开始,这种线程叫“事件处理程序”–广播发送事件的图块如下:–处理事件的图块如下:14homebackfirstprevnextlast事件3-2•事件不仅可以通过图块发送,而且也可以通过用户的行为产生。–例如,点击Scratch窗口的绿旗,就会产生一个事件,该事件可被下面的图块接收和处理:15homebackfirstprevnextlast事件3-3•在Scratch中,事件不仅可用于线程之间的通信,也可用于不同角色之间的通信和交互–例如,两个角色或许想玩MarcoPolo,左边是一个角色的脚本,右边是另一个角色的脚本:–这样可以实现左边角色说Marco后,右边角色说Polo16homebackfirstprevnextlastOscartime游戏21-1•利用语句,逻辑表达式,条件,循环,变量,线程和事件,可以构建出有趣的程序•下面,我们来看Oscartime游戏程序,这个程序第一眼看上去好像很复杂,但是实际上,我们通过研究其内部组成会发现,这个程序也只是上面我们所学习的这些积木块的一个应用17homebackfirstprevnextlastOscartime游戏21-2•Oscartime是用Scratch编写的一个游戏。在Oscar唱完一首经典歌曲前,玩家要将掉下来的垃圾尽可能多地拖入Oscar的垃圾箱中18homebackfirstprevnextlastOscartime游戏21-3•Oscartime有9个角色,每个角色使用了一至三个线程–下面我们在Oscartime中来研究一下上面我们学过的程序结构,这样我们就不仅知道如何玩这个游戏,而且知道如何自己做一个这样的游戏19homebackfirstprevnextlastOscartime游戏21-4•Instructions角色–负责在游戏开始时,简单显示一些游戏的玩法–这个角色仅使用一个线程来显示游戏的开始画面,这个画面实际上是通过角色的一个造型来实现的,在屏幕上居中显示4秒钟:20homebackfirstprevnextlastOscartime游戏21-5•Instructions角色非常简单,是不是?角色显示了游戏名称,作者,作者的电子邮箱,以及游戏的玩法:DragasmuchfallingtrashasyoucantoOscar’strashcanbeforehissongends!这句话的意思就是“在Oscar唱完一首经典歌曲前,玩家要将掉下来的垃圾尽可能多地拖入Oscar的垃圾箱中”21homebackfirstprevnextlastOscartime游戏21-6•Trash角色–Trash(垃圾)角色被设计为从天空中的任意位置掉落到地面上–一旦玩家将垃圾捡起来并拖入垃圾箱,角色就会从一个新位置重新掉落。这个过程会不断地重复–每次将垃圾拖入垃圾箱,玩家会得一分22homebackfirstprevnextlastOscartime游戏21-7•Trash角色–这个角色的第一个线程–这个线程在用户点击Scratch的绿旗后开始执行23homebackfirstprevnextlastOscartime游戏21-8–第一部分代码将角色隐藏,运动方向设置为垂直向下(180度),初始高度是固定的(y坐标180),左右位置即横坐标是在-100到220之间的一个随机位置,4秒后,角色显示出来:24homebackfirstprevnextlastOscartime游戏21-9–线程的循环结构中的第一个条件结构如果玩家按下了鼠标左键,而且鼠标指针碰到了这个角色,就需要做进一步的判断:1.玩家是刚刚点中这个角色吗?(如果是,我们需要进入拖放模式。如果不是,玩家就已经进入拖放模式了!这一点是靠my_click=0来判断的,局部变量my_click的作用是记住当前角色被点中。局部变量my_click在每个掉落的垃圾角色中都有一个,是不同的变量。也就是说有7个不同的my_click变量,这些变量虽然名字相同,但其取值可以是不同的。在这个程序中,如果Trash角色的my_click变量为1,则Sneaker、Trombone等其他角色的my_click变量为0)25homebackfirstprevnextlastOscartime游戏21-102.之前玩家是否没有点中其他角色?(我们要确保玩家一次只能捡起一个角色,即使有多个角色在屏幕上是重叠在一起的,这一点是靠good_click=0来保证的,全局变量good_click的作用是记住有一个角色被点中。全局变量good_click对所有角色来说都是可见的,变量只有一个,在Trash角色中修改了good_click的值,其他角色也都看得到这种变化)。变量bad_click在程序中没有用到,是可以删除的26homebackfirstprevnextlastOscartime游戏21-11如果上述条件都满足,角色设置全局变量good_click和局部变量my_click为真(1),这样程序就能够记住当前角色被点中,该角色可以开始被拖动。接下来,线程广播了一个事件,名字叫“trash_click”,该角色的另一个线程接收到此事件后开始处理实际的拖动操作27homebackfirstprevnextlastOscartime游戏21-12–如果上面的条件没有都满足,角色不能进行拖动,循环中的第二个条件结构命令角色向下跌落一步,直到角色跌落到地面(y坐标高度为-165)上为止28homebackfirstprevnextlastOscartime游戏21-13–循环中的最后一个条件结构判断角色是否已经被拖动到离Oscar的垃圾箱足够近的距离(小于20),如果足够近,垃圾被收进垃圾箱,玩家得一分29homebackfirstprevnextlastOscartime游戏21-14–1.程序是否仍在运行?(这靠全局变量playing=1来判断。Oscar唱完歌,playing的值被设置为0,就不能再将垃圾放入垃圾箱了。)–2.角色离垃圾箱距离是否小于20个像素?(如果是,垃圾就可以放入垃圾箱)–3.玩家是否松开了(没有按下)鼠标左键?(只有你松开鼠标左键时,垃圾才能被放入垃圾箱!)–如果所有三个条件满足,角色隐藏(看起来的效果就像是被放入了垃圾箱),然后广播一个名为scored的事件,通知Oscar角色的一个线程显示得分的画面效果,等待大约2秒,再移动到天空中的一个新的位置,然后再显示出来,重新开始从天空掉落–因为上面的三个条件结构都嵌套于“重复执行”循环结构中,角色会一直按照上面的要求运动,直到游戏结束30homebackfirstprevnextlastOscartime游戏21-15•拖动角色的视觉效果是由下面第二个线程实现的:–只要玩家一直按下鼠标左键,角色就会跟随鼠标指针移到,从而显示被鼠标拖动的效果。–一旦玩家松开鼠标左键,此线程将变量good_click设为0,表示没有角色被点中,再将变量my_click设为0,表示当前角色没有被点中。此线程“死掉”,结束本次运行。当本角色再次被“捡起”时,线程才会重新运行31homebackfirstprevnextlastOscartime游戏21-16•Oscartime游戏中Sneaker,Newspaper,Clock,Telephone,Umbrella,和Trombone角色的行为方式和Trash角色在本质上是相同的,代码只有以下几个区别:–1.角色第一次出现的时间不同,靠显示之前等待的不同秒数来实现(当Oscar唱歌时,在歌中第一次提到角色时,角色才开始显示)–2.代码中my_cl
本文标题:朕培创客-高中-Scratch-课件:17-OscarTime
链接地址:https://www.777doc.com/doc-1824364 .html