数据结构论坛

首页 » 分类 » 定义 » 用Scratch36开发简易小时钟4
TUhjnbcbe - 2023/8/12 19:50:00
中科医院 http://m.39.net/pf/a_6739268.html

欢迎朋友们继续阅读这个小系列。接下来,我们要继续改进前面几个短文中介绍的小时钟的功能。

一、运行时视频

01:16

二、功能设计

如前面视频中所介绍的,在本版本的小时钟中边缘上的蓝色小球与秒针的移动同步,即每隔1秒,秒针旋转6度,蓝色小球会相应地计算出其新位置坐标,并移动到新位置。旋转过程中,秒针一直指向蓝色小球。粉色小球一直在秒针上,并随着秒针的移动而移动。

特别值得注意的是紫色小球。它从起始位置(0,)处随着秒针的旋转作围绕中心点(0,)半径为30的圆周运动。而且,我们的设计要求是秒针转一圈,这个紫色小球也正好转一圈。

三、变量设计

本程序中共有三个变量:小球X坐标、小球Y坐标与指针角度。这三个变量的意义与作用在前面文章中介绍过,在此不再赘述。

四、消息设计

本程序中仅有一条消息——旋转开始。发出者是“开始”按钮角色;接收角色有:三个小球和秒针。在接收到这个消息后,它们作相应的计算,并各自更新相应的位置。

五、画笔积木使用简介

自Scratch3.0开始,画笔积木被转移到积木中,但是其使用与以前版本没有什么大的区别。我们在本程序中引入画笔目的有二:

程序运行开始擦除屏幕上可能绘制的干扰内容绘制紫色小球的运行轨迹,以便作为概念理解方面的更准确形象的对比展示有关画笔的使用逻辑非常简单。一般遵循如下思路:

初始化(清笔迹)作计算并设置画笔的粗细与颜色等落笔通过执行各种及类积木命令,在类积木作用下绘制几何图形至于绘制什么样的图形,则看你的数学几何知识的掌握程度(也可以绘制模拟三维的图形呢)。本程序中是绘制一个半径为30的小圆圈,并让紫色小球围绕这个圆作圆周运动。

六、角色编程

(一)舞台编程

舞台代码

舞台代码功能简单,即负责程序运行开始时的清屏幕及全局变量初始化工作,不再赘述。注意:这里变量的初始化将影响程序开始时的各角色的初始位置。

(二)“开始”按钮编程

“开始”角色对应的积木代码

我们的程序设计逻辑是这样的:用户通过点击“系统”提供的小绿旗按钮启动程序运行(这也是Scratch推荐的标准方法),然后在表的稍左下位置显示一个“开始”按钮(更正式的思路则是Scratch官方网站提供的在小绿旗按钮被点击后系统从远程服务器端加载程序使用的各种资源,例如声音、图形、动画等数据,而在所有程序资源下载到本地——准备好之后,才能点击程序自定制的”开始“按钮正式开始使用程序)。当用户点击这个“开始”按钮后,自身隐藏,并执行一个无限循环。循环执行的内容有三:播放消息;等待1秒;将秒针角度变量的值增加6度。

也就是说,此处的代码统筹全局:只要用户不点击”停止“按钮,系统会永远执行下去,每隔1秒不断地发送消息给秒针等其他角色,其他角色收到此信息后作相应的调整。

(三)秒针编程

秒针代码

在程序刚开始运行时,调整秒针方向并清屏。当收到“旋转开始”消息后播放秒针跑的声音,并根据全局变量“指针角度”调整秒针位置。

(四)蓝色小球编程

蓝色小球代码

蓝色小球的编程逻辑在本系列(三)中已经介绍,相信朋友们能够理解,在此不再赘述。

(五)粉色小球编程

粉色小球代码

粉色小球代码有两点需要注意:第一是小球的初始位置坐标;第二是小球围绕旋转的点正是整个秒表的圆心,它在距离这个圆心50的位置上作随同秒针旋转的同步旋转运动。注意:这里的小球的坐标点的计算公式同(四)的理解。

(六)紫色小球编程

紫色小球代码

我们在小秒表内部旋转一个紫色小球的目的是,让它随着秒针与蓝色小球的运动作对比,以便同学们全面地理解角度坐标概念及运算在程序开发中的重要作用。本程序中,我们让这个紫色小球作与秒针等运动规律同步的自己围绕中心点(0,)半径为30的匀速圆周运动。全面理解这里的计算将对于我们以后开发出模拟中学自然地理部分的有关太阳、地球、月亮的相对运行模拟程序作好铺垫。

从整体上看,上面代码中的复杂逻辑主要在于计算小紫色球的坐标位置计算公式。请参考下面的图示。

P点坐标公式计算

现在,我们简要介绍一下上面小球围绕O点作以r为半径的圆周运行时它在圆周上的位置P点的计算公式的计算原理。

其实,简要总结一下即可说明问题。大家可能还记得在本系列的第(三)篇中,我们计算小秒表中小球的坐标计算公式是:

x=rsina

y=rcosa

其实,进一步分析,这种情况下小球是在作围绕(0,0)点的圆周运行。上面的公式,其实等价于:

x=rsina+0

y=rcosa+0

现在,小球的圆周运行圆点是(x0,y0)。根据初中数学坐标点平移坐标公式,在本篇中的程序中,紫色小球的旋转点不再是整个表的圆点(0,0)处,而是(x0,y0)点,于是小球某一时刻的坐标公式变成:

x=rsina+x0

y=rcosa+y0

至此,上面的积木块公式应该理解了吧。当然,后面设置画笔粗细、颜色及落笔的代码在此不必详加说明。

七、小结

还是那句名言:程序=数据结构+算法。一个软件的开发的精华在于,结合你使用的算法选择准确的数据结构。当然,最关键的还是在于算法的创建与应用。在本例中,算法方面即是中学三角函数及坐标点平移知识,再结合Scratch角度坐标系的理解,即可解决问题。本程序中所使用的数据结构也就是三个变量,它们的含义都是相当简单的。另外,消息播放与接收机制也是程序开发(包括企业级应用开发)中的一种重要技术,也应当全面地理解与熟练掌握。

有兴趣的朋友,请抓紧试试吧——接下来后面还有更为精致的程序调整呢——直至开发出一个比较满意的应用型小时钟程序!

1
查看完整版本: 用Scratch36开发简易小时钟4