Scratch学习课件-17_OscarTime

上传人:PI****23 文档编号:130136011 上传时间:2020-04-25 格式:PPT 页数:41 大小:590KB
返回 下载 相关 举报
Scratch学习课件-17_OscarTime_第1页
第1页 / 共41页
Scratch学习课件-17_OscarTime_第2页
第2页 / 共41页
Scratch学习课件-17_OscarTime_第3页
第3页 / 共41页
Scratch学习课件-17_OscarTime_第4页
第4页 / 共41页
Scratch学习课件-17_OscarTime_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Scratch学习课件-17_OscarTime》由会员分享,可在线阅读,更多相关《Scratch学习课件-17_OscarTime(41页珍藏版)》请在金锄头文库上搜索。

1、17常见程序结构 程序设计基础 本节目标 我们这节课即将学习 语句布尔表达式分支结构 条件执行 循环结构 多次执行 变量线程事件Oscartime游戏 语句 语句是一条指令 用于告诉计算机完成指定的操作或任务 语句是编程语言中 可以独立执行的最小的单元 在Scratch中 任何图块的标签如果读起来像一条命令 那么它就是一条语句 例如 命令角色说话的图块就是一条语句 另一个例子是命令角色移动到指定位置的图块 布尔表达式2 1 有时 你希望语句只在某种条件下执行 这些条件通过布尔表达式 或叫做逻辑表达式 来定义表达式是一个由运算符和操作数连接而成的一个字串 例如100 2 10是一个算数表达式表达

2、式不能够独立执行 只能作为语句的一部分 表达式是可以计算求值的 计算完成后 表达式的结果一定是一个值 根据取值的类型 表达式分为算数表达式 字符串表达式 布尔表达式等 布尔表达式2 2 布尔表达式的结果是一个布尔量 取值只有两种可能 真或假 在Scratch中 形状类似拉长的钻石 菱形 的图块 代表逻辑表达式 例如 鼠标按键要么按下 要么没有 所以图块的取值要么为真 要么为假 再看一个例子 两个数比较 前面数字是否小于后面数字 结果也是要么为真 要么为假 通过逻辑表达式 我们可以构造出条件 下面我们就来看条件 分支结构 条件执行 3 1 在编程中 条件是为了执行某些操作必须为真的逻辑表达式 我

3、们经常说条件为真或条件为假 条件成立或条件不成立 在Scratch中 任何标签中含有 如果 当 直到 等字眼的图块都是条件结构 例如 上面的结构通常称为 If结构 分支结构 条件执行 3 2 if else结构 这些结构可以嵌套 从而允许更多的条件判断 分支结构 条件执行 3 3 下面图块也是条件结构 循环结构 多次执行 循环结构中的语句会重复执行多次在Scratch中 标签以 重复 开头的图块是循环结构 例如 下面图块允许指定循环的次数 即结构中语句重复执行的次数 下面图块允许重复执行图块中的语句直到给定条件为真才结束循环 变量2 1 在编程中 变量是用来存放某个值的占位符 很像代数里常见的

4、变量如x和y 在Scratch中 变量用拉长的圆形图块来表示 标签由你来指定变量通常分为局部 local 和全局 global 变量 在Scratch中 局部变量只能被一个角色使用 全局变量在所有角色的代码中都可以使用如果一个变量的值只能是真 可用1表示 或假 可用0表示 这种变量就被称为逻辑变量 或布尔变量 变量2 2 你希望多次执行某些语句 每次执行时 语句并不是完全的重复 而是行为有一点变化 这时我们就会需要用到变量 线程2 1 在编程中 线程就像是一个微型程序一个程序可以包含多个线程 每个线程可以和其他线程同时执行多线程的程序可以同时做多件事情 例如 一边使角色移动 一边播放背景音乐在

5、Scratch中 标签以 当 开头的图块 就代表着线程的开始 在Scratch中 每个 脚本 script 就是一个线程一个程序中如果有两个这样的图块 就会有两个线程运行 线程2 2 下面代码中 左边线程负责播放声音 右边线程不断检测用户是否按下了空格键 用于判断用户是否要关闭或打开声音 事件3 1 在编程中 不同线程之间可以通过广播和处理事件来彼此交互通信 事件就像一个线程发送给其它线程的消息在Scratch中 标签以 广播 开始的图块用于发送事件 标签以 当 开始的图块用于处理事件 这也代表一个线程的开始 这种线程叫 事件处理程序 广播发送事件的图块如下 处理事件的图块如下 事件3 2 事

6、件不仅可以通过图块发送 而且也可以通过用户的行为产生 例如 点击Scratch窗口的绿旗 就会产生一个事件 该事件可被下面的图块接收和处理 事件3 3 在Scratch中 事件不仅可用于线程之间的通信 也可用于不同角色之间的通信和交互例如 两个角色或许想玩MarcoPolo 左边是一个角色的脚本 右边是另一个角色的脚本 这样可以实现左边角色说Marco后 右边角色说Polo Oscartime游戏21 1 利用语句 逻辑表达式 条件 循环 变量 线程和事件 可以构建出有趣的程序下面 我们来看Oscartime游戏程序 这个程序第一眼看上去好像很复杂 但是实际上 我们通过研究其内部组成会发现 这

7、个程序也只是上面我们所学习的这些积木块的一个应用 Oscartime游戏21 2 Oscartime是用Scratch编写的一个游戏 在Oscar唱完一首经典歌曲前 玩家要将掉下来的垃圾尽可能多地拖入Oscar的垃圾箱中 Oscartime游戏21 3 Oscartime有9个角色 每个角色使用了一至三个线程下面我们在Oscartime中来研究一下上面我们学过的程序结构 这样我们就不仅知道如何玩这个游戏 而且知道如何自己做一个这样的游戏 Oscartime游戏21 4 Instructions角色负责在游戏开始时 简单显示一些游戏的玩法这个角色仅使用一个线程来显示游戏的开始画面 这个画面实际上

8、是通过角色的一个造型来实现的 在屏幕上居中显示4秒钟 Oscartime游戏21 5 Instructions角色非常简单 是不是 角色显示了游戏名称 作者 作者的电子邮箱 以及游戏的玩法 DragasmuchfallingtrashasyoucantoOscar strashcanbeforehissongends 这句话的意思就是 在Oscar唱完一首经典歌曲前 玩家要将掉下来的垃圾尽可能多地拖入Oscar的垃圾箱中 Oscartime游戏21 6 Trash角色Trash 垃圾 角色被设计为从天空中的任意位置掉落到地面上一旦玩家将垃圾捡起来并拖入垃圾箱 角色就会从一个新位置重新掉落 这个

9、过程会不断地重复每次将垃圾拖入垃圾箱 玩家会得一分 Oscartime游戏21 7 Trash角色这个角色的第一个线程这个线程在用户点击Scratch的绿旗后开始执行 Oscartime游戏21 8 第一部分代码将角色隐藏 运动方向设置为垂直向下 180度 初始高度是固定的 y坐标180 左右位置即横坐标是在 100到220之间的一个随机位置 4秒后 角色显示出来 Oscartime游戏21 9 线程的循环结构中的第一个条件结构如果玩家按下了鼠标左键 而且鼠标指针碰到了这个角色 就需要做进一步的判断 1 玩家是刚刚点中这个角色吗 如果是 我们需要进入拖放模式 如果不是 玩家就已经进入拖放模式了

10、 这一点是靠my click 0来判断的 局部变量my click的作用是记住当前角色被点中 局部变量my click在每个掉落的垃圾角色中都有一个 是不同的变量 也就是说有7个不同的my click变量 这些变量虽然名字相同 但其取值可以是不同的 在这个程序中 如果Trash角色的my click变量为1 则Sneaker Trombone等其他角色的my click变量为0 Oscartime游戏21 10 2 之前玩家是否没有点中其他角色 我们要确保玩家一次只能捡起一个角色 即使有多个角色在屏幕上是重叠在一起的 这一点是靠good click 0来保证的 全局变量good click的作

11、用是记住有一个角色被点中 全局变量good click对所有角色来说都是可见的 变量只有一个 在Trash角色中修改了good click的值 其他角色也都看得到这种变化 变量bad click在程序中没有用到 是可以删除的 Oscartime游戏21 11 如果上述条件都满足 角色设置全局变量good click和局部变量my click为真 1 这样程序就能够记住当前角色被点中 该角色可以开始被拖动 接下来 线程广播了一个事件 名字叫 trash click 该角色的另一个线程接收到此事件后开始处理实际的拖动操作 Oscartime游戏21 12 如果上面的条件没有都满足 角色不能进行拖动

12、 循环中的第二个条件结构命令角色向下跌落一步 直到角色跌落到地面 y坐标高度为 165 上为止 Oscartime游戏21 13 循环中的最后一个条件结构判断角色是否已经被拖动到离Oscar的垃圾箱足够近的距离 小于20 如果足够近 垃圾被收进垃圾箱 玩家得一分 Oscartime游戏21 14 1 程序是否仍在运行 这靠全局变量playing 1来判断 Oscar唱完歌 playing的值被设置为0 就不能再将垃圾放入垃圾箱了 2 角色离垃圾箱距离是否小于20个像素 如果是 垃圾就可以放入垃圾箱 3 玩家是否松开了 没有按下 鼠标左键 只有你松开鼠标左键时 垃圾才能被放入垃圾箱 如果所有三个

13、条件满足 角色隐藏 看起来的效果就像是被放入了垃圾箱 然后广播一个名为scored的事件 通知Oscar角色的一个线程显示得分的画面效果 等待大约2秒 再移动到天空中的一个新的位置 然后再显示出来 重新开始从天空掉落因为上面的三个条件结构都嵌套于 重复执行 循环结构中 角色会一直按照上面的要求运动 直到游戏结束 Oscartime游戏21 15 拖动角色的视觉效果是由下面第二个线程实现的 只要玩家一直按下鼠标左键 角色就会跟随鼠标指针移到 从而显示被鼠标拖动的效果 一旦玩家松开鼠标左键 此线程将变量good click设为0 表示没有角色被点中 再将变量my click设为0 表示当前角色没有

14、被点中 此线程 死掉 结束本次运行 当本角色再次被 捡起 时 线程才会重新运行 Oscartime游戏21 16 Oscartime游戏中Sneaker Newspaper Clock Telephone Umbrella 和Trombone角色的行为方式和Trash角色在本质上是相同的 代码只有以下几个区别 1 角色第一次出现的时间不同 靠显示之前等待的不同秒数来实现 当Oscar唱歌时 在歌中第一次提到角色时 角色才开始显示 2 代码中my click代表不同的变量 但作用是相同的3 被点中时 广播的事件名称是不同的因此 可以通过拖动Trash角色的代码到其他角色实现代码的复制 然后再去修

15、改上面不同的部分 实现快速的开发 Oscartime游戏21 17 Oscar角色Oscar角色使用三个不同的线程来记录玩家的得分并显示玩家得分的画面第一个线程实现了游戏的主控框架 Oscartime游戏21 18 开始时 此线程将角色显示为默认造型 垃圾箱盖子没有打开的造型 将角色移动到指定位置 140 122 并显示 将全局变量playing设为真 1 这样 其它角色就可以知道程序正在运行 Oscar正在唱歌 然后 开始播放Oscar的歌曲 玩家开始玩游戏 歌曲一旦唱完 134秒之后 这是歌曲的播放时间长度 设置全局变量playing设为假 0 这样 其它角色就可以知道程序结束 接下来 切

16、换角色造型 宣布玩家得分 然后结束游戏中的所有线程 Oscartime游戏21 19 第二个线程实时跟踪显示玩家的每一次得分 每次其它角色广播scored事件时 本线程处理此事件 设置局部逻辑变量scoring为真 表示正在显示得分 这样角色的其它线程可以知道这件事 从而不再改变Oscar的造型 以免引起混乱 接下来 从垃圾箱中弹出Oscar 宣布玩家当前得分 Oscartime游戏21 20 第三个线程实现 每当垃圾接近垃圾箱时 距离小于40像素 升起垃圾箱的盖子盖子升起需要三个条件 1 程序正在运行 2 Oscar没有正在宣布得分 3 垃圾离垃圾箱距离小于40像素 Oscartime游戏21 21 上面我们介绍了Oscartime的工作原理 游戏中包含了很多图块 但本质上 游戏只是我们将前面讲的语句 变量 分支结构 循环结构 表达式 线程 事件等程序结构组合在一起的结果虽然 Scratch的确支持很多编程语言中常见的一些程序结构 但它并不支持所有的编程结构 总结4 1 大多数编程语言中都有但是Scratch中没有的程序结构包括 方法 通过方法 允许你将代码的执行控制从一个语句序列传

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号