Ovobot 文档¶
欢迎,这里是Ovobot产品的相关文档。
Ovobot(奥瓦机器人)是一家集软硬件研发,课程体系设计,并融合人工智能和物联网技术的STEAM教育解决方案提供商。 公司秉承激发兴趣,启智未来的理念,以高创新能力,自主研发贴合教育实际需求的STEAM教育产品。
Ovobot Bit机器人简介¶
Ovobot Bit是一款可编程机器人小车,可以使用图形化和Python编程来学习小车驱动原理以及传感器在自动驾驶汽车上的应用。
Bit搭载了超声波、巡线、加速度、陀螺仪、电子罗盘、声音、光敏、红外和温度传感器,并配有5x5点阵屏幕、蜂鸣器、音乐、RGB灯等多个输出单元。
Bit有蓝牙、2.4G和红外三种无线通信方式,机器人可以通过无线信号进行协作,也可以配合遥控器开发出远程遥控功能。结合丰富的传感器和小车载体,通过编程可以制作出多种创意机器人应用。

Ovobot Bit Scratch指南¶
以下是使用Scratch给Ovobot Bit机器人编程的快速参考,如果你是第一次给机器人编程,请先阅读接下来的部分:
基础积木块编程指南¶
运动¶
1.设置移动速度程序块
2.设置移动速度及时间程序块
3.设置旋转速度程序块
4.设置旋转速度及时间程序块
5.停止运动程序块
6.驱动电机程序块
外观¶
1.RGB LED灯颜色设置程序块
2.显示字符程序块
3.显示图案程序块
4.熄灭屏幕程序块
5.点亮坐标程序块
6.设置坐标程序块
声音¶
1.播放音符程序块
下图主板上的标记位置为蜂鸣器,即Bit的发声模块。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机和定时器等电子产品中作发声器件。
简谱和音名的对应关系:我们在生活中,一般接触到的都是1234567这样的简谱,但Ovoblock的程序块是使用五线谱的音名来显示的,在C调的乐谱中,它们之间的对应关系如下。
![]()
C调中,C、D、E、F、G、A、B分别对应简谱中的1、2、3、4、5、6、7,一个唱名为四分音符持续1个节拍,下方有一个横杠的是八分音符持续1/2节拍,音符后有一个横杠的为二分音符持续2个节拍,同学们按照音符和节拍数编写整段音乐。
比如下面的上学歌,不划线是四分音符,在这首曲子中是一个节拍,一道下划线的节拍相当于八分音,在这首曲子中是1/2拍。
一些音符后面会加-,表示音符持续,例如7 - 代表 7 这个音占了两个节拍,7- - 则表示3个节拍。
![]()
例子:
当绿旗被点击时,播放C音符持续一个节拍,然后播放E音符持续一个节拍。
![]()
2.暂停播放节拍程序块
无线通讯¶
事件¶
1.程序的起点
2.键盘按键按下事件程序块
3.当按钮按下事件程序块
4.当红外遥控器按键按下程序块
5.当响度大于程序块
6.当接收到消息程序块
7.广播程序块
8.广播并等待程序块
控制¶
1.等待N秒程序块
2.重复执行N次程序块
3.重复执行程序块
4.如果……那么……程序块
5.如果……那么……否则程序块
6.等待直到程序块
7.重复直到程序块
侦测¶
1.判断按钮按下事件程序块
2.红外遥控器按键判断程序块
3.判断Bit姿态程序块
4.加速度程序块
5.响度程序块
6.电池电量程序块
7.陀螺仪程序块
8.姿态角程序块
9.指南针角度程序块
10.指南针磁场强度程序块
11.温度程序块
12.亮度级别程序块
13.运行时间程序块
14.超声波传感器距离程序块
15.超声波传感器检测到障碍物程序块
16.巡线传感器数值程序块
17.巡线传感器检测到颜色程序块
运算¶
1.算术运算程序块
2.取随机数程序块
3.条件判断程序块
4.逻辑与程序块
5.逻辑或程序块
6.条件不成立程序块
7.数组程序块
8.数组数字程序块
9.连接程序块
10.设置连接物的字符程序块
11.设置链接物字符
12.判断包含程序块
13.取余程序块
14.四舍五入程序块
15.绝对值程序块
变量¶
视觉识别摄像头积木块编程指南¶
视觉识别摄像头简介¶
(1)视觉识别摄像头可以作为Ovobot bit的扩展来使用,它是一款用于图像识别的传感器,在离线模式下才可以使用。
(2)其内置的深度学习引擎可以识别多种目标物体,例如颜色检测、球体检测、人体检测、卡片识别等。
(3)检测结果可以通过 I2C 进行输出,体积小巧,功耗低,所有算法本地处理,无须联网,可广泛应用于人工智能教具、创客等产品或领域。
(4)提供了简单而实用的参数设置功能:摄像头帧率,LED 颜色,数码变焦,白平衡,算法性能设置。合理设置这些参数,将会有利于摄像头性能的提升。
下面我们将介绍视觉识别摄像头的使用方法。
视觉识别摄像头硬件连接¶
视觉识别摄像头的外设和接口如图所示:
![]()
(1)将传感器左侧输出模式拨码开关1拨至下方,2拨至上方;
(2)将传感器连接到Ovobot bit的I2C扩展接口;
(3)将传感器的地址选择拨码开关拨至对应位(默认地址0x60,对应MU00,1、2都在下方,只有在与其他传感器地址冲突时才需要进行更改,平时不推荐修改此设置),
视觉识别摄像头积木块介绍¶
初始化模块
开启算法
设置算法性能
关闭/开启摄像头高帧率模式
设置摄像头白平衡
(1)当摄像头视野中出现大面积有颜色的物体时,摄像头会发生白平衡失真,产生偏色现象,通过事先锁定白平衡能够防止此问题的发生。在调用此编程模块时,需要将摄像头朝向白纸距离约20厘米进行测光,数秒后摄像头的白平衡会自动被锁定。
(2)但白平衡功能并不总是有利于色彩还原的,合理使用白平衡对于颜色相关的算法是十分关键。
(3)白平衡的调节分为自动调节方式和固定参数方式,对于一张构图颜色均衡的图像,其 R,G,B 三个通道的值应是分布均匀的,如果 R、G、B 通道分布出现了失衡,自动白平衡功能会适时的修改各通道的色彩增益值使其重新分布均衡,而固定白平衡是不会改变其色彩增益的。
(4)模式介绍:
自动模式:适用于光照良好且对颜色要求不高的环境中使用;
锁定模式:适用于颜色还原要求较高的环境,让摄像头面对白纸进行白平衡校准,然后锁定白平衡参数,锁定后颜色不会随环境的改变而变化;
白光模式:适合于白色灯光或者阴天环境中使用,该模式也属于自动白平衡模式;
黄光模式:适合于黄色灯光或者阳光环境中使用,该模式也属于自动白平衡模式。
(5)锁定白平衡的校准方法
将摄像头面向一张白纸 10~20cm 处,确保摄像头中心区域完全面向白纸,灯光照向白纸,但尽量不要有阴影遮挡;
调用锁定白平衡指令,或短按功能按键(摄像头左侧 mode 键);
摄像头的 LED 会闪烁一下白色灯光,开始白平衡校准;
几秒钟后,当 LED 闪烁一下青色灯光后,表明白平衡校准完成;
如果 LED 闪烁为紫色灯光,则表明校准失败,可以再次重新校准。
备注 1:由于校准白平衡需要几秒钟的时间,所以使用软件锁定白平衡时应该位于小 MU 设置最后使用,并设定 2 秒左右的暂停时间等待校准完成。
备注 2:按键方式可以在小 MU 运行的任何时刻去校准白平衡,而指令模式只适合于开机后的配置阶段使用。
备注 3:如果校准时使用的不是白纸,即便校准后显示为青色灯光,那么图像也可能是处于偏色状态的,因为该功能会将其他颜色尽量调节为白色。
(6) 锁定白平衡模式的使用场景
设置摄像头数码变焦
板载LED灯光设置
恢复模块默认设置
判断摄像头是否检测到目标
判断摄像头是否检测到颜色
(1)检测到目标位置的颜色后,返回true, 否则返回False。
(2)色块检测与颜色识别的区别:
(3)颜色Label分类标签的定义:
判断摄像头是否检测到色块
检测的目标色块可以在下拉框里选择,摄像头检测到所选目标色块后,返回true, 否则返回False。
获取检测目标的坐标以及大小
返回值是检测到的目标的坐标。检测目标可以在下拉框选择,获取的值有横向,纵向坐标,以及目标的宽度和高度。
(1)X-Y 坐标:摄像头输出图像的宽高比例为 4:3。在图像坐标系中,水平与垂直坐标均被量化到了 0~100 的范围内,其含义是该坐标相对于完整图像的百分比位置。例如 X 为30时,即该物体的 X 坐标位于水平方向距离原点 30%的位置上。
(2)W-H 宽高:当检测到物体后,返回物体的 Width 宽度值和 Height 高度值,其量程同样被量化到了 0~100 的范围内,其 W 宽度的含义是其在整个水平方向所占据的百分比值,H 高度的含义是其在整个垂直方向所占据的百分比值。需要注意的是,由于水平垂直的比例是 4:3,所以对于宽高相同的正方形物体而言,其输出的宽高值是存在一个 3:4 的比例关系的,而并不是相等的关系。
(3)Label 分类标签:对于具有分类识别功能的算法而言,还会根据所检测到的不同物体输出其对应的分类标签值,该值是内部设定好的一系列数字,每一个数字对应一个特定的物体,以球体算法为例,当 Label 标签为 1 时,代表检测到了一个乒乓球,而如果 Label 标签输出为 2,则说明此刻检测到的是一个网球。Label 分类标签在颜色和卡片的算法中是一个十分关键的信息。
获取目标颜色里对应的RGB值
颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。在使用颜色识别时可以指定识别区域的坐标,其余参数为默认值。
判断是否检测到形状卡片里所选形状
检测到形状卡片里所选形状卡片后,返回true, 否则返回False。形状有钩,叉,圆形,方形,三角形可以选。
判断是否检测到交通卡片里所选图标
检测到交通卡片里所选图标后,返回true, 否则返回False。图标有向前,向左,向右,掉头,停车可以选。
判断是否检测到数据卡片里对应数字
检测到数字卡片里所选数字后,返回true, 否则返回False。数字有0-9可以选择。
判断是否检测到所选颜色
检测到所选的颜色后,返回true, 否则返回False。颜色有9种可以选择。
完整示例¶
球体与人体检测:
球体算法的特殊性:球体算法分为搜索阶段和跟踪阶段,在球体未检测到时处于搜索阶段,此时处理速度相对比较慢,检测距离也会比较近。一旦检测到球体后,会进入跟踪阶段,处理速度会有所提升,检测距离也会变远。当球体丢失后,会再次进入搜索阶段。
人体算法的有效特征:人体检测实际是检测人体的上半身特征,上半身特征是指由头部(必须包含人脸)和胸部以上(肩膀)构成的特征组合,如果图像中具有符合人体上半身特征,那么会被认为是有人体被检测到。
初始程序:采用I2C连接,启用人体检测算法,其余设置为默认。
循环程序:如果视觉传感器检测到人体,会通过I2C向Ovobot bit发送检测到的数据,Ovobot bit会通过点阵屏幕显示位置和类型信息,否则循环显示未检测到人体,球体检测同理。
实验现象:未检测到人体则视觉传感器闪红灯,屏幕显示”X”。检测到人体则视觉传感器闪蓝灯,屏幕显示”笑脸”。
卡片识别
我们具有 3 类卡片算法:形状卡片,交通卡片,数字卡片。摄像头只能识别下述特定图案的卡片。在一幅图像中,同一个算法只能返回一个卡片的检测结果,但可以同时运行不同类型的卡片算法。
初始程序:采用I2C连接,启用交通卡片识别算法,其余设置为默认。
循环程序:如果视觉传感器检测到交通卡片,会通过I2C向Ovobot bit发送检测到的数据,Ovobot bit会通过点阵显示类型信息,否则循环显示未识别,其他类型的卡片识别同理。
实验现象:未检测到卡片则视觉传感器LED闪红灯,屏幕显示”X”。识别到则视觉传感器LED闪蓝灯,屏幕显示交通卡片的具体图案信息。
我们可以在识别不同卡片之后让Bit机器人做出相应的前进,后退,左转,右转,停下这些操作,就可以实现智能驾驶了。
颜色识别
在使用颜色识别算法时,需要指定一个颜色识别区域,算法运行后只返回该区域内的颜色信息。颜色识别区域小,像素少,速度快,但容易因各别像素的偏色而造成可信度的降低;颜色识别区域大,像素多,速度慢,但容易受背景的干扰。颜色识别区域应根据实际需求而合理设置。
颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。
初始程序:采用I2C连接,启用颜色识别算法,锁定摄像头白平衡防止偏色,其余设置为默认。
循环程序:视觉传感器识别坐标(50,50)处的颜色,通过I2C向Ovobot bit发送检测到的数据,Ovobot bit会通过屏幕显示颜色类别。
实验现象:视觉传感器始终不闪灯,点阵显示返回的颜色类别。
色块检测
后续将更新更多案例,敬请期待。。。
基础扩展包积木块编程指南¶
Ovobot Bit MicroPython指南¶
开始编程前,首先需要导入必要的库:
from microbit import *
from ovobot import *
以下是使用Scratch给Ovobot Bit机器人编程的快速参考,如果你是第一次给机器人编程请先阅读接下来的部分:
运动¶
-
move
(dir, speed)¶ 通过设定机器人运动方向、运动速度和持续时间来让机器人运动,速度范围为0~255。
- 参数
dir (int) – 可以为0或者1,0:机器人向前运动,1:机器人向后运动。
speed (int) – 设置机器人运动的速度,数值范围为0~255。
例子:
from ovobot import *
from microbit import *
moveAtSpeed(0,100)
sleep(1* 1000)
stopMove()
解析:当绿旗被点击时,Bit机器人以100的速度匀速前进(0代表前进,1代表后退),等待1秒后停止运动。
-
move
(dir, speed, s) 通过设定机器人运动方向、运动速度和持续时间来让机器人运动,速度范围为0~255。
- 参数
dir (int) – 可以为0或者1,0:机器人向前运动,1:机器人向后运动。
speed (int) – 设置机器人运动的速度,数值范围为0~255。
s (int) – 控制机器人持续运行指定的时间(秒)。
例子:
from ovobot import *
move(0,100,1)
解析:当绿旗被点击时,Bit机器人以100的速度匀速前进(0代表前进,1代表后退),持续时间为1秒。
-
rotateAtSpeed
(dir, speed)¶ 设置机器人向左或者向右的旋转速度,速度范围为0~255。
- 参数
dir (int) – 可以为0或者1,0:机器人向左旋转,1:机器人向右旋转。
speed (int) – 设置机器人旋转的速度,数值范围为0~255。
例子:
from ovobot import *
from microbit import *
rotateAtSpeed(0,100)
sleep(1* 1000)
stopMove()
解析:当绿旗被点击时,Bit机器人以100的速度向左旋转(0代表向左,1代表向右),等待1秒后停止运动。
-
rotate
(dir, speed, s)¶ 设置机器人向左或者向右的旋转速度以及持续时间,速度范围为0~255。
- 参数
dir (int) – 可以为0或者1,0:机器人向左旋转,1:机器人向右旋转。
speed (int) – 设置机器人旋转的速度,数值范围为0~255。
s (int) – 控制机器人持续运行指定的时间(秒)。
例子:
from ovobot import *
rotate(0,100,1)
解析:当绿旗被点击时,Bit机器人以100的速度向左旋转(0代表向左,1代表向右),持续时间为1秒。
-
stopMove
()¶ 设置左右两个电机的运动速度为0。
例子:
from ovobot import *
from microbit import *
rotateAtSpeed(0,100)
sleep(1* 1000)
stopMove()
解析:当绿旗被点击时,Bit机器人以100的速度向左旋转,等待1秒后停止运动。
-
rawMotorWithPwm
(speed, speed)¶ 分别驱动Bit的左右两个轮子的转速。
- 参数
speed (int) – 设置驱动Bit的左轮的转速,数值范围为-255~255。
speed – 设置驱动Bit的右轮的转速,数值范围为-255~255。
例子:
from ovobot import *
from microbit import *
rawMotorWithPwm(-255,100)
sleep(1* 1000)
rawMotorWithPwm(100,-255)
stopMove()
解析:当绿旗被点击时,Bit机器人的驱动电机以左轮-255、右轮100的速度行走, 等待1秒后,再以左轮100右轮-255的速度前进后停止运动。 (即先左拐再右拐)
外观¶
-
setledGroupColor
(color, color)¶ 可以分别设置左右两侧LED灯的颜色。
- 参数
color (int) – 设置左侧LED灯的颜色,可以为0-8,0:红色,1:橙色,2:黄色,3:绿色,4:蓝色,5:靛蓝色,6:紫色,7:白色,8:黑色。
color – 设置右侧LED灯的颜色,可以为0-8,0:红色,1:橙色,2:黄色,3:绿色,4:蓝色,5:靛蓝色,6:紫色,7:白色,8:黑色。
例子:
from ovobot import *
from microbit import *
while True:
setledGroupColor(1,4)
sleep(1* 1000)
setledGroupColor(3,6)
sleep(1* 1000)
解析:当绿旗被点击时,Bit机器人的彩色灯左侧为橙色,右侧为蓝色,等待1秒后,彩色灯左侧变为绿色,右侧变为紫色, 再等待1秒后变回原来的颜色, 如此重复执行这一指令。
-
display.
scroll
(value,delay = 150,*,wait = True,loop = False,monospace = False)¶
value在显示屏上水平滚动,如果value为整数或浮点数,则首先使用将其转换为字符串str()。 该delay参数控制文本滚动的速度。 如果wait为True,则此功能将阻塞直到动画结束,否则动画将在后台发生。 如果loop为True,则动画将永远重复。 如果monospace为True,则字符将全部占用5个像素列的宽度,否则在滚动时每个字符之间将恰好有1个空白像素列。 请注意wait,loop和monospace参数必须使用其关键字指定。
-
display.
show
(value,delay = 400,*,wait = True,loop = False,clear = False)¶
如果value为字符串,浮点数或整数,则按顺序显示字母/数字。 否则,如果value是可重复的图像序列,请依次显示这些图像。每个字母,数字或图像delay之间以毫秒为单位显示。 如果wait为True,则此功能将阻塞直到动画结束,否则动画将在后台发生。 如果loop为True,则动画将永远重复。 如果clear为True,则在迭代完成后将清除显示。 请注意wait,loop和clear参数必须使用其关键字指定。 详情请参考:https://microbit-micropython.readthedocs.io/en/latest/tutorials/images.html
例子:
from microbit import *
display.show(Image("09090:90909:90009:09090:00900"))
sleep(0.5* 1000)
display.show(Image("99999:00009:99999:90000:99999"))
sleep(0.5* 1000)
解析:当绿旗被点击时,Bit机器人的LED灯显示“❤”的图案,等待0.5秒后,变为显示“2”的图案,同样显示0.5秒。
-
display.
clear
()¶ 将所有LED的亮度设置为0(熄灭)。
例子:
from microbit import *
display.show(Image("09090:90909:90009:09090:00900"))
sleep(2* 1000)
display.clear()
解析:当绿旗被点击时,Bit机器人的LED灯显示“❤”的图案,等待2秒后,熄灭屏幕。
-
display.
set_pixel
(x, y, action)¶ 点亮Bit机器人LED点阵屏上某个坐标的LED,x、y的数值范围为0~4,零点在点阵屏的左上角,水平向右为x轴,竖直向下为y轴。
- 参数
x (int) – 对应x轴的坐标,数值范围为0~4。
y (int) – 对应y轴的坐标,数值范围为0~4。
action (int) – 0:熄灭,9:点亮。
-
display.
set_pixel
(x, y, value) 将列x和行的LED亮度设置为value,必须是0到9之间的整数。
- 参数
x (int) – 设置对应x轴的坐标,数值范围为0~4。
y (int) – 设置对应y轴的坐标,数值范围为0~4。
value (int) – 0:熄灭,9:点亮。
-
display.
get_pixel
(x, y)¶ 以0(熄灭)和9(点亮)之间的整数返回列x和行的LED亮度y。
- 参数
x (int) – 设置对应x轴的坐标,数值范围为0~4。
y (int) – 设置对应y轴的坐标,数值范围为0~4。
声音¶
-
music.
pitch
(频率,持续时间= -1,pin = microbit.pin0,wait = True)¶
以指定的毫秒数以给定的整数频率播放音高。 例如,如果频率设置为440,长度设置为1000,则我们将听到标准音乐会A的声音达一秒钟。 请注意,您一次只能在一根针上弹一个音高。 如果wait设置为True,则此功能正在阻止。 如果duration为负,则连续播放音调,直到阻塞呼叫被中断,或者在后台呼叫的情况下,设置或调用了新的频率stop。 详情请参考:https://microbit-micropython.readthedocs.io/en/latest/music.html
例子:
from microbit import *
import music
music.pitch(262 , 500 , pin=pin0 , wait=True)
music.pitch(330 , 1000 , pin=pin0 , wait=True)
解析:当绿旗被点击时,播放C音符持续一个节拍,然后播放E音符持续一个节拍。
-
music.
stop
(pin = microbit.pin0)¶ 在给定的引脚上停止所有音乐播放,例如:music.stop(pin1)。 如果没有给出引脚,例如:music.stop()假设为pin0。
- 参数
note (int) – 默认选择播放的音符为0,即代表暂停播放。
beat (int) – 音符播放的节拍数,节拍数为500的倍数,倍数范围为1/16~4。
引脚¶
-
pin1.
is_touched
()¶ 如果引脚被用手指触摸,返回True,否则返回False。 该测试是通过测量引脚与地面之间有多少电阻来完成的。低电阻可提供的读数True。 为了使用手指获得可靠的读数,您可能需要用身体的另一部分(例如另一只手)触摸接地插针。
-
pin1.
read_analog
()¶ 读取施加到该引脚的电压,并将其返回为0(表示0V)和1023(表示3.3V)之间的整数。
-
pin1.
write_analog
(n)¶ 在引脚上输出PWM信号,占空比与所提供的成正比。 value可以是整数或0(0%占空比)之间的浮点数和1023(100%占空比)。
-
pin1.
read_digital
()¶ 如果引脚为高电平,则返回1;如果引脚为低电平,则返回0。
-
pin1.
write_digital
(n)¶ 如果value为1,则将引脚设置为高电平;如果为0,则将其设置为低电平。
无线通讯¶
-
radio.
on
()¶ 打开无线通讯,由于无线电会消耗功率并占用您可能需要的内存,因此需要显式调用此方法。
-
radio.
off
()¶ 关闭无线通讯,从而节省电量和内存。
-
radio.
reset
()¶ 复位无线通讯,将设置重置为其默认值
-
radio.
send
('str')¶ 发送无线消息。
- 参数
str (int) – 字符串,可以是文字、字母、数字。
-
radio.
send_bytes
(list_tobytes([1, 2]))¶ 发送无线消息列表。
-
list_tobytes
([radio.receive()¶ 接收无线消息。
-
list_tobytes
(bytes_tolist(radio.receive_bytes())) 接收无线消息列表。
-
radio.
config
(channel=1)¶ 设置无线通讯频道。
事件¶
-
from microbit import *
当机器人处于离线模式时,启动Ovobot Bit,执行此模块下方的程序。
例子:
from microbit import *
import music
music.pitch(262 , 500 , pin=pin0 , wait=True)
解析:当机器人处于离线模式时,启动Ovobot Bit,播放C音符持续一个节拍。
-
on_button_action_pressed():
按钮指的是micro:bit的两个可编程按键,分为A和B,当对应Bit的按钮被按下时,执行此模块下方的程序。
- 参数
action (int) – 设置对应按钮,a代表A键,b代表B键。
例子:
from microbit import *
from ovobot import *
def on_button_a_pressed():
move(0,100,1)
while True:
if button_a.is_pressed():
on_button_a_pressed()
解析:当按下micro:bit的可编程按键A键时,Bit机器人以100的速度前进,持续时间为1秒。
-
on_irbutton_button_pressed():
当红外遥控器对应的按钮被按下时,则会执行程序块下方的程序。
- 参数
button (int) – 设置对应按钮,1-21代表不同的按钮。
例子:
from ovobot import *
def on_irbutton_m_pressed():
move(1,255,2)
while True:
if irkeyIsPressed(1):
on_irbutton_m_pressed()
解析:当按下红外遥控器的M键时,Bit机器人以255的速度后退,持续时间为2秒。
-
fon_loudness_greater_than_vol():
当响度大于设置数值时,则会执行程序块下方的程序。
- 参数
vol (int) – 可设置响度大小。
侦测¶
-
button_action.is_pressed():
选择机器人按键触发事件的回调函数。
- 参数
action (int) – 设置对应按钮,a代表A键,b代表B键。
-
irkeyIsPressed(button):
如果M按键按下的话,返回值就是True, 否则返回值是false。
- 参数
button (int) – 设置对应按钮,1-21代表不同的按钮。
-
accelerometer.is_gesture(name):
判断机器人的姿态,执行程序块下方的程序。
- 参数
action (int) – 设置机器人姿态的对应按钮,包括被摇晃、向上倾斜、正面朝上、自由下落等。
-
accelerometer.
get_values
()¶ 根据x、y、z方向,以正整数或负整数获取轴上的加速度测量值,测量单位为毫克。 默认情况下,加速度计的配置范围为+/- 2g,因此此方法将在+/- 2000mg范围内返回。
- 参数
axis (int) – 可选择返回x轴、y轴或z轴的加速度值。
-
loudness
()¶ 我们用响度来表示声音传感器的反馈值,响度的范围大小是0-255。
-
readBatteryLevel
()¶ 电池电量模块可以实时显示Bit的百分比电量。
-
caliGyro
()¶ 校正Bit的俯仰、横滚和侧偏的角速度。
-
(getGyrox()
反馈Bit的俯仰、横滚和侧偏的角速度。
-
getYaw
()¶ 反馈Bit侧偏的角度。
-
compass.
heading
()¶ 根据上述读数计算得出的罗盘方向为从0到360范围内的整数,代表以度为单位的角度,顺时针方向,北为0。
-
compass.
get_field_strength
()¶ 反馈当前环境中总磁场强度,单位是纳特斯拉。用磁铁靠近电子罗盘,看看磁场强度有什么变化。
-
compass.
calibrate
()¶ 开始校准过程:一条指示性消息将滚动给用户,此后他们将需要旋转设备以便在LED显示屏上画一个圆圈。
-
temperature
()¶ 反馈温度传感器检测到的温度值。
-
display.
read_light_level
()¶ 反馈光敏传感器感应环境光线的强度。可以尝试修改亮度级别,看看不同级别对应什么样的亮度。
-
running_time
()¶ 反馈Bit机器人的运行时间。
-
readDistance
(No)¶ 反馈Bit机器人超声波传感器检测到的距离。
- 参数
No (int) – 可选择超声波传感器模块,0代表模块1、1代表模块2、2代表模块3、3代表模块4。
-
anyWasNearBySonic(No):
反馈Bit机器人超声波传感器有没有检测到障碍物。
- 参数
No (int) – 可选择超声波传感器模块,0代表模块1、1代表模块2、2代表模块3、3代表模块4。
-
readLineSensorData
(No, dir)¶ 可以分别反馈巡线传感器左右两个光电对管检测的灰度值,黑色物体的返回值接近0,白色物体返回值接近255。
- 参数
No (int) – 可选择巡线传感器模块,0代表模块1、1代表模块2、2代表模块3、3代表模块4。
dir (int) – 0代表左侧,1代表右侧。
-
readLineState(No,dir,color):
分别用于判断巡线传感器左侧或者右侧是否检测到黑色或白色,条件成立时返回为真。
- 参数
No (int) – 可选择巡线传感器模块,0代表模块1、1代表模块2、2代表模块3、3代表模块4。
dir (int) – 0代表左侧,1代表右侧,2代表全部。
color (int) – 0代表黑色,1代表白色。
运算¶
变量¶
Ovobot Bit MakeCode指南¶
Ovobot Bit机器人基于micro:bit,所以你也可以选择MakeCode micro:bit来给Bit机器人编程。
首先打开 MakeCode编辑器,然后点击高级中的扩展按键。

在弹出的扩展界面的搜索框中输入https://github.com/Ovobot/pxt-ovobot,并点击搜索。

选择搜索到的ovobot扩展包添加的编辑器中。

Xtron简介¶
硬件介绍¶
硬件参数:
![]()
硬件模块接口:
![]()
编程平台¶
makecode图形化编程模式: Makecode平台
Makecode是由微软推出的一款支持图形化编程平台以及JS编程的平台(包括Microbit、Adafruit、Arcade等等),Xtron支持Arcade系列
微软官方arcade编程平台:https://arcade.makecode.com
Scratch & Python编程模式: Ovoblock软件
Ovoblock是一款基于Scratch 3.0开发的电脑端编程软件,支持Mac、PC和浏览器平台,兼容Scratch 3.0的所有功能,同时也支持python语言开发。
Ovoblock下载链接:https://www.ovobot.cn/zh-hans/app/#Ovoblock
相关课程
首先,你可以尝试组装你的Xtron, 点击 组装参考步骤 .
我们为你准备了Xtron对应的Acade, Scratch, Python相关课程指南,接下来,你可以根据自己的需求来学习:
Xtron Arcade 指南¶
入门Arcade¶
Arcade介绍¶
Makecode Arcade平台主打游戏编程,你可以用简单的积木块来搭建自己的游戏,积木块的功能可以参考 Arcade积木栏详解.
平台左侧是一个模拟器,你编写的游戏实时效果会在模拟器上展示,你可以实时的调试和优化自己的游戏。
![]()
平台支持积木块转JS代码,在Arcade平台上,你可以通过积木块编程入门,再进阶到JS编程,逐渐锻炼你的逻辑思维以及增进你的编程技巧。
Makecode平台编程地址: https://arcade.makecode.com
快速入门¶
在开始编程之前,我们先了解一下Xtron的使用方法。
我们首先体验一个经典游戏Falling Duck。
打开编程网址首页,如果你是第一次使用Arcade,显示的是默认的英文,你可以点击右上角的设置,选择语言,切换成你想要的语言。
![]()
![]()
滚动鼠标,找到【积木块类游戏】, 点击【Falling Duck】打开示例。
![]()
![]()
平台中间的代码区,你可以看到这个游戏对应的积木块的代码,点击切换成【{}JavaScript】,你可以看到对应的JS代码。
![]()
![]()
在左边的模拟器上,你可以体验一下游戏的效果。点击任意按键开始游戏,每次按键按下之后,duck会往上跳动一次,顺利穿过一个树桩得分+1。
![]()
接下来我们把项目下载到Xtron来体验一下。
Xtron处于关机状态,把Xtron用USB连接到电脑上,屏幕显示如下的F4图案,如果屏幕显示的不是这个图案,那么按下Xtron的【RST】按键。
![]()
![]()
点击左下角的【下载】按键,选择【F4】。
![]()
![]()
找到刚才下载的.uf2 文件,右击鼠标,选择发送到Xtron.
![]()
![]()
现在我们可以在Xtron上体验这个游戏了。
现在我们尝试新建一个项目。
回到主页,点击【新建项目】,为项目起一个名字。
![]()
![]()
创建一个精灵后,模拟器的界面上也会出现一个精灵。再创建第二个精灵,精灵的形象可以选择资料库中的形象,也可以自己绘制。
创建两个精灵之后,他们默认是出现在屏幕中央,你可以改变一下第一个精灵的位置。我们屏幕的大小是120*160.
![]()
![]()
用同样的方法,我们可以把自己的项目下载到Xtron中。
除了下载,你还可以用分享的方式向朋友展示你的作品。点击【发布项目】,会生成一个项目链接,通过这个链接,你的朋友可以访问到你的作品,并且可以在他的电脑上编辑你的程序。
![]()
Arcade提供了丰富的积木块,如果你想要了解每一个积木块的功能,可以参考后面的 Arcade积木栏详解.
Arcade 积木栏详解¶
精灵¶
创建精灵¶ 物理¶
设置精灵的基本物理属性:位置,速度
例子:
创建一个角色,让它初始坐标是(30,10),并且按照X轴速度50,Y轴速度50运动。
![]()
精灵属性的取值,改变精灵属性的值,设置精灵属性的值。
属性值选择框下拉,除了基本的x,y坐标,有下面这些可选属性:
![]()
vx、vy:表示x轴,y轴的速度
ax、ay:表示x轴,y轴的加速度
生命值:表示精灵存在的时间,生命值的单位是s
z(深度):表示精灵的前后位置关系,数值越大表示精灵越靠前
宽度高度:表示精灵像素的大小
左、右、top、底部:分别表示精灵距离这四个方向的像素值(其中左上角的像素值是(0,0))
例子:
创建一个角色,让它以速度15往下运动, 当按下按键A后,把加速度改变成向上的10,角色开始向上运动。
![]()
让一个角色跟随另一个角色变化位置
例子:
创建一个柠檬角色,一个草莓角色,让草莓跟随柠檬移动。我们给柠檬设置一个移动速度,虽然我们没有给草莓设置速度,但是它会跟着柠檬一起运动。
![]()
特效¶
给精灵开启特效和消除特效
例子:
创建一个精灵,开启喷涂特效,按下按键A之后,消除特效。
![]()
把创建的精灵从游戏中销毁
例子:
创建一个精灵,开启喷涂特效,按下按键A之后,销毁精灵。
![]()
让精灵说话,在精灵上方会出现一个对话框,精灵想说的话会显示出来。
例子:
创建一个精灵,按下按键A之后,精灵说”hello”并且延时1S,1S之后对话框消失。
![]()
4.设置精灵的一些功能,下拉框是可选的参数。
![]()
可选的参数分别表示:
停留于屏幕:让精灵只能处于160*128的屏幕内(可以配合跟随积木块一起使用)
幽灵:幽灵模式的精灵无法接触到游戏中的其他场景和角色
自动销毁:变成幽灵的精灵走出屏幕范围后自动销毁
碰到屏幕边缘销毁:精灵碰到屏幕边缘会销毁
碰到屏幕边缘反弹:精灵碰到屏幕边缘反弹
显示坐标与速度:在精灵底部显示他的坐标和速度
例子:
创建一个精灵,给它一个速度移动,碰到屏幕边缘后精灵反弹。
![]()
弹射物¶ 重叠¶
当两个精灵相互重叠时,执行内部的程序。注意这里的精灵类型也是判断条件之一。
例子:
当两个精灵重叠的时候,得分增加1.
![]()
当两个精灵重叠时,返回值是True。作为一个判断条件,常常跟逻辑语句结合使用。
例子:
同上,当两个精灵重叠的时候,得分增加1. 只是用了两种不同的判断方式。
![]()
设置精灵的类型, 返回精灵的类型
例子:
游戏开始时,当两个精灵重叠的时候,得分不变,但是按下按键A后,两个精灵重叠的时候,得分增加1.
因为在按键A按下的时候,我们把mysprite2的类型改成了Food, 我们的判断条件里,要求Player类型和Food类型精灵重叠时,得分才增加1.
![]()
生命周期¶ 图像¶ 控制器¶
单人模式¶
使用键盘方向键来控制精灵的移动。后面的加号点开可以设置精灵x,y轴的移动速度(默认为100)
例子:
创建一个玩家精灵,并且用键盘方向键控制精灵向不同方向移动。
![]()
当按键按下,松开或者重复时,执行内部的程序。其中按钮框可以下拉选择。
例子:
创建一个玩家精灵,按键A按下时,玩家精灵按照设置的速度移动。
![]()
当按键按下时,返回True. 作为一个判断条件,常常跟逻辑语句结合使用。
例子:
同上,创建一个玩家精灵,按键A按下时,玩家精灵按照设置的速度移动。只是用了两种不同的判断方式。
![]()
用于单独控制精灵x和y轴的移动,点击加号可以设置x,y轴速度(默认为100)。这个可控制器的第一个积木块的区别是X Y可以分开设置,更加灵活。
例子:
创建一个玩家精灵,并且用键盘左右方向键控制精灵X轴移动,用上下方向键控制精灵Y轴移动。(案例重写)
![]()
多人模式¶ 游戏¶
游戏内容¶
游戏更新积木块,这两个积木块的区别是一个几乎是一直在更新,更新频率由游戏引擎决定。 * 第二个的更新频率取决于后面设置的时间,可以当一个定时器来使用。 * 在Arcade游戏编程中,我们用这两个积木块来代替Makecode的【无限循环】。
游戏结束,点击后面的加号可以选择是Win还是Lose.
从游戏开始的时候计时,返回一个游戏运行的时间值,单位是ms.
游戏复位积木块, 让游戏重新开始。
例子:
创建一个玩家,一个食物,使用按键移动玩家。
游戏规则:
游戏开始后,玩家实时播报游戏开始时间
玩家吃到食物后,生命值+1
时间每过2s, 玩家生命值-1
玩家生命值为0,游戏结束
按下按键A后, 游戏复位
![]()
提示(询问)¶
显示积木块:内容显示在屏幕中间。点击” + “号,可以扩展一个文本框,第一个显示在第一行,第二个显示在第二行。
判断提问积木块:文本框中是提问的内容,显示在屏幕中间。点击A是ok, 返回True,点击B是cancel,返回false.
提问字符:返回回答的字符串,用来回来一些文本问题。文本框内是提问的内容,显示在屏幕的上方,问题下方是26个字母以及数字0-9。方向键可以移动选择,A键确定,B键删除,屏幕左下角可以切换大小写。回答完毕之后,用方向键把光标移动到”OK”按钮,点击A键之后,会返回你所回答的字符串。
提问数字:返回回答的数字值,这个用来回答一些数字。文本框内是提问的内容,显示在屏幕的上方,问题下方是0-9的数字以及”-“和”.”两个符号。方向键可以选择数字,A键确定,B键删除。回答完毕之后,用方向键把光标移动到”OK”按钮,点击A键之后,会返回你所回答的数字值。
例子1:
这是Mike的Xtron, 现在要求玩家输入姓名,如果姓名是Mike, 显示welcome;如果不是mike,显示Input wrong.
![]()
例子2:
提问是100以内的随机整数加法,要求玩家回答。把玩家的回答和正确答案相比较,相同显示回答正确,否则显示回答错误,并且下面一行显示正确答案。
![]()
对话框¶ 场景¶
屏幕¶
返回屏幕的宽度和高度值。
例子:
在屏幕中间显示出“宽度 X 高度”的的字符串。
![]()
设置背景的颜色和图片。
设置背景颜色:下拉框有16种颜色可供选择。
设置背景图片:背景图片可以手绘,也可以用资料库中的图片。
背景颜色:获取当前的背景颜色信息。
背景图片:获取当前的背景图片信息
例子:
可以绘制一个自己的姓名牌。(待补图片)
![]()
特效¶ 砖块¶
设置砖块地图,可以自己绘制,也可以用资料库中的图案。
对于现有的砖块,可以根据颜色来替换成别的图案。替换的图案可以自己绘制,也可以用资料库中的图案。
例子:
绘制台阶砖块,然后把其中粉色的砖块图案替换成橙色的方框图案。
![]()
定位一个砖块的位置,左上角的坐标是(0.0)。通常和下面的积木块一起使用。
设置一个已知位置的砖块颜色,可以直接根据坐标定位来设置颜色。也可以和上面的定位砖块积木块一起使用,先定位一个砖块,再设置或者改变砖块颜色。
例子:
绘制台阶砖块,找到坐标(5,6)的台阶,把颜色替换成紫色。
![]()
定位相同颜色的砖块,放到一个数组里。通常和替换积木块一起使用,用于批量替换一些砖块。
例子:
绘制台阶砖块,找到所有粉色的台阶,依次替换成紫色。
![]()
可以将精灵准确的放置在砖块地图上的随机一个砖块位置上,通过颜色索引值去限制精灵所能匹配的砖块颜色类型。
例子:
绘制砖块地图,把精灵随机放在红色砖块上面。
![]()
把精灵放在指定的一个砖块上。比如精灵的运动,可以用这个来实现。
例子:
绘制砖块地图,让精灵从左边的砖块依次往右边移动。
![]()
碰撞¶
当精灵撞到砖块的之后,执行内部程序。
例子:
游戏开始,精灵有10点生命值。用按键开移动精灵,每次撞到墙精灵生命值都回-1,直到生命值为0,游戏结束。
![]()
碰到砖块指定方位的时候,返回值是True, 通常和判断条件一起使用,满足条件,执行内部程序。
例子:
绘制砖块地图,用按键移动精灵,撞到墙之后,说出撞的方向。
![]()
碰到砖块指定方位的时候,返回该砖块的索引值。不同的砖块的索引值是不同的。
例子:
修改一下上面的程序,在精灵碰到砖块后,说出返回的索引值。
![]()
相机¶
镜头抖动积木块,该积木块属于特效积木块,在遇到危险或发生碰撞事件时以震动来增强游戏效果。
例子:
创建精灵和砖块地图,使用按键来移动精灵,如果精灵撞到砖块顶部,镜头抖动。
![]()
镜头跟随精灵移动。我们的游戏场景通常是比较大的,在精灵移动的过程中,我们希望镜头是跟着精灵走的,这个积木块就能实现这样的效果。
例子:
创建精灵和砖块地图,这里我们使用16*16或者更大的画布,这样我们对应的场景大小就是256*256了,我们的屏幕显示的是场景的1/4, 如果想看到其余的场景,我们可以使用按键来移动精灵,这样镜头就跟着精灵移动,其余的场景在移动的过程中就能展现出来了。
![]()
设置镜头的位置, 可以给定一个坐标,然后把镜头转向那个位置。
例子:
在上一个例子的基础上,我们把镜头跟随精灵移动变成镜头转向一个随机的坐标。这里,每隔500ms,镜头会转向一同的坐标位置。
![]()
循环¶
无限执行,不断的重复执行内部程序。
暂停ms为单位的指定时间.
重复执行N次,N是>0的整数
如果判断条件成立,执行内部程序。判断条件可以自己设定。
让变量“索引”采用0到结束数字范围内的值,以1为增量,并执行内部程序。
让变量“值”依次取数组List中的每一项值,并执行内部程序。
当开机时执行内部程序。
变量¶
数学¶
加 减 乘 除,返回两个数加减乘除之后的结果
取余,返回两个数相除的余数
比较两个值的大小,返回两个值中的较大值或者较小值
取绝对值,返回数字的绝对值
平方根,三角函数
![]()
数值修约
![]()
选取随机数,返回一个介于最小值(包含最小值)和最大值(包含最大值)之间的伪随机数。如果两个数字都是整型,则结果也是整型。
约束一个数字在一个范围内。
将数字从一个范围映射到另一个范围,即“自低”值会映射到“至低”值,“自高”值会映射到“至高”值,以前范围内的值会映射到新的范围。
Arcade 游戏课程¶
零基础入门¶
教程介绍¶ 这是我们新的教程专题栏目——Makecode Arcade初级编程教程,旨在由浅入深深度讲解图形化积木块的含义,类型, 以及积木块在游戏中的使用方法,来理解图块化积木块的运用,尝试独立制作游戏,培养同学们的编程思维能力。
适合年纪:8岁+
课前准备¶
上网电脑
Xtron掌机
课程目标¶
了解Makecode Arcade
在模拟器以及Xtron中体验社区游戏
创建游戏项目,了解项目结构
分享游戏
什么是Makecode Arcade ?¶ MakeCode Arcade,是微软发布的一个基于网页且对初学者友好的程序代码编辑器,开发者可以使用图形化模块或 JavaScript编程游戏,在玩游戏中学会编程。
网址: https://arcade.makecode.com
TIPS:无需安装软件,无需注册,只需要一台电脑登录MakeCode arcade编程网页即可编程。
进入编程环境,体验游戏¶ 我们通过Arcade网站首页的积木块游戏来了解一下编程环境的各个部分。
1.打开编程网址首页,如果你是第一次使用Arcade,显示的是默认的英文, 你可以点击右上角的设置,选择语言,切换成你想要的语言。
2.滚动鼠标,找到【积木块类游戏】, 点击【Falling Duck】打开示例。
编程环境
3.在左边的模拟器上,你可以体验一下游戏的效果。点击任意按键开始游戏,每次按键按下之后,duck会往上跳动一次, 顺利穿过一个树桩得分+1。
TIPS:你编写的游戏实时效果会在模拟器上展示,你可以实时的调试和优化自己的游戏。
4.平台中间的工具箱中,有编程所需要的积木块,拖动积木块到代码区来实现游戏中的功能,工具栏中包含精灵,控制器, 游戏,音乐,场景,游戏信息,循环,逻辑,变量,数学等等类别的积木块,在后期的教程中,会通过游戏带同学们熟悉各个 积木块的使用方法。
5.平台右边的代码区,你可以看到方块中对应的积木块的图形化代码,点击切换成【{}JavaScript】,你可以看到对应的JS 代码。
TIPS:在Arcade平台上,你可以通过积木块编程入门,将积木块放到工作区来构建程序,当学生具备一定基础时,再进阶到JS 编程,逐渐锻炼你的逻辑思维以及增进你的编程技巧。
项目下载到Xtron¶ 新建项目,制作游戏¶ 体验完社区游戏之后,我们要开始自己的游戏编程。首先,我们需要新建一个项目。
- 1.回到主页,点击【新建项目】,为项目起一个名字。
点击创建进入编程环境,代码区默认有一个当开机时积木块。
- 2.现在,我们来创建一个游戏角色,这里我们称为精灵。
精灵工具箱中选择将mySprite设为精灵类型Player积木块放到当开机时内部。
- 3.给精灵设置精灵名字,形象和类型。
▲ mySprite为精灵的名字,你可以为精灵自定义一个想要的名字。下拉mySprite选择重命名变量设置一个精灵名字,比如“玩家”,“炸弹”,“敌人”,“披萨”等等。
▲ 精灵后面灰色框点击进入绘制精灵页面,精灵的形象可以点击最上方的编辑器自己绘制精灵形象,也可以点击图库选择资料库中的精灵形象。
编辑器自己绘制精灵形象:
图库中选择资料库中的精灵形象:
- 4.添加使用按键控制精灵移动
▲ 控制器工具箱中选择使用按键移动mySprite积木块到创建精灵积木块下方。
▲ mySprite下拉选择玩家。
- 5.现在在模拟器上的精灵可以通过键盘或鼠标来控制其移动。
同样,我们也可以把自己的项目下载到Xtron中。
保存项目¶
- 1.下载项目文件
点击编程网页中的下载,弹出硬件选择窗口,我们选择Ovobot Xtron,下载的游戏文件保存到下载文件夹中。
如果想继续编程该游戏,打开makecode Arcade网站,首页选择导入-导入已下载的游戏文件继续编程。
TIPS:这种保存文件方式即可以用于导入到硬件体验游戏又可以保存到电脑中以便下次继续编程。
- 2.发布游戏链接
除了下载,你还可以用分享的方式向朋友展示你的作品。点击【发布项目】,会生成一个项目链接,通过这个链接, 你的朋友可以访问到你的作品,并且可以在他的电脑上编辑你的程序。
TIPS:这种保存文件方式可以通过分享链接的形式分享给你的朋友或者发布在社交平台让他人可以访问到你的游戏作品, 但不能用于硬件。
- 3.保存项目文件png格式
编程区选择最下方保存按钮,保存PNG格式,下次继续编程时将其导入或拖动到编辑器中以重新加载游戏。
TIPS:这种保存文件方式适合保存游戏在电脑中以方便继续编程。
制作姓名牌¶
教程介绍¶ 上节课我们用素材库的形象创建了精灵,同时也讲解了编辑器可以绘制想要的精灵形象。在这一节课,让我们化身为小小 设计师,利用图形编辑器来绘制图形,制作自己的姓名牌。这是我们新的教程专题栏目——Makecode Arcade初级编程教 程,旨在由浅入深深度讲解图形化积木块的含义,类型,以及积木块在游戏中的使用方法,来理解图块化积木块的运用, 尝试独立制作游戏,培养同学们的编程思维能力。
游戏名称:小小设计师
目标:绘制自己的姓名牌
重点知识:图像编辑器的使用
课前准备¶ 步骤分解¶
加载背景颜色到场景并设置一个基础背景色。
加载游戏背景图片到场景,编辑器工具介绍。
绘制游戏背景图片,在背景中添加姓名,卡通元素。
动手实践¶ 1.加载背景颜色到场景并设置一个基础背景色
👉浏览器输入网址:
新建项目取名“小小设计师”。
👉场景工具箱中托取设置背景颜色为积木块到当开机时内部。
👉点击灰色框选择一个喜欢的背景颜色。
2.加载游戏背景图片到场景,编辑器工具介绍
👉场景工具箱中选择设置背景图片为积木块到当开机时内部,设置背景颜色积木块下方。
👉点击灰色框进入图形编辑器界面,绘制像素化图形。
像素画是一种以像素为基本单位来制作的电脑绘图表现形式,是在视觉上由很明显的一格格的像素拼凑而成的栅格化艺术形式,和马赛克以及十字绣有相似之处。
Arcade中图形编辑器采用的是16色的像素图块来绘制图形,像素化图形操作简单,不需要太多的美术基础也可上手绘制。
背景图形编辑器使用介绍
TIPS:按住Alt键调用吸取颜色工具,可吸取画布中的颜色。点击完成保存图形,不想保存点击图形编辑器外任意位置即可返回。
👉绘制姓名牌
编辑器的各个工具介绍好了,下面就是同学们动手实践操作的环节了,同学们可以先在本子上手绘一个姓名牌草稿。
以老师制作一个姓名牌为例
构思姓名牌的构成:
边框,姓名,卡通形象
实施步骤:
1.设置背景颜色
2.设置背景图形(边框+姓名)
3.创建精灵
4.设置精灵位置
老师在背景图形编辑器中制作的姓名牌:
创建精灵积木块中的图库中选择一个精灵形象:
设置精灵位置:
屏幕显示效果:
TIPS:创建精灵的图形编辑器和创建背景图形编辑器一样,同学们可以自己绘制,也可以在图库中选择,当然你还可以先选择图库中的精灵形象,在此基础上修改精灵形象变成自己喜欢的精灵。
下面就请同学们动手尝试制作一个自己的姓名牌吧!绘制好满意的姓名牌后,将程序下载到Xtron体验。
猫吃鱼¶
教程介绍¶ 上节课我们设计了姓名牌,知道怎么使用图片编辑器,可以自己设计精灵和背景。这节课我们要学习的是设置精灵的位置 和速度,以及逻辑条件语句在图形化编程中的使用方法。通过制作猫吃鱼的游戏来介绍新积木块的含义,在游戏编程场景 中的运用。
课程目标¶ ▪设置精灵的位置
▪设置使用按键控制精灵的速度
▪使用逻辑判断条件
游戏步骤¶ ▪创建精灵
▪设置精灵位置
▪显示精灵位置和速度
▪控制猫咪移动,设置移动速度
▪猫咪显示在屏幕中
▪设置猫吃到鱼的判断条件
▪添加“游戏胜利”积木块
▪添加当游戏更新事件
STEP 1 创建精灵
STEP 2 设置精灵位置
📌积木块位置:精灵-物理-设置mySprite的位置为xy
💡积木块含义:
“设置mySprite位置为xy”积木块中的X就是我们的屏幕宽度,Y就是我们的屏幕高度,我们点击“设置精灵位置”积木块后面的参数,下方会出现一个滑杆。拖动滑杆,X(宽度)的范围是0-160。Y(高度)的范围是0-120。在拖动滑杆的过程中,下面对应的高度和宽度的直线也在变化,两条直线的交点位置就是精灵在屏幕中的位置。
通过拖动滑杆,我们知道了屏幕的坐标是什么范围以及对应的位置在哪里。
知道了屏幕的坐标值,我们给鱼设置一个位置值。
【编程操作③】:拖动“设置mySprite的位置为XY”积木块到当开机时内部,设置精灵积木块下方。mySprite下拉选择鱼,位置值X=20 Y=30。
STEP 3 显示精灵位置和速度
我们有一个积木块可以显示精灵位置坐标和速度。
📌积木块位置:精灵-特效-设置mySprite保持在屏幕中标志为关
💡积木块含义:
【编程操作④】:精灵工具箱中选择“设置mySprite保持在屏幕中标志为关”积木块到当开机时内部。
【编程操作⑤】:我们分别为猫咪和鱼设置一下显示坐标与速度,标志为开,看看屏幕上的显示坐标和我们设置的是不是一样。
STEP 4 控制猫咪移动,设置移动速度
我们需要让小猫移动,这样才能吃到鱼。移动精灵我们使用“用按键移动精灵”积木块。
【编程操作⑥】: 拖取“使用按键移动mySprite积木块”到当开机时内部,“显示坐标和速度”积木块下方。
![]()
移动猫咪的过程中,我们发现:
向上移动的时候,速度显示的是V 0,-100
向下移动的时候,速度显示的是V 0, 100
向左移动的时候,速度显示的是V -100,0
向右移动的时候,速度显示的是V 100,0
V(速度)后面第一个值是X轴的速度值,大于0是X轴正方向的速度,也就是向右移动的速度,小于0是X轴反方向的速度,也就是向左移动的速度。
同样的,V(速度)后面第二个值是Y轴的速度值,大于0是Y轴正方向的速度,也就是向下移动的速度,小于0是Y轴反方向的速度,也就是向上移动的速度。
![]()
为什么这个值是100呢,积木块后面加号可以设置移动的速度,我们点击“使用按键移动”积木块后面的+号,可以看到vx vy默认是100。
【编程操作⑦】:点击加号,修改速度数值,我们修改vx和vy为150。
STEP 5 设置猫咪显示在屏幕中
STEP 6 设置猫吃到鱼的判断条件
接下来我们就要让小猫咪去抓鱼啦!
怎么确定猫咪抓到鱼了呢?
我们可以在屏幕上看到猫咪和鱼的坐标,当猫咪和鱼的坐标一样的话,我们就认为猫咪抓到鱼了,游戏胜利。
解读一下这个规则,我们需要判断喵咪的X坐标=鱼的X坐标,并且猫咪的Y坐标=鱼的Y坐标。当满足这个条件时,游戏胜利。
这里就涉及到了逻辑工具箱中的“判断条件”积木块,“比较”积木块,“布尔值”积木块以及积木块的叠加。
逻辑工具箱中的积木块是我们在编程游戏时经常会遇到的,我们通过猫吃鱼的游戏来讲解其中的积木块的使用方法。
带有卡槽的积木块可以与带有卡槽的积木块上下搭建。
但是必须要在嵌入到开口类型的积木块内部才能够运行。
不带卡槽的菱形/圆形的积木块可以替换其他积木块中的一些特定的菱形框/圆形框。
Tips:有些积木块虽然可以替换但是不能运行,当程序提示错误时,就需要检查积木块的叠加是否正确。
拆解好规则,我们从外往里搭建积木块。
判断条件:
在游戏中,经常需要使用到“判断条件”积木块,比如玩家到达某一处,就能开启一项技能,满足什么条件,就可以获得一个装备等等。在猫吃鱼的游戏中,需要判断当猫的坐标和鱼的坐标一样,就代表猫吃到了鱼。
使用判断条件,判断为true(真),运行内部程序,在游戏中需要判断猫咪和鱼的坐标位置一致。
📌积木块位置:逻辑-条件-如果为true则
💡积木块含义:
“如果为true则”积木块作为“判断条件”积木块,程序会做一个判断,只有当判断为true时,才运行积木块内部的程序。这里的true可以替换为其他条件,如变量与变量之间的比较,以及变量与值之前的比较等等。
打开逻辑工具箱中的“如果为true则”积木块到代码区任意位置,我们来看看这个积木块的使用方式。
点击加号出现否则,否则内部可以嵌入积木块。
这样就出现了两个判断条件,一个是true(真),一个是否则,即是false(假)。当判断到true,运行true内部程序,判断不是true,则运行否则内部的程序。
继续添加加号,可以不断为程序增加判断条件。
true作为条件可以替换成工具箱中的其他条件。
比如控制器中的“当按键被按下”积木块。
游戏中的“询问”积木块。
逻辑中的“比较”和“布尔值”积木块(最常见)。
【编程操作⑨】:拖取“如果true则”积木块到代码区任意位置。
判断条件积木块设置好了,游戏中两个条件为并列关系,猫咪的X轴=鱼的X轴和猫咪的Y轴=鱼的Y轴,将并列关系积木块替换判断条件中的true。
“与”积木块
这时候需要使用到逻辑工具箱中的布尔值“与”积木块。
📌积木块位置:逻辑-布尔值-与
💡积木块含义:
【编程操作⑩】:逻辑工具箱中选择“与”积木块替换条件工具箱中的“true”。
“比较”积木块
猫咪的X轴=鱼的X轴,猫咪的Y轴=鱼的Y轴,需要用到“比较”积木块。
📌积木块位置:逻辑-比较-“=”
💡“比较”积木块含义:
【编程操作⑪】:拖取“=”积木块到“与”积木块的两个菱形框中。
精灵坐标
📌积木块位置:精灵-物理-mySprite X
💡积木块含义:
【编程操作⑫】:拖取“mySprite X”积木块到“等于”积木块的两个圆形框中,第一个精灵选择“猫咪”,第二个精灵选择“鱼”。
【编程操作⑬】:同样的,判断Y坐标也是一样,点击右键选择重复复制此积木块,修改猫咪和鱼后面的选项为“Y”(Y轴坐标)。
STEP 7 游戏胜利
STEP 8 添加当游戏更新事件
把“如果true则”积木块拖到当开机时内部,会发现,当猫咪吃到鱼时,游戏并没有提示胜利,这是为什么呢?
因为我们把判断条件放在开机时内部,这样的话只会判断一次。
我们一开始的时候没有达到这个条件。
怎么才能不停的判断呢?
这里需要将“如果true则”积木块放置到“当游戏更新时”积木块的事件当中运行
当游戏更新时
📌积木块位置:游戏-游戏内容-当游戏更新时
💡积木块含义:
每次游戏更新,都会去执行里面的程序,我们游戏是不断更新的,中间的间隔时间非常短可以忽略不计,所以你可以理解为这个积木块是无限循环积木块。内部的积木块是伴随着整个游戏运行的。
【编程操作⑮】:拖取“当游戏更新时”积木块到代码区任意位置,将”如果则”积木块拖取到”当游戏更新时”积木块内部。
现在来试一下吧!
扩展游戏¶ 加上倒计时
猫吃到鱼并不难,但是如何让猫在规定的时间内吃到鱼呢?找一找工具栏中什么积木块是可以运行倒计时的?
优化猫吃鱼
在移动猫咪时,要让猫咪和鱼坐标完全相同有点困难,有时候喵咪已经碰到鱼了,但是坐标不同所以游戏没有胜利,怎么改进?
优化游戏¶
教程介绍¶ 上节课我们制作了小猫抓鱼的游戏,在玩游戏中,可以发现游戏中有很多可以优化的地方。在这节教程中,让我们带着问 题,从提高游戏有趣性出发,去体验游戏,发现问题,解决问题,通过不断的调试猫吃鱼游戏的代码,来制作一个高品质 的小游戏。在这个过程中,我们也会同时介绍新的积木块的使用方法。
当然,对游戏本身的追求没有终点,我们一直在路上。
发现问题¶ 在上一节的课程中,我们是通过小猫和鱼的坐标是否一样,来判断小猫有没有抓到鱼。但是在玩游戏的时候,我们会发 现,因为每次按键移动的坐标幅度不是1,所以想要坐标完全一样确实有点困难。有没有一个方法,可以让小猫碰到鱼就 算获胜呢?
解决问题¶ 这节课给大家介绍一个新的方法—精灵重叠事件。
📌积木块位置:精灵-重叠-当sprite类型与otherSprite类型Player重叠时
💡积木块含义:当一个精灵与另一个精灵重叠时,运行事件内部的积木块,只要两个不同类型的精灵有重叠的部分,那么就会 触发这个事件。
如何来确定想要的两个精灵重叠呢?
在上节教程《猫吃鱼》游戏中,创建了两个精灵,我们已经为猫选择Player(玩家)类型,为鱼选择Food(食物)类型。
在设置类型的时候同学们可能会有疑惑:
为什么要选择精灵类型?这是因为在一些事件中,是通过选择精灵的类型来指代精灵的。比如精灵重叠事件,通过选择精灵类 型来指代精灵。
TIPS:完整的游戏经常会有不同类型的精灵重叠事件,因此在创建精灵的时候,就应该将精灵类型设置好以防止后期精灵太多 造成程序混乱。
在《猫吃鱼》游戏中,猫类型选择为Player(玩家),鱼类型为Food(食物),那么在重叠事件中的类型,猫吃到鱼重叠事 件,应该是Player(玩家)与Food(食物)重叠。
🎮编程操作①:将“当sprite类型Player与otherSprite类型Player重叠时”积木块拖取到代码区任意位置。修改默认的精灵 类型,将otherSprite类型的“Player”下拉选择“Food”。
🎮编程操作②:我们把“游戏获胜”积木块放在重叠事件内部。
来试一下我们改进之后的游戏吧。
这个游戏虽然简单,但是它已经是一个完整的游戏了。有角色,有游戏规则。
发现问题¶ 当然一个游戏的趣味性以及挑战性也很重要,这个小猫抓鱼的游戏,我们很容易就可以获得胜利,玩几次可能就没有兴趣 了,怎么来增加游戏的挑战性呢?
解决问题¶ 创建敌人精灵-幽灵
作为刚接触游戏编程的同学们,在设计游戏的时候,可以从玩过的游戏中寻找灵感。
游戏产业初创时期的街机游戏往往蕴含着游戏规则的经典模式,说到对街机游戏的初印象,那“吃豆人”游戏一定占有举足轻重的位置,我们可以从吃豆人游戏中寻找灵感。
吃豆人游戏
日本时间1980年5月22日,游戏公司南梦宫(Namco)推出了一款有史以来最为成功的街机游戏——吃豆人。它在同年10月经由Midway 公司引入美国后,迅速成为一款能够被各种人群喜爱的全民游戏。
在今天看来,吃豆人除了吃,就是被追着满屏幕乱跑,似乎算不上什么魅力主角。但在上世纪八十年代,他绝对是个开创性的存在。
吃豆人游戏中,玩家每关都会被四个颜色不一的幽灵追赶,而这红粉青橘四种颜色的四个幽灵其实都有不同的“个性”。在游戏开发者岩谷徹的设计中,红色幽灵性格火爆,总是会紧紧栓着玩家跑;粉色幽灵老谋深算,会埋伏在玩家可能经过的路线上;青色幽灵自由散漫,时而追着玩家跑,时而视而不见;橘色幽灵傻乎乎,总是瞎晃荡。
拆解下吃豆人游戏模式:
吃豆人在吃豆子的时候,有一个幽灵会去追踪它,吃豆人要在吃豆子的同时躲避幽灵,如果被幽灵追上的话,游戏就失败了。
以吃豆人中的幽灵为灵感,这里我们也在游戏中增加一个幽灵的角色,并且这个幽灵会追踪小猫。
🎮编程操作①:将“创建精灵”积木块拖取到“当开机时”事件内部,为幽灵选择一个精灵形象,设置精灵类型为“Enemy”。
🎮编程操作②:设置精灵的初始位置X:141,Y:104 。
🎮编程操作③:拖取精灵工具箱中“设置myEnemy跟随mySprite”积木块到“创建幽灵”积木块下方。myEnemy下拉选择“幽灵”,mySprite下拉选择“猫咪”。
🎮编程操作④:点开后面的+号,默认的速度是100,我们可以修改这个速度值,一边修改一边在模拟器上看效果,直到达到你想要的跟随速度。速度越大,游戏获胜越难。
这种一边实践一边发现问题的过程,我们称为调试。每一个优秀的作品,都是经过了很多次的调试和完善的哦!
加上幽灵之后,我们来完善一下游戏规则:
当猫咪抓到鱼,游戏胜利;当幽灵追上猫咪,游戏失败。
🎮编程操作⑤:幽灵追上猫咪,同样的也是使用重叠事件,同学们可以自己编写一下这个程序。
发现问题¶ 到这里,我们为猫吃鱼游戏增加了一个敌人幽灵,使得游戏更加有挑战性,但是当猫吃到鱼或者幽灵追上猫,这个游戏就结束了,我们还可以继续增加游戏规则。
解决问题¶ 增加游戏规则
在吃豆人的游戏中,在吃到豆子的时候,游戏得分会+1;吃豆人被幽灵追上,生命值会-1,吃豆人回到初始位置;当生命值等于0,游戏结束。
参考这个规则,我们把猫吃鱼游戏进阶版的规则修改如下:
1) 游戏对象(三个类型精灵):小猫(玩家类型) 小鱼(食物类型) 幽灵(敌人类型);
2)初始生命值和分数:小猫初始生命值为3, 游戏初始得分为0;
3)游戏规则: 小猫吃到鱼,得分+1,小鱼从其他位置再次出现;幽灵追到猫,生命值-1,小猫回到初始位置,生命值为0,游戏结束;
4)游戏目标: 小猫需要在游戏结束前尽可能抓到更多的小鱼。
游戏的基本框架已经完成了,接下来我们根据增加的游戏规则来继续完善游戏。
为玩家设置生命值。
📌积木块位置:游戏信息-生命值-设置生命值为3
💡积木块含义:
为玩家设定一个初始的生命值,积木块默认生命值为3。
🎮编程操作①:将“设置生命值为3”积木块拖取到“当开机时”事件内部的最下方。
📌积木块位置:游戏信息-得分-设置得分为0
🎮编程操作②:拖取“设置得分为0”积木块到当开机时内部最下方。
🎮编程操作③:拖取“得分增加1”积木块到玩家和食物重叠事件中。
🎮编程操作④:拖取“生命值增加-1”积木块到幽灵和猫咪重叠事件内部。
在模拟器试玩一下:
🎮编程操作⑤:拖取“设置猫咪位置”积木块到猫和鱼重叠事件内部,为鱼重新设置一个位置:X:80,Y:80,这样在屏幕上的效果就是鱼被猫吃了,在屏幕上又出现了另外一条鱼。
我们在模拟器上试玩一下看看游戏效果怎么样:
游戏又出现了一些问题:小猫第一次吃到鱼的时候,鱼到了80,80的位置,第二次小猫吃到鱼的时候,鱼还是在80,80这个位置。这样在屏幕上的效果就是第二次吃到鱼之后,鱼并没有消失,分数还是在一直增加。
想要的游戏效果是猫咪每次吃到鱼之后,屏幕中随机位置再次出现鱼,那有没有积木块可以设置让鱼从屏幕中随机出现呢?
工具箱中有可以为鱼的位置设置一个随机数的积木块。
屏幕的范围是X:0-160, Y:0-120,我们在选取坐标的时候也发现了,我们的X Y的值都是整数,也就是说我们的范围是X为0-160里面的任意一个整数,Y是0-120里面的任意一个整数。
📌积木块位置:数学-选取随机数,范围0至10
🎮编程操作⑥:拖取“选取随机数,范围为0至10”积木块到XY数值框中,X轴范围选择0-160,Y轴范围选择0-120。
可以看到,每次猫咪吃到鱼,得分加1,鱼从屏幕随机出现。
同样的,我们来处理一下幽灵追上猫的重叠事件。
这里小猫被追上之后,位置变为初始值(80,60):
在我们的不断调试,以及修改之后,小猫吃鱼这个游戏和之前的比起来,内容更加的丰富了,游戏规则也更完善。
不过,在小猫吃到鱼之后,设置精灵位置积木块这里还有一个小小的bug。当然,这个bug并不影响我们目前的游戏,但是如果我们的游戏更加复杂,可能就会有所影响。这个bug你能找到吗?
下次讲到变量的时候,我们一起来找bug吧!
课后作业¶ 发挥想象力,改变里面的规则,做一个自己的小猫吃鱼,期待你们的表现!
“随机”应变¶
教程介绍¶ 项目一 验证随机数¶ 项目目标¶ 每次按下按键A,屏幕显示生成的随机数。多试几次,看看这个随机数是不是真的没有规律。
项目操作¶ 1.首先我们需要创建一个变量,变量就是一个变化的量,在这个项目中就是随机数。
我们需要在按键按下时,显示随机数。
为随机数这个变量设置数值。
4.把随机数在屏幕上显示出来。
5.将数字转化为文本。
📍点开工具箱中的高级,点击下方的文本工具箱,找到“将数字转为文字”积木块。这个积木块可以把数字转为文字,比如0->“0”, 1->“1”。
📍首先,我们在一开始的时候,提示一下玩法,告诉别人:按下按键A生成随机数。
📍然后,在显示随机数的时候,显示:随机数为:**(随机数值)。
📍这个时候,我们显示的内容有两个,一个是“随机数为:“, 另一个是随机数的值。我们可以用文本中的“组合字符串”积木块,把这两个文本结合起来一起显示。
📍在显示的时候,可以“将数字随机数转为文字”积木块拖取到第二个文本框,如下图显示。
📍你也可以直接用随机数的变量,如下图所示。
项目二 屏幕颜色变变变¶ 项目目标¶ 每次按下按键A,让我们的屏幕显示随机的颜色。
项目操作¶ 1.首先,按下按键A,我们用“设置屏幕颜色”积木块来给屏幕设置一个颜色,颜色可以自己选一个,我选择了粉色。
2.我们一直都用的图形化编程,今天我们一起来看一下这个图形化程序对应的JavaScript语言是什么样子的。我们点击方块后边的{ }JavaScript来切换到JS语言。
3.我们把范围为0-15的”随机数“积木块放到设置背景颜色积木块中:
4.当然,我们的程序要尽可能的做到完整,同样的,在一开始我们还是加上文字提示
下载到游戏掌机
总结¶ 今天我们通过随机数的两个项目:
1 验证了随机数是不是真的随机的;
2 学习了怎么在屏幕上显示字符;
3 学习了数字转化成文字,以及组合字符串的使用;
4 了解了颜色的秘密,知道图形化程序和JS代码的对应关系。
精灵爱运动¶
教程介绍¶ 之前的课程中,我们学会了创建精灵,用按键控制精灵移动,知道了判断,随机数这些概念,以及如何去设计完整的游戏规则。
在小猫抓鱼的游戏中,小猫是我们的玩家,是可以用按键来控制移动的。
而作为食物类型的小鱼精灵,在我们的游戏中没有自己做运动。但是在大多数的游戏中,除了玩家,别的角色也是有运动的。
怎么判断一个物体是在运动呢😕?
我们一般会用速度大小以及运动方向来描述一个物体的运动状态。
速度的大小也就是运动的快慢
如果速度V=0,那么我们认为这个物体是静止的。
同样的如果速度不等于0, 我们认为这个物体是运动的,并且速度值越大,运动越快。
我们会用前后左右或者别的表示方位的词来形容方向。
在Arcade中,我们的方向有上(VY)下(VY)左(VX)右(VX),其中上下是Y轴方向的速度, 左右是X轴方向的速度。👇
接下来我们通过几个小项目来感受一下精灵的运动感吧!
项目一:运动会¶ 2号运动员就位
运动员2号的特点呢,就是一开始速度比较慢,但是他加速特别快,就像一个小火箭一样,越跑越快。
这里呢,要给大家介绍一下加速度的概念,加速度描述的是速度改变的快慢。
生活中我们最常见的加速度就是重力加速度,我们知道在高处是不能往下扔东西的,因为一旦有东西从高处掉落,它的速度会越来越快,如果砸到人的话,后果非常严重。
这里呢,我们给运动员2号设置一个加速度。
我们用精灵工具箱-》物理模块-〉设置精灵的值(位置 速度 加速度)积木块。👇
同样的这个积木块还可以设置精灵的速度值。👇
之前我们用“设置精灵速度”积木块来设置速度,两者的区别就是“设置精灵值”积木块一次只能设置一个值,而“设置精灵速度”积木块可以同时设置X Y的速度。👇
现在我们看到1号运动员一开始速度快,2号相对落后,但是2号慢慢加速之后超过了1号,最终先到达终点。👇
但是如果修改1号速度值或者2号的加速度值,我们发现2号并不是一定就会胜利。
比赛路程,两个选手的速度,2号选手的加速度都会影响比赛的结果。
那加速度和速度的区别是什么呢?
1)加速度描述的是速度改变的快慢,速度描述的是位置改变的快慢。
2)加速度是速度对时间的变化率,速度是位置对时间的变化率。
也就是说,速度越快,一定时间内变化的位置更长;加速度越快,一定时间内速度变化的越快。
三号运动员就位 刚才我们的1号运动员和2号运动员的特点其实都是稳定,1号呢速度很稳定, 2号呢是加速度很稳定。但是我们的3号选手就有点特别了,他跑的时候会加速,但他的加速是一开始慢慢加,到了后面会冲刺,速度变化比之前更快。
怎么让速度变化更快呢?
我们可以改变加速度的大小,加速度越大,速度变化越快。
我们用精灵工具箱-》物理模块-〉改变精灵的值(位置 速度 加速度)积木块。👇
因为这个加速度的变化是不断增加的,所以我们可以加上一个循环,每隔1S的时间,加速度增加5。
使用游戏工具箱中的“当游戏每隔多长时间更新”积木块:👇
现在我们可以看一下3个运动员的比赛发挥:
1号一开始领先,2号随后,3号是最慢的,但是经过一段时间,2 3 号慢慢赶上并且超越了1号,最终是3号赢得了比赛。👇
这个游戏呢也告诉了我们一个道理,一开始的落后并不要紧,抓紧赶上,还是有机会胜利哦!
运动会结束了,不同运动类型的几个积木块我们也介绍了,运动中还有一个跟随的技能,这个我们在小猫捉鱼这节课里也介绍过了。
接下来我们要介绍一个新的技能,就是弹射物。
我们在游戏中经常会看到一些场景,比如发射子弹进行攻击,打怪时掉落一些技能或者装备,这些呢都可以用弹射物来实现。弹射物字面上的意思就是一样东西被弹射了出去。
下面我们通过下雨天这个项目来了解一下弹射物。
项目二:下雨天¶ 🚩模拟下雨天的场景,云朵从屏幕左边慢慢移动到屏幕右侧,移动过程中不停的有雨滴从云朵上滴落下来。
我们把项目分解成下面的一些步骤:
首先我们要创建一个云朵,并且放在屏幕的左侧。👇
让云朵从左往右慢慢移动。👇
先让一滴雨滴从云朵上滴落。
雨滴可以当作是从云朵上弹射出去的弹射物,我们的弹射物也是精灵,是弹射物类型的精灵。
选择 精灵工具箱-》弹射物模块-〉将精灵设为弹射物从另一个精灵上以一定速度弹射出去积木块。
1) 这里弹射物精灵我们重命名为雨滴,设置雨滴的形象。
2) 雨滴是从云朵上弹射出去的,所以另一个精灵选择云朵。
3) 雨滴是垂直向下滴落,vx=0, vy我们设为10。
完整设置如下。👇
现在我们可以看到雨滴从云朵上弹射出去了。👇
接下来让很多雨滴从云朵上滴落。
游戏每隔一段时间更新积木块,可以实现我们的想法,这样雨滴就是不断的从云朵上滴落了。👇
模拟器效果👇
但是现在的效果看起来并不逼真。有两个地方效果不好:
1) 雨滴一直都从云朵的一个位置滴落下来,云朵比较大,实际的雨滴应该是从云朵的任意一个位置滴落的。
2) 现在看到的雨滴是穿过了白云滴落下来,实际上我们看到的雨滴应该是从白云的最下方滴落的,白云内部我们看不到。
一起来完善一下吧。
首先是滴落的左右位置,默认是从云朵中间滴落的,我们想要的效果是从云朵内部随机位置滴落,那么就需要设置雨滴的滴落位置,即X的数值。
选择精灵-》 物理-〉改变mySprite的X以积木块。
一开始的雨滴只能从云朵中心滴落,雨滴X的位置就是云朵的X位置,即云朵的中心位置。现在雨滴可以在云朵的边际内自由滴落。我们来看看雨滴可以向左和向右各走多少步吧。云朵宽度是16,雨滴在云朵中间,那么就可以向左走八步,向右走八步。
把云朵的中心设为0的话,云朵的边缘X坐标是-8~8。👇
为了效果好一点,除去最边缘的情况,我们把雨滴滴落的X范围设为:弹射时的雨滴X-7至X+7。用这个范围的值来改变雨滴的X值,并且用随机数来达到雨滴随机滴落的效果。👇
接下来是雨滴滴落的初始高度,和刚才一样,雨滴的Y=云朵的Y值,也就是云朵中心的Y坐标,想要雨滴从底部滴落的话,我们需要把雨滴的Y坐标加上云朵中心离底部的距离(不同大小的云朵不一样,需要根据自己的云朵大小修改)。👇
现在看一下,这个小雨天的效果是不是更逼真了?
总结¶ 这节课我们介绍了精灵的运动,学会去设置以及改变精灵的位置,速度和加速度,并且了解了弹射物精灵的创建和用法。
希望接下来的游戏设计中,大家可以更好的去运用精灵的运动,让游戏更加出彩!
问答考验¶ 太空大战¶
教程介绍¶ 游戏机制¶
屏幕上方不断射出随机位置的飞机,我们称之为敌机,生命初始值3,初始得分0,如果被敌机攻击中了,则生命值减1,如果击中敌机,则得分加1。
我们玩游戏时,则需要在躲避敌机的同时去击落敌机,来获取更多的分数。
看到这个游戏机制,脑子里是不是立刻有了一些积木块的作用机制的回忆?
我们一起来编程一下!
创建太空战机¶ 设置初始值¶ 创建子弹¶ 创建敌机¶ 自动销毁¶ 子弹与敌机重叠¶ 设置子弹与敌机重叠事件,得分加一,销毁被击中的敌机。
拖取销毁精灵积木块到重叠事件中。
我们发现被子弹击中的敌机并没有被销毁,销毁的敌机是最新一个在屏幕中出现的敌机,并不是被击中的敌机被销毁了。
这是因为我们游戏中有很多的子弹精灵和敌机精灵。在程序中创建的敌机精灵以及子弹精灵指的是当时创建的精灵,并不是我们重叠事件中要处理的精灵。
如何设置销毁被击中的敌机呢?
被击中的敌机,就是重叠事件中的敌机,在子弹与敌机重叠事件中子弹类型是Projectile(弹射物),敌机的类型是Enemy(敌人),那么重叠事件中代表击中敌机的子弹精灵是sprite,代表被子弹击中的敌机精灵是otherSprite。拖动事件中的otherSprite模块替换销毁“敌机”积木块中的“敌机”,并设置一个击毁的特效。
战机与敌机重叠¶ 问答考验¶ 当精灵并不能全部在屏幕中显示,我们可以调用什么积木块来实现精灵在屏幕中?
解析:精灵-》特效->设置精灵保持在屏幕中
屏幕中不断出现精灵,为防止精灵过多造成游戏卡顿的现象,应该调用什么积木块?
解析:精灵-》特效->销毁精灵积木块
—————————————END———————————————
THANKS
自动驾驶¶
教程介绍¶ 编程目标¶ 那我们的Arcade游戏,在哪里可以设计地图呢?😕
📌积木块位置:场景工具箱-》设置图块地图为
点开灰色方块,来介绍一下编辑器内的使用工具以及使用方法:👇
地图由一个个的图块绘制而成,素材库(Gallery)里有丰富的图块,下拉框可以选择:👇
点击左右箭头可以看到一个系列里更丰富的图块素材:👇
当然作为一个灵感爆棚的设计师,点击My Tiles,我们也可以自己来设计图块:👇
点击My Tiles后面的加号,你可以新建一个图块进行编辑设计(图块大小为16*16):👇
如果两个图块相差不大,我们可以选择复制图块,然后稍作修改就是一个新的图块了。👇
修改长宽的值,我们发现,最大的值为512*512(图块)。👇
那这么大的地图,相当于多少个模拟器屏幕大小呢?
屏幕大小是160*120, 图块大小是16*16, 相当于一个屏幕大概能显示10*7.5(约为8)个图块。👇
综合以上,我们总结一下:
图块大小T:16*16(像素)
屏幕大小S:160*120(像素)
地图大小M:512*512(图块)-》8192*8192(像素)
介绍完地图后,我们就开始今天的项目吧。
设计地图¶ 创建汽车精灵¶ 📌积木块位置:场景工具箱中-》放置精灵到随机位置的某个图块上:
📌积木块位置:场景工具箱-》镜头跟随精灵移动积木块。
将“镜头跟随精灵mySprite移动”积木块放置到“当开机时”事件内部。这样,汽车走到哪里,我们的游戏视角就跟到哪里,操作一下试试看!
接下来是汽车开到了草地上的问题,这个是很危险的事情,我们要避免这样的情况。
打开地图编辑器,有一个画墙的图标,图块加上这个图标之后,就可以有墙的属性,正常的精灵是不可以穿过墙的。👇
我们给草地图块都加上墙的属性:编辑器上可以看到草地上有了一层红色的覆盖层,这个就代表着有了墙的属性(只是一种属性,模拟器屏幕中不会显示这个红色覆盖)。👇
TIPS:编辑器右上角有一个show walls的开关,开关关掉之后,你在编辑器中就看不到这一层红色覆盖了(墙的属性依旧在)。但是在绘制过程中,建议大家打开开关。
当然有同学会说,要全部一个个画上墙,要是我的地图很大的话,也太花时间了吧。不用担心,在后面的数组相关课程中,我们会介绍到如何用更方便的方法来画墙,不需要手动画,用程序就能实现。✌
好了,现在在模拟器上试一下,我们的汽车是不是可以在整个地图上跑起来了,并且只在道路上跑。
自动驾驶¶ 接下来我们就要开始做自动驾驶的功能了。
首先,我们给汽车一个初始的速度。👇
怎么做到自动驾驶?😕
也就是说汽车可以看着交通指示来驾驶。比如看到”左转” “右转” “前进” “倒退” “停车”这些指示,可以做出正确的对应的动作。
我们先来绘制一下我们需要用到的交通指示图块:👇
根据现在的道路,在路口放置对应的指示牌:👇
如何做到汽车识别到对应的指示牌呢?😕
在汽车驾驶到对应的路口的时候,其实会和方向指示牌图块重叠,我们可以使用场景工具箱-》精灵与图块重叠积木块来实现这个效果。👇
在第一个路口,看到指示牌后,我们给汽车设置该行驶方向的一个速度,这样汽车就能改变行驶方向继续驾驶。👇
同理,我们对其他的指示牌也做相应的处理:👇
试一下,现在我们的汽车是否可以做到自动驾驶?😕
可能大家会发现一个问题,汽车在行驶到一些路口的时候,停了下来。这是为什么呢?👇
因为我们在手动驾驶的时候,给草地加上了墙的属性。但是自动驾驶的时候,汽车与交通指示图块重叠,可能会有一小部分汽车的位置是超过了当时的图块位置,所以遇到前方的有墙属性的草地之后,汽车被挡住了。
在自动驾驶的时候,我们道路周围的草地可以不加墙的属性,使用橡皮擦工具擦除草地墙的属性。
这样,我们自动驾驶的功能就实现了。
不过还有一个不太合理的地方:汽车改变驾驶方向后,汽车的方向没有变化。
优化汽车形象¶ 问答考验¶ ■地图最大能包含多少个图块?
解析:512*512
■地图中墙的属性有什么意义?加上墙的属性后,屏幕上能否显示出来墙的颜色?
解析:加上墙的属性后,普通精灵无法穿越。屏幕上只是会显示对应的图块图案,墙的属性在屏幕上看是透明的,不是显示出来。
精灵与图块重叠积木块 和 不同类型精灵重叠积木块有什么区别和共同之处?
解析:两个重叠事件的处理方式是一样的,都是重叠之后就会触发。
区别之处是重叠类型的不同:“精灵重叠”积木块只能处理精灵之间的重叠事件;在地图中,我们是用图块绘制的,所以要用到精灵与图块重叠积木块。 当然,在这个案例中,如果你把不同的交通指示设置为不同类型的精灵,也是可以做到的,只是这样的方式,我们会用到很多精灵类型,而且放置精灵的位置都要做单独处理,用图块的话更加简单方便。
———————————— END ————————————————————
神奇的循环¶
教程介绍¶ 在上节课程中我们讲解了自动驾驶,同学们了解了地图的绘制,以及精灵和图块的重叠事件积木块的使用,相信同学们的图形化编程知识又增加了不少。💡
在编程游戏中一个效果的实现会有有好多种编程思路:
比如判断猫吃鱼的条件由设置判断坐标轴一样→ 两个精灵重叠;设置随意颜色由设置不同颜色→ 调用选取随机数积木块;设置地图指示牌由设置指示牌精灵位置→ 在地图中放置指示牌图块。
可见,同样的游戏效果可以有不同的编程方式,我们在编程中可以多利用发散思维,寻找编程的最优解。
这节课,我们通过编程游戏项目《种草莓》来了解循环积木块的使用,以及不断优化编程出一个简洁逻辑清晰的程序。
种草莓¶ 想到种草莓是不是脑海里想到了“开心农场”游戏里面蔬菜整齐分布的场景:
🍇🍈🍉🍊🍋🍌🍍🍎🍏🍑
这节课,我们来利用编程创建一个“开心农场”,需要设置草莓的草地背景,草莓的形象,草莓的位置,一起来编程一下!
设置草莓位置¶ 循环积木块的使用¶ 这里可以用到“重复N次”循环积木块。
积木块含义:
设置指定的次数来重复运用内部的程序。
积木块位置:
循环工具箱-》重复N次,执行()
种满第一排的草莓需要十个草莓,因此设置重复10次,将“草莓样式”积木块和“设置草莓位置”积木块拖取到循环积木块里面。👇
现在的草莓重复种在了(8,8)的位置,如何设置种满一排呢?
循环积木块的作用是重复运行内部的积木块,那么我们只要设置草莓的位置基于上一个草莓位置的变化,就可以不断重复设置草莓位置了。
在前面的种草莓我们已经找到了位置规律,即:
草莓位置X(新)=草莓位置X(旧)+16
这里的X每次都会以16个数值幅度增加,我们可以使用变量积木块。
变量
在之前在”随机应变“游戏中讲过,变量几乎在编程游戏中都会使用到,一个游戏中可以包含多个不断变化的变量。变量可以放置在需要的事件中,也可以设置数值和数值变化幅度。
我们在变量工具箱中设置一个变量“X”。将变量X积木块替换设置草莓位置的X值。👇
变量工具箱中的另外两个积木块从上往下分别用来设置特定的数值和设置变量的变化幅度。👇
我们把第一个草莓的X坐标设为8(精灵大小16*16,坐标为精灵中心点位置,即(8,8))。将变量工具箱中“将X设为8”积木块拖取到“当开始时”积木块内部。👇
后面的草莓的X坐标值都是在前一个坐标值+16,以16为幅度更改X坐标。👇
想要看到草莓一个个种下的效果,我们可以加一个延时。👇
现在,第一排的草莓就种好了,模拟器看看效果吧!👇
接下来,我们来种第二排草莓,第二排与第一排相比,Y坐标+16,我们需要增加一个Y坐标变化16幅度的循环,种两排就是循环两次。并且在第一排草莓种好之后,我们要将草莓的初始X坐标设置为8。👇
现在我们是先种第一排,然后第二 第三排,如果想要换个方式,先种第一列,然后第二 第三列,这样的话要怎么办呢?😕
按照同样的办法,我们先让内部Y坐标循环8次,再让外部X坐标循环10次。👇
上面的程序已经可以让我们轻松的种草莓了,还有更加简洁的程序设计嘛?😕
作为一个合格的设计师,我们对程序的设计有着更高的要求,比如更加简洁明了。
是的,我们还有更加简洁的编程方式。
🍓 🍓 🍓
优化编程方式¶ 我们看到循环里还有这个积木块,和之前的不同的是,这里面还有一个index的值。👇
积木块含义:设置指定的次数循环运行内部的程序,index作为索引变量指代循环运行的第N次,可以放置到循环积木块内部的积木块中依次运行每一次的程序。
之前的种草莓程序中,设置第一排草莓X坐标循环了十次,但是我们并不知道当前的循环是第几次,而这个积木块,第几次循环可以用“index”变量积木块表示。
知道是第几次循环可以给我们带来什么样的便利呢?😕
我们不需要给X设置变化幅度来设置X坐标值了,可以直接通过简单的数学计算,得出每次的坐标。
对于第一排的草莓,每个草莓的X坐标可以这样表示:👇
第一个草莓, index=0, 坐标X= 8
第二个草莓, index=1, 坐标X=16*1+8
第三个草莓, index=2, 坐标X=16*2+8
第四个草莓, index=3, 坐标X=16*3+8
。。。
我们可以用数学工具箱中的“数学公式”积木块表示X坐标值:👇
将“X坐标公式”积木块替换之前的“X变量”积木块,修改后的程序如下:👇
同样的,我们也用这个方法修改Y坐标和循环次数:👇
添加了循环Y坐标后我们发现,种草莓程序上出现了一些问题,游戏并没有按照一排一排的种,而是对角线自动种草莓了,这是为什么呢?😕
因为每一个“对于0至N的index”积木块中的index只能指代一个循环的序数数值。现在的程序中出现了两个index变量,因此设置Y坐标的循环积木块中的index我们要重新创建一个新的变量inedxy来替换,不然会和内部的index混淆。👇
现在,用这么简单的一段程序就可以实现种草莓了,不用给X Y设置初始值,也不用修改X Y的值了,这样的程序是不是看起来更加的简洁?👇
学会了使用循环积木块之后,我们还可以很方便的自己设计一块地形,然后来种草莓,只需要找到规律,然后修改循环内部位置的算法就可以了。
🍓🍓🍓
可见,对于编程语言就和解答题目一样,我们在做题时寻找着题目的最优解,在编程中不断推导出简洁优美,逻辑性强的程序语言。在一次次遇到问题,思考问题,解答问题的过程闭环中,完成思维能力和编程能力的螺旋式提高。
问答考验¶ 常量和变量的关系
解析:变量是在游戏中可以变化的量,如之前随机应变游戏中创建随机数变量,种草莓中X坐标变量,index变量,这里变量的数值可以按照变化幅度变化;常量是不可以变化的量,如游戏中的精灵,大小不能变化。
循环是否可以嵌套,是先执行里面的循环,还是外面的循环?
解析:先执行内部的循环,在执行外部的循环
———————————— END ———————————————
Xtron Scratch 指南¶
Xtron Scratch 积木块指南¶
1.Xtron有两个可编程的LED灯,4个RGB灯,7个按键(4个方向按键,2个功能按键,1个菜单按键),1个蜂鸣器,光敏传感器,运动传感器,还有2个扩展接口。运用这些模块以及扩展,可以学习Scratch以及Python编程,还可以做很多有趣的创客制作。
2.用Scratch进行编程,你有两种方式可以选择:
(1)下载并安装Ovoblock软件。
Ovoblock是一款基于Scratch 3.0开发的电脑端编程软件,支持Mac、PC和浏览器平台,兼容Scratch 3.0的所有功能,同时也支持python语言开发。
Ovoblock下载链接:https://www.ovobot.cn/zh-hans/app/#Ovoblock
(2)使用Ovoblock网页版本。
与下载并安装软件相比,不同之处在于,在线编程的时候,你需要运行【Ovobot-link】。
Ovobot-link下载地址:https://www.ovobot.cn/zh-hans/product/detail/ovobot-bit/info/#downloads
ovoblock在线编程链接: https://ovoblock.ovobot.cn/
3.在Xtron开始编程之前,你需要加载对应的固件。
4.打开Ovobot软件,移除默认的OvoBot Bit设备,在添加设备里加上Xtron。
![]()
5.现在你可以开始Scratch编程了,我们的Xtron有实时和离线两种模式,可以根据你的需求来选择。
调试模式: Xtron要连接在电脑上,用于程序的调试,点击【调试程序】,可以实时看到程序效果。
离线模式: Xtron在程序下载的过程中(LED1和LED2交替闪烁),需连接在电脑上。点击【下载程序】下载完成后,无需连线,可以开机直接运行程序。
![]()
6.你可以从基础的积木块开始学习,积木块的介绍参考:
基础积木块编程指南¶
灯光¶
设置板载LED
Xtron上有2个LED灯,可以分别设置熄灭和点亮。
这两个LED灯还用来作为状态的指示灯,比如充电时led1亮红灯,下载代码时led1闪红灯,开机时led2亮蓝灯后熄灭。
![]()
板载LED电平反转
每次执行该程序块会把对应LED电平反转,即Xtron的led灯从点亮变为熄灭,或者从熄灭变为点亮。
![]()
设置板载LED亮度
该程序块可以设置Xtron板载的led灯的亮度,数值范围为0~255。
在点亮LED之后再设置亮度才生效,而且只调节前面程序里已经点亮的LED灯的亮度值。
![]()
例子:
设置板载RGB灯颜色
Xtron上有4个RGB灯,可以分别设置不同的颜色,通过颜色、饱和度、亮度来调节颜色,数值范围均为0~100。
点击颜色下方的【滴管图标】还可以从已有的角色中一键获取角色上的任意颜色。
![]()
设置板载RGB所有灯颜色
可以将板载上的4个RGB灯,同时设置为相同的颜色,通过颜色、饱和度、亮度来调节颜色,数值范围均为0~100。
同样的,还可以从选择的角色中一键吸取已有的颜色。
和上面的程序块的区别是,上面的是单独设置某一个RGB灯,这个程序块则是同时设置所有的RGB灯。
![]()
设置板载RGB灯亮度
该程序块用来设置Xtron板载的RGB灯的亮度。
设置亮度值之后,再设置RGB灯的颜色,亮度值才生效。如果你想改变亮度值的话,你需要设置亮度值之后,再次设置一下对应的RGB灯颜色。
![]()
例子:
显示¶
设置文本内容程序块
显示生效
在设置好屏幕背景以及屏幕显示内容后,加上显示生效积木块,屏幕上才会显示我们设置好的背景及内容。
![]()
例子:
绘制线一条水平或者垂直的线段
在某个坐标(x,y)绘制一条水平或垂直的线段,线的长度≤显示屏的长度。
坐标的范围是X:0~160, Y: 0~120
如果是水平线,线段长度+ X的坐标<160; 如果是垂直线,线段长度+ Y的坐标<120. 否则线段显示不完整。
所有绘制的图案,都要加上显示生效积木块,才会在屏幕上显示出来。
文本内容有16个颜色可选,其中第一个颜色是透明色。
![]()
绘制一条线段
绘制一条从一个坐标(x1,y1)到另一个坐标(x2,y2)的线段
坐标的范围是X:0~160, Y: 0~120
和上一个积木块的区别是,这个积木块绘制的线段是任意的方向,上一个只能是水平或者垂直方向。
文本内容有16个颜色可选,其中第一个颜色是透明色。
![]()
绘制一个矩形
在某个坐标(x,y)处绘制一个矩形,通过设置矩形的宽和高来设置矩形的大小。
可以选择实心矩形或者是空心矩形。
坐标的范围是X:0~160, Y: 0~120。
如果坐标值加上矩形大小,超过了显示范围,会显示不完整。
文本内容有16个颜色可选,其中第一个颜色是透明色。
![]()
绘制一个圆形
在某个坐标(x,y)绘制一个圆形,通过设置圆的半径来改变圆的大小。
可以选择实心圆形或者是空心圆形。
坐标的范围是X:0~160, Y: 0~120
如果坐标值加上矩形大小,超过了显示范围,会显示不完整。
文本内容有16个颜色可选,其中第一个颜色是透明色。
![]()
绘制一个三角形
通过设置三角形三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)来绘制一个三角形。
可以选择实心三角形或者是空心三角形。
坐标的范围是X:0~160, Y: 0~120
文本内容有16个颜色可选,其中第一个颜色是透明色。
![]()
设置RGB颜色
该程序块用来设置RGB的颜色,在设置屏幕颜色或者画笔颜色的时候,可以用指定的RGB的值来设置颜色。
红绿蓝三种颜色的数值范围分别为0~255。
比如红色有很多种:粉红(255,192,203,深红(220,20,60),淡紫红(255,240,245),弱紫罗兰红(219,112,147),深粉红(255,20,147)等,我们通过设置不同的RGB值就可以精确的显示不同的颜色。
![]()
例子:
声音¶
播放音符
该积木块可以播放音符,音符以及节拍长度可以在下拉框里选择。
点击音符,显示的是中央C的音调,可以用左右两边的箭头来切换高低音,左边是低音,右边是高音。
简谱和音名的对应关系:我们在生活中,一般接触到的都是1234567这样的简谱,但我们积木块是用五线谱的音名来显示的,在C调的乐谱中,它们之间的对应关系如下。
![]()
C调中,C、D、E、F、G、A、B分别对应简谱中的1、2、3、4、5、6、7,一个唱名为四分音符持续1个节拍,下方有一个横杠的是八分音符持续1/2节拍,音符后有一个横杠的为二分音符持续2个节拍,同学们按照音符和节拍数编写整段音乐。
比如下面的上学歌,不划线是四分音符,在这首曲子中是一个节拍,一道下划线的节拍相当于八分音,在这首曲子中是1/2拍。
一些音符后面会加-,表示音符持续,例如7 - 代表 7 这个音占了两个节拍,7- - 则表示3个节拍。
![]()
![]()
暂停播放
使用该积木块可以停止声音,停止的节拍数可以在下拉框中选择。
![]()
xtron机器人积木块编程指南¶
如果你想做一个机器人,你可以把Xtron当作机器人的大脑。当然,机器人不能只有大脑,我们需要给它配上一些传感器以及一些硬件模块。
Ovobot Xtron是Xtron的机器人扩展,它有一个4PIN接口,通过I2C总线连接Ovobot所有的传感器和硬件模块,还有一个包含了IO口、SPI、PWM和I2C功能的20PIN接口。
![]()
下面是Xtron的机器人扩展积木块,你可以用这些积木块来让机器人运动,声音传感器让机器人有了听力,超声波和巡线传感器则可以帮助机器人更好的完成一些任务。
1.设置机器人移动速度
该积木块用来设置机器人的前进或后退的速度,数值范围为0~255。
2.设置机器人移动速度及时间
和上面的积木块的区别是,上一个积木块需要加停止程序才可以让机器人停止运动。而这个积木块有持续时间,持续时间结束后,机器人就停止运动了。
3.设置旋转速度
设置机器人向左或者向右的旋转速度,速度范围为0~255。
4.设置旋转速度及时间
设置机器人向左或者向右的旋转速度以及持续时间,速度范围为0~255。区别同上。
5.停止运动
可以用该积木块让机器人停止运动。
6.驱动电机
该程序块可以分别设置机器人的左右两个轮子的速度,来实现前进,后退,转弯。
当左右转速相同,并且数值>0的时候,机器人按照设置速度前进。
当左右转速相同,并且数值<0的时候,机器人按照设置速度后退。
当左轮>0,右轮<0,机器人是左转。
当右轮>0,左轮<0,机器人是右转。
7.控制舵机转动
该积木块可以控制舵机旋转到一定的角度,旋转度数的范围大小是-90~90。可用来制作丰富的带舵机的小制作。
8.响度
我们用响度来表示声音传感器的反馈值,响度的范围大小是0~255。
9.超声波传感器距离
该积木块返回值是机器人的超声波传感器检测到离障碍物的距离。
10.超声波传感器检测到障碍物程序块
反馈机器人的超声波传感器是否检测到障碍物。是的话返回值是True, 否则返回值是False.
11.巡线传感器数值程序块
该积木块可以分别反馈巡线传感器左右两个光电对管检测的灰度值,黑色物体的返回值接近0,白色物体返回值接近255。
12.巡线传感器颜色检测程序块
分别用于判断巡线传感器左侧或者右侧是否检测到黑色或白色,条件成立时返回为真。
视觉识别摄像头积木块编程指南¶
视觉识别摄像头简介¶ (1)视觉识别摄像头可以作为Xtron的扩展来使用,它是一款用于图像识别的传感器。
(2)其内置的深度学习引擎可以识别多种目标物体,例如颜色检测、球体检测、人体检测、卡片识别等。
(3)检测结果可以通过 I2C 进行输出,体积小巧,功耗低,所有算法本地处理,无须联网,可广泛应用于人工智能教具、创客等产品或领域。
(4)提供了简单而实用的参数设置功能:摄像头帧率,LED 颜色,数码变焦,白平衡,算法性能设置。合理设置这些参数,将会有利于摄像头性能的提升。
下面我们将介绍视觉识别摄像头的使用方法。
视觉识别摄像头硬件连接¶ 视觉识别摄像头的外设和接口如图所示:
![]()
(1)将传感器左侧输出模式拨码开关1拨至下方,2拨至上方;
(2)将传感器连接到Xtron的I2C扩展接口;
(3)将传感器的地址选择拨码开关拨至对应位(默认地址0x60,对应MU00,1、2都在下方,只有在与其他传感器地址冲突时才需要进行更改,平时不推荐修改此设置),
视觉识别摄像头积木块介绍¶
初始化模块
开启算法
设置算法性能
关闭/开启摄像头高帧率模式
设置摄像头白平衡
(1)当摄像头视野中出现大面积有颜色的物体时,摄像头会发生白平衡失真,产生偏色现象,通过事先锁定白平衡能够防止此问题的发生。
(2)但白平衡功能并不总是有利于色彩还原的,合理使用白平衡对于颜色相关的算法是十分关键。
(3)白平衡的调节分为自动调节方式和固定参数方式,对于一张构图颜色均衡的图像,其 R,G,B 三个通道的值应是分布均匀的,如果 R、G、B 通道分布出现了失衡,自动白平衡功能会适时的修改各通道的色彩增益值使其重新分布均衡,而固定白平衡是不会改变其色彩增益的。
(4)模式介绍:
自动模式:适用于光照良好且对颜色要求不高的环境中使用;
锁定模式:适用于颜色还原要求较高的环境,让摄像头面对白纸进行白平衡校准,然后锁定白平衡参数,锁定后颜色不会随环境的改变而变化;
白光模式:适合于白色灯光或者阴天环境中使用,该模式也属于自动白平衡模式;
黄光模式:适合于黄色灯光或者阳光环境中使用,该模式也属于自动白平衡模式。
(5)锁定白平衡的校准方法
将摄像头面向一张白纸 10~20cm 处,确保摄像头中心区域完全面向白纸,灯光照向白纸,但尽量不要有阴影遮挡;
调用锁定白平衡指令,或短按功能按键(摄像头左侧 mode 键);
摄像头的 LED 会闪烁一下白色灯光,开始白平衡校准;
几秒钟后,当 LED 闪烁一下青色灯光后,表明白平衡校准完成;
如果 LED 闪烁为紫色灯光,则表明校准失败,可以再次重新校准。
备注 1:由于校准白平衡需要几秒钟的时间,所以使用软件锁定白平衡时应该位于小 MU 设置最后使用,并设定 2 秒左右的暂停时间等待校准完成。
备注 2:按键方式可以在小 MU 运行的任何时刻去校准白平衡,而指令模式只适合于开机后的配置阶段使用。
备注 3:如果校准时使用的不是白纸,即便校准后显示为青色灯光,那么图像也可能是处于偏色状态的,因为该功能会将其他颜色尽量调节为白色。
(6) 锁定白平衡模式的使用场景
设置摄像头数码变焦
板载LED灯光设置
恢复模块默认设置
判断摄像头是否检测到目标
判断摄像头是否检测到颜色
(1)检测到目标位置的颜色后,返回true, 否则返回False。
(2)色块检测与颜色识别的区别:
(3)颜色Label分类标签的定义:
![]()
判断摄像头是否检测到色块
检测的目标色块可以在下拉框里选择,摄像头检测到所选目标色块后,返回true, 否则返回False。
![]()
获取检测目标的坐标以及大小
返回值是检测到的目标的坐标。检测目标可以在下拉框选择,获取的值有横向,纵向坐标,以及目标的宽度和高度。
(1)X-Y 坐标:摄像头输出图像的宽高比例为 4:3。在图像坐标系中,水平与垂直坐标均被量化到了 0~100 的范围内,其含义是该坐标相对于完整图像的百分比位置。例如 X 为30时,即该物体的 X 坐标位于水平方向距离原点 30%的位置上。
(2)W-H 宽高:当检测到物体后,返回物体的 Width 宽度值和 Height 高度值,其量程同样被量化到了 0~100 的范围内,其 W 宽度的含义是其在整个水平方向所占据的百分比值,H 高度的含义是其在整个垂直方向所占据的百分比值。需要注意的是,由于水平垂直的比例是 4:3,所以对于宽高相同的正方形物体而言,其输出的宽高值是存在一个 3:4 的比例关系的,而并不是相等的关系。
(3)Label 分类标签:对于具有分类识别功能的算法而言,还会根据所检测到的不同物体输出其对应的分类标签值,该值是内部设定好的一系列数字,每一个数字对应一个特定的物体,以球体算法为例,当 Label 标签为 1 时,代表检测到了一个乒乓球,而如果 Label 标签输出为 2,则说明此刻检测到的是一个网球。Label 分类标签在颜色和卡片的算法中是一个十分关键的信息。
![]()
![]()
获取目标颜色里对应的RGB值
颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。在使用颜色识别时可以指定识别区域的坐标,其余参数为默认值。
![]()
判断是否检测到形状卡片里所选形状
检测到形状卡片里所选形状卡片后,返回true, 否则返回False。形状有钩,叉,圆形,方形,三角形可以选。
![]()
判断是否检测到交通卡片里所选图标
检测到交通卡片里所选图标后,返回true, 否则返回False。图标有向前,向左,向右,掉头,停车可以选。
![]()
判断是否检测到数据卡片里对应数字
检测到数字卡片里所选数字后,返回true, 否则返回False。数字有0-9可以选择。
![]()
判断是否检测到所选颜色
检测到所选的颜色后,返回true, 否则返回False。颜色有9种可以选择。
![]()
完整示例¶
球体与人体检测:
球体算法的特殊性:球体算法分为搜索阶段和跟踪阶段,在球体未检测到时处于搜索阶段,此时处理速度相对比较慢,检测距离也会比较近。一旦检测到球体后,会进入跟踪阶段,处理速度会有所提升,检测距离也会变远。当球体丢失后,会再次进入搜索阶段。
人体算法的有效特征:人体检测实际是检测人体的上半身特征,上半身特征是指由头部(必须包含人脸)和胸部以上(肩膀)构成的特征组合,如果图像中具有符合人体上半身特征,那么会被认为是有人体被检测到。
初始程序:采用I2C连接,启用人体检测算法,其余设置为默认。
循环程序:如果视觉传感器检测到人体,会通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示位置和类型信息,否则循环显示未检测到人体,球体检测同理。
实验现象:未检测到人体则视觉传感器闪红灯,屏幕显示”body undetected”。检测到人体则视觉传感器闪蓝灯,屏幕显示返回的坐标等信息。
![]()
卡片识别
我们具有 3 类卡片算法:形状卡片,交通卡片,数字卡片。摄像头只能识别下述特定图案的卡片。在一幅图像中,同一个算法只能返回一个卡片的检测结果,但可以同时运行不同类型的卡片算法。
初始程序:采用I2C连接,启用交通卡片识别算法,其余设置为默认。
循环程序:如果视觉传感器检测到交通卡片,会通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示位置和类型信息,否则循环显示未识别,其他类型的卡片识别同理。
实验现象:未检测到卡片则视觉传感器LED闪红灯,屏幕显示”card undetected”。识别到则视觉传感器LED闪蓝灯,屏幕显示返回的坐标信息和交通卡片的具体图案信息。
![]()
颜色识别
在使用颜色识别算法时,需要指定一个颜色识别区域,算法运行后只返回该区域内的颜色信息。颜色识别区域小,像素少,速度快,但容易因各别像素的偏色而造成可信度的降低;颜色识别区域大,像素多,速度慢,但容易受背景的干扰。颜色识别区域应根据实际需求而合理设置。
颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。
初始程序:采用I2C连接,启用颜色识别算法,锁定摄像头白平衡防止偏色,其余设置为默认。
循环程序:视觉传感器识别坐标(50,50)处的颜色,通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示识别到的通道信息和颜色类别。
实验现象:视觉传感器始终不闪灯,屏幕显示返回的通道值和颜色的类别。
色块检测
后续将更新更多案例,敬请期待。。。
Xtron Scratch 游戏编程指南¶
Ovobot Xtron可以用来编写MakeCode Arcade游戏,也可以用作Scratch的游戏手柄,只需要简单几步,就可以实现.
你可以在下面的两个平台上编写Scratch游戏:
(1)Ovoblock软件
Ovoblock是一款基于Scratch 3.0开发的电脑端编程软件,支持Mac、PC和浏览器平台,兼容Scratch 3.0的所有功能,同时也支持python语言开发。
Ovoblock下载链接:https://www.ovobot.cn/zh-hans/app/#Ovoblock
(2)Scratch官网:https://scratch.mit.edu/projects/editor/?tutorial=getStarted
下面是一些Scratch游戏课程,可以供你参考。当然不仅仅局限于下面的游戏,只要你编写的游戏可以用键盘来控制,那么同样也可以用Xtron来控制。
Xtron的4个方向键对应键盘的方向键
Xtron的A B按键对应键盘的按键A 以及按键B
第一课 走迷宫¶
今日任务:¶ 今天我们将利用Scratch制作一个迷宫游戏,通过Xtron的上,下,左,右按键来移动人物,如果人物碰到迷宫墙壁则游戏失败。同时,如果碰到游戏中的巡逻兵也会失败。
任务拆解:¶ (1)利用什么工具绘制迷宫?
(2)人物如何接收键盘指令?
(3)如何判断碰到迷宫墙壁会失败?
(4)如何判定游戏胜利?
(5)如何让巡逻兵角色进行巡逻?
(6)如何判断碰到巡逻兵失败?
动手操作:¶ 第一步:点选右下角舞台,选择背景。
![]()
用矩形工具绘制如下图形。
![]()
第二步:点击选择角色,挑选一个你喜欢的角色。
![]()
第三步:我们要实现的效果是小狗可以按照键盘指令移动。如果在移动过程中角色Dog1偏离路线碰到了墙壁则失败,移动到终点则成功! 一开始小狗从“起点开始”,注意下图x:和y:的大小,x和y的数值代表角色1的位置。 一开始默认的大小是100,如果你挑选的角色比较大,那么,修改大小值,使角色可以通过迷宫的一些空隙, 然后注意这个大小值,我们后面初始化的时候需要用到。
![]()
(1)一开始,我们需要确定角色1出现的位置以及大小,还要设置翻转模式为左右翻转。
![]()
(2)然后我们控制角色1移动。
![]()
(3)添加一个食物角色,放在出口处。狗狗走出迷宫,吃到食物则游戏胜利。
(4)在移动的过程中,碰到迷宫黑色墙壁则失败,碰到食物则成功,但是无论成功还是失败,小狗都将重新返回到起点。
![]()
(5)移动过程中,有的空隙很小,小狗过不去,我们用A按键让小狗变大,B按键让小狗变小。
![]()
第四步:添加一个角色Ladybug2作为巡逻兵。
![]()
第五步:为Ladybug2添加脚本,让它可以满屏幕移动。
![]()
第六步:最终,角色Dog1的完整程序如下:
![]()
课后反思:¶ (1)为了增加游戏的趣味性一,可否增加时间限制功能?在规定的时间内没有过关就失败。
(2)为了增加游戏的趣味性二:在游戏中能否增加“传送门”角色?当主角碰到传送门的时候可以被“传送”?
第二课 人物控制¶
今日任务:¶ 今天我们将制作一个游戏人物,这个游戏人物可以由Xtron的上,下,左,右按键来控制移动,还可以用A B按键做出“出拳”,“跳跃”的动作。
任务拆解:¶ 动手操作:¶ 课后反思:¶ (1)请你自行设计“出腿”,“飞踹”等大招。
(2)当游戏人物攻击的时候,有时会出现这样一种情况,明明还没有出拳,但是敌人已经被击中消失了,这是为什么,怎么改进?
第三课 坦克控制¶
今日任务:¶ 今天我们要制作一个可以利用Xtron的按键控制(上下左右)方向、发射子弹的坦克, 并且,当“子弹”击中敌方坦克时,敌方坦克会发生“爆炸”。
任务拆解:¶ 动手操作:¶ 课后思考:¶ (1)会用变量的同学可以思考一下怎么计分?(击中一辆敌方坦克+1分?)
(2)我们利用上面的程序制作出的我方坦克虽然可以上下移动,但是只能向上发射子弹, 怎么才能让我方坦克可以根据坦克面向的方向,向上下左右四个方向发射子弹呢?
第四课 接礼物大作战¶
今日任务:¶ 今天我们要制作一个接礼物的scratch游戏,规则如下:
(1)玩家控制一个角色,该角色只允许在舞台下方左右移动并且由Xtron的按键控制方向;
(2)舞台上方会随即降落各种“礼物”,每种礼物的下落速度不同,接到每种礼物所得的分数也不相同,但接到“ghost”时会减分;
(3)游戏计时30秒,30秒内你所得分数小于20,则游戏失败,否则游戏胜利!
(4)再次点击绿旗可以重新开始游戏!
任务拆解:¶ 动手操作:¶ 第一步:新建角色1(汽车),也可以挑选一个你喜欢的角色。
![]()
第二步:新建一个变量score,我们准备用这个变量计得分!
![]()
![]()
第三步:启动计时器。
![]()
第四步:创建角色2(香蕉),角色3(薯条),角色4(幽灵), 这样一来我们的四个角色就全部就位了,通过输入的数字决定角色的大小,将四个小角色缩小一些如下:
![]()
第五步:为角色1(汽车)编程。
1、
![]()
2、变量score清零,计时器清零;
3、要重复(判断)什么呢?
![]()
当然是要判断时间到了30秒以后,score有没有到30分,得到了30分胜利,没得到失败!
4、还没完,我们还忘了点儿啥?角色1还不能用键盘控制左右移动,这个怎么实现?
第六步:为角色2(香蕉)编程。
1、
![]()
2、角色2一开始要显示出来
![]()
3、一开始,确定角色2的位置(屏幕最上方,向下掉落,所以x和y应该是多少?)
![]()
4、要重复(判断)什么呢?
![]()
角色2可以向下掉落,在掉落过程中,没被角色1接住,碰到边缘了怎么办?
![]()
在掉落过程中,被角色1接住了,怎么办?
![]()
第七步:将角色2的程序复制给角色3或角色4,但是角色3和角色4的程序与角色2的程序可不能完全一致,我们可以对角色3和角色4的程序做一些变动,试想一下需要做什么变动?
第八步:运行你的程序,看结果。
课后反思:¶ 第五课 大鱼吃小鱼¶
今日任务:¶ (1)设计一条可以用键盘控制上下左右移动的鱼(角色1);
(2)当鱼(角色1)吃到比它大的鱼,游戏失败;
(3)当鱼(角色1)吃到比它小的鱼,自己的体型变大;
(4)当它吃到章鱼(角色4),自己的体型变小。
任务拆解:¶ (1)首先要绘制一条鱼(角色1);
(2)为这条鱼(角色1)编写脚本,实现键盘控制上下左右移动;
(3)新增被吃的鱼角色,当被吃的鱼碰到鱼(角色1)的嘴,判断谁的个头大,如果鱼(角色1)比自己大,那么自己被吃,鱼(角色1)长大一些。如果自己比鱼(角色1)大,那么游戏失败!
(4)同理,制作其他被吃的鱼和章鱼(角色4)。
动手操作:¶ 第一步:绘制鱼(角色1);
(一)利用圆形工具和直线工具绘制出如下图形:
![]()
(二)然后利用线条工具(我选了红色线条),在嘴部绘制两条线,如下图:
![]()
(三)点击左下角转换为位图(用来填充鱼的嘴部)。
![]()
(四)利用填色工具,选中透明色,将嘴部填充为透明色。
![]()
(五)然后将该角色在舞台上摆放好,如下图:
![]()
(六)接下来,进入角色1的造型界面,右击造型1复制出造型2。
![]()
(七)将造型2的鱼尾部用橡皮擦擦除掉。
![]()
(八)画上向另外一个方向摆动的鱼尾,请看下方对比图,注意尾巴方向的变化。
![]()
(九)这条鱼(角色1)的两个造型完工,再导入其他3个角色图片。
![]()
第二步:为角色2(或者角色3)编写脚本。
![]()
第三步:为角色1编写脚本。
![]()
第四步:请为剩下的角色编写(复制)脚本代码吧!
课后反思:¶ (1)如果作为一个完整的游戏,必须有胜利和失败的条件才行,那么这个游戏中,没有计时器也没有计分器,你能思考一下,这两个“器”怎么添加到程序中吗?
(2)关于这个程序,你还有没有其他想增加的游戏效果(内容),试着改一改,添一添吧!
第六课 弹珠游戏¶
今日任务:¶ 任务拆解:¶ 动手操作:¶ 第一步:绘制木板(角色1),并让木板可以受按键控制左右移动。
![]()
将木板放置在舞台偏下的部分,然后为木板添加脚本,实现木板受按键控制可以左右移动的功能! (这段程序请同学们自行编写吧,难度等级:一颗星)
第二步:绘制下方的蓝色区域(角色2),球碰到此区域则失败!
![]()
第三步:导入球(角色3),我在此例中使用了篮球的角色。
![]()
![]()
接下来,我们要思考的问题就是首先球可以移动起来,然后,碰到边缘就反弹,碰到木板也反弹,碰到下方蓝色区域就失败!所以,需要用到的指令是: 确定球一开始出现的位置,想想这步有没有必要?
![]()
球一开始的运动方向随机:
![]()
然后重复执行,重复执行什么呢?往下看:
![]()
球可以移动起来,并且碰到边缘反弹。
![]()
碰到木板角色怎么办?
![]()
(难点)碰到木板球的方向要改变:
![]()
那么,如果碰到下方蓝色区域呢?
![]()
试着把球的程序编出来吧!难点在小球碰到木板后,方向是如何改变的?
第四步:其实,完成了前面三步之后,你运行程序,如果脚本正确的话,你应该可以见到一个接弹珠小游戏被制作出来了。 但是,如果我们止步于此,就有点太可惜了,我们继续给这个游戏加点料!
再增加一个白球(角色4),我们可以把之前篮球的脚本复制给这个白球,但是,我不希望一开始屏幕上有两个球,而是玩家玩接篮球游戏过了10秒之后,这个白球才出现,作为游戏难度的提升,那么,想想,这个白球的脚本应该比篮球的脚本多什么? 提示:
![]()
![]()
课后思考:¶ 第七课 赛马¶
今日任务:¶ 今天我要和同学们一起来设计一个赛马的小程序,你可以控制程序中的一匹马,然后按Xtron上的向右方向键(或其他按键),让这匹马跑起来,按下Xtron上的A键(或B键),马儿跳起来越过跑道上的蓝色线条。 当然,如果想成为第一匹冲线的小马,那就要看你的运气和按键的使用了!
任务拆解:¶ 动手操作:¶ 第一步:设计游戏主场景、失败场景、胜利场景。
![]()
![]()
![]()
![]()
第二步:确定主持人角色、小马角色(自己控制的小马, 通过颜色编辑的方式修改一下颜色,进行区分),将以上各个角色摆放至舞台之上,如下图:
![]()
![]()
第三步:角色全部就位,下面我们要考虑如何脚本的问题了,我们先从主持人开始, 主持人的功能是讲解游戏规则和被点击之后游戏开始,我给大家些提示:
![]()
如何实现支持人被点击后,游戏开始呢?
![]()
想想!谁要接收这个广播呢?
不要以为上面的想清楚了就结束了, 这个主持人被点击之后还能一直待在舞台上么?如果想让这个主持人被点击之后消失掉,怎么实现?
![]()
第四步:编程时,头脑一定要清晰,刚才我问了一个问题,谁应该接收start game广播呢?答案肯定是小马们了, 接下来就是比较关键的为小马编写脚本,我们这步先为陪跑的小马编写脚本,最后在为我们控制的小马编写脚本。
![]()
给小马们设定一个初始位置x和y,统一在起跑线位置出发。
![]()
这步有什么用?为什么是随机数?
![]()
这个颜色就是终点线的颜色!
![]()
陪跑的小马碰到终点线,应该有什么操作?想一想!
提示:
![]()
这个hit可以理解为撞(终点)线的意思!那么,问题又来了,谁接收这个hit广播呢?
第五步:我们为自己控制的小马(本例中蓝色小马)编写脚本。
![]()
给小马设定一个初始位置x和y,统一在起跑线位置出发。
![]()
重复执行什么?我们这匹自己控制的小马身上肩负的使命可不少啊!首先,按下右键,他可以移动;其次,按下A或B键, 他可以跳跃;然后,如果他第一个冲到终点,游戏胜利!不是第一个冲到终点,游戏失败! 还有,碰到蓝色线条游戏失败!肩负着这么多使命(判断),头脑中的脚本就成型了。
右键移动:
![]()
这步想明白了么?
![]()
终点胜利:这步你好好想想!为啥自己控制的小马到了终点就胜利呢?
![]()
A或B键跳跃:
![]()
![]()
A或B键跳跃的脚本我实现的比较笨,你自己想想有没有更好的跳跃方式,可以越过蓝色线条!
碰到蓝色线条失败:
![]()
或自己控制的小马脚本到这还么有结束,为啥?刚才我问了一个问题,为什么其他陪跑的小马碰到终点线要判断一下自己是不 是第一个过线的,那么自己控制的小马为什么不需要判断直接就认定游戏胜利呢? 原因是,那个hit的广播其实就是广播给自己控制的小马的!
![]()
这下明白了吧!
第六步:把陪跑小马的脚本依次复制给角色2、4、5、6,别忘了改一下x和y的值!这是是否细心的问题,当然,如果没改出了错,你肯定也知道哪儿错了!
第七步:别忘了我们的场景哟!
![]()
第八步:运行一下你的程序,看看有没有什么bug。
课后反思:¶ (1)如果一开始我不指定哪匹小马是我控制的,我在游戏中随机选择一个小马进行比赛,这个怎么实现?
(2)无论游戏胜利和失败,我想让主持人出来说胜利或失败,这个怎么实现?
第八课 深海大战¶
今日任务:¶ 设计一款深海大战游戏,用Xtron按键左右控制一艘海面上的战舰,A或B键向下发射子弹,在海面下有虎视眈眈的潜艇,他们 可以向你发射子弹,还有无辜的潜水爱好者,甚至还有幽灵般出现的深水炸弹,你要尽可能多的击中潜艇,同时要避免杀害无 辜的潜水者。 同时,深水炸弹是一把双刃剑,你击中了炸弹,他可以帮助你消灭掉周围的潜艇,同时也会对你和潜水者造成同样的破坏性伤 害!
任务拆解:¶ 程序分析:¶ (1)背景:可分为正常背景和失败背景,云彩飘过效果(角色设计)。
(2)战舰:按键控制战舰的左右移动,按下A或B键可以发射一枚炮弹,炮弹的运动方向是从战舰中心处开始向下运动,那么,这里要强调一下,炮弹没有击中任何目标,碰到了海底(边缘)怎么办?
(3)潜水艇:随机从左右两侧出现,并分别向左右移动,那么,潜潜水艇碰到边缘如何?潜水艇被炮弹击中如何?潜水艇被鱼类击中如何?
(4)潜水员:随机从左右两侧出现,并向左或右移动,那么,潜水员碰到边缘如何?潜水员被炮弹击中如何?潜水员被鱼类击中如何?
(5)鱼雷:随机在海底出现(不能出现在空中),鱼雷被炮弹击中又如何?
动手操作:¶ 第一步:场景分析,场景具备的功能是正常显示游戏界面和游戏失败后显示“game over!”
![]()
![]()
场景一和场景二已经制作完毕,那么接下来就是场景上的云彩飘动效果了:
![]()
我自己画了三个云彩角色,大家可以自己设计云彩的形状,绘制好之后,就是最重要的脚本环节了: 我仅以cloud1角色为例:
![]()
剩下的cloud2和cloud3请大家自行制作吧!
第二步:主角战舰出场。
![]()
下面我们来分析一下战舰的脚本:
![]()
我们连同战舰发射的炮弹脚本在此一并解决吧!
![]()
![]()
![]()
第三步:潜水艇出场。
![]()
潜水艇的程序很冗长,一段完整的程序我截取了两部分, 下面连续两张图都是潜水艇的程序,我在此仅以潜水艇1为例讲解,潜水艇2的程序请自行编写,基本雷同!
![]()
![]()
潜水艇2的脚本程序请大家自行编写吧! 连同潜水艇发射的炮弹我们在此一并解决吧!
![]()
潜水艇发射的炮弹的脚本:
![]()
艇我在这个程序中设计了两个潜水艇炮弹,但是scratch3.0版本里面有个克隆自己的功能,你可以试试能否通过克隆的方式克隆一个炮弹出来!另一个炮弹的程序请大家自行完成吧,在此不再赘述了!
第四步:鱼雷出场。
![]()
鱼雷的脚本分析如下:
![]()
第五步:潜水员出场。
![]()
我们接下来分析潜水员的脚本,其实潜水员的脚本和刚刚介绍过的某个角色的脚本基本一样, 我估计大家都能猜出来了对吧?那么我就展示一下潜水员和潜水艇不一样的地方好了!
![]()
课后思考:¶ (1)增加计时器提升难度?
(2)设计第2、3、4……关,如何体现难度升级?
(3)没有设计如何加分的功能,思考一下!
(4)能否为战舰设计两种以上的炮弹增加攻击威力?
第九课 智能小车巡线¶
今日任务:¶ 设计一个可以按照指定路线行走的小车,我们之前见过的类似巡线小车多出自于lego等机器人小车,其实你有所不知,在scratch中实现小车巡线更加简单,效果也更加直观! 我们一起试一试吧!
任务拆解:¶ 程序分析:¶ (1)背景:绘制清晰的巡线背景;
(2)小车:绘制小车,头部侦测区域可用不同颜色区分。
课后思考:¶ (1)试着改变不同的旋转角度和步数,看看是否会运行出错?
(2)自己添加起点和终点。
(3)有没有更快速的侦测方法可以让小车快速到达终点,和同学们一起实验一下不同的算法,比一下谁到达终点所用时间更少?
第十课 坦克大战¶
今日任务:¶ 将经典游戏《坦克大战》还原于scratch程序中,让学生体验真实游戏的设计流程和思路。
(1)玩家可以操控一辆己方坦克进行上下左右移动,在移动过程中,坦克会被障碍物阻挡无法逾越,必须绕道,玩家可以按下A或B键发射子弹,为了避免子弹的连发,程序中添加了防止连发的指令;当玩家的子弹击中障碍物,障碍物会短暂消失,然后还会再度出现,同时,当子弹击中了地方坦克,地方坦克会消失,一会儿还会随机出现。
(2)地方坦克会在第三个不同的位置随机出现,并且可以边移动边发射子弹,敌方子弹击中障碍物会击毁障碍物,同时,敌方坦克击中castle或者击中己方坦克,游戏gameover!
本课重难点:¶ 任务拆解:¶ 程序分析:¶ (1)背景:可分为正常背景和失败背景;
(2)己方坦克:Xtron的上下左右键控制坦克的移动;A或B键控制坦克发射子弹;发射子弹的瞬间判断坦克的朝向,可以实现向四个不同的方向发射子弹;被障碍物阻挡做出反应;
(3)敌方坦克:在屏幕指定位置出现;在屏幕上移动,移动过程中碰到障碍物和边缘做出反应;可以向四个不同的方向发射子弹;
(4)障碍物:被击中后一段时间内消失不再出现;阻挡坦克。
动手操作:¶ 第一步:搞定背景,共两个背景1和2;1为白色背景,2为game over背景!
![]()
第二步:搞定己方坦克(Sprite1)。
![]()
首先完成Sprite1的绘制工作:
![]()
然后搞定Sprite1的脚本:
(1)控制己方坦克上下左右移动的脚本,不解释。
![]()
(2)向不同方向开火的脚本的解决方案。
![]()
(3)在移动中碰到障碍物或者被敌方坦克子弹击中的解决方案。
![]()
第三步:己方坦克(Sprite1)发射子弹解决方案。
![]()
![]()
![]()
![]()
第四步:障碍物解决方案。
![]()
![]()
第五步:敌方坦克解决方案。
![]()
![]()
第六步:己方坦克子弹解决方案。
![]()
![]()
![]()
第七步:castle“老巢”解决方案。
![]()
![]()
学案中没有列举出更多的程序,比如另外两个敌方坦克、敌方坦克子弹和其他障碍物的脚本,大同小异,请自行设计!
课后反思:¶ (1)该游戏中没有设置胜利的条件,思考一下?
(2)如何实现坦克朝着castle的方向移动攻击,而不是漫无目的的闲逛?
(3)作为一个游戏来说,没有添加计时器和积分变量显然是不合适的,自行添加吧!
第十一课 下100层地狱¶
今日任务:¶ 将网络上一款同名游戏尝试在scratch中制作出来,用Xtron的上下左右键控制一个主角(可以滚动的球)左右移动,小球自由 落地式下降,木板向上的移动速度也会越来越快!这些都意味着游戏的进行会越来越难,屏幕上有记录“层数”和“速度”的提示 框,同时还会显示小球的瞬时速度、自由落体时间、快制作出来试试看你可以下到多少层?
本课重难点:¶ 任务拆解:¶ 程序分析:¶ 动手操作:¶ 第一步:搞定背景!
![]()
背景脚本:
开始显示初始背景:
![]()
游戏失败显示失败背景:
![]()
第二步:搞定主角“小球”!
![]()
小球的脚本:
在讲解小球的脚本及后续其他角色的脚本之前,先来理一下我的程序中有多少角色即将出场。
![]()
一目了然,不用过多解释了吧?小球,之后是四个下方随机出现的木板(block1/2/3/4)!好,我们继续讲小球的脚本程序: 旋转+移动=滚动!
![]()
![]()
接下来,下面这些模块判断些什么呢?
![]()
![]()
继续向下看:
判断一:
![]()
判断二:
![]()
第三步:搞定木板(以其中block2为例讲解,其余的自行设计就OK了,看懂一个就行了)
![]()
木板脚本:
前面留了一个问题,速度增加其实就是一个变量,为了增加游戏难度设定的变量,目的是让木板的移动速度越来越快!
![]()
下面这些模块判断些什么呢?
![]()
![]()
判断一:
![]()
判断二:
![]()
第四步: 请各位自行完成其他几个木板角色的设计吧!
课后反思:¶ (1)本程序有个问题,也是从大鱼吃小鱼开始我一直没有完美解决的问题,小球碰到木板加一层分数,但是小球只要和木板有接触,就会不停的加分,这个问题我只能退而求其次在程序中放到了木板消失加分!大家看看有没有好的解决方法!
(2)小球碰到了左右边缘也会game over,思考一下这个问题如何解决?
(3)专业一点的书籍上有关于g和scratch步长的换算,感兴趣的亲们自行研究一下!
Xtron Python 指南¶
开始编程前,首先需要导入必要的库:
from microbit import *
from ovobot import *
以下是使用python给Xtron三合一掌机编程的快速参考,如果你是第一次给Xtron掌机编程请先阅读接下来的部分:
灯光¶
-
pyb.ledx.
action
()¶ Xtron板载上有2个LED灯,分别为led1、led2,可以分别控制两个灯的点亮和熄灭 这两个LED灯还用来作为状态的指示灯,比如充电时led1亮红灯,下载代码时led1闪红灯,开机时led2亮蓝灯后熄灭。
- 参数
ledx (int) – x可以为1或2,分别用来选择控制led1或者led2点亮和熄灭。
action (int) – off:熄灭,on:点亮。
例子:
import pyb
import time
pyb.led_1.on()
time.sleep(0.5)
pyb.led_1.off()
time.sleep(0.5)
pyb.led_2.on()
解析:当xtron启动时,点亮板载上的led1灯,等待0.5秒后,熄灭板载上的led1灯,再等待0.5秒后,点亮板载上的led2灯。
-
pyb.ledx.
toggle
()¶ 电平反转就是数字电路的某个端口(输入或者输出)的状态从一个状态转换到另一个状态,如从“1”变化到“0”, 数字电路的状态转换时间非常短,理想认为转换时间为0,这个变化过程就叫电平转换。 即Xtron的led灯从点亮变为熄灭,或者从熄灭变为点亮。 板载上有两个led灯,分别为led1、led2,可以分别控制两个led灯进行电平反转。
- 参数
ledx (int) – x可以为1或2,分别用来选择控制led1或者led2电平反转。
例子:
import pyb
import time
pyb.led_1.on()
time.sleep(2)
pyb.led_1.toggle()
解析:当xtron启动时,点亮板载上的led1灯,等待2秒后,熄灭板载上的led1灯电平反转,即Xtron的led1灯从点亮变为熄灭。
-
pyb.ledx.
intensity
(value)¶ 设置Xtron板载的led灯的亮度,数值范围为0~255。 在点亮LED之后再设置亮度才生效,而且只调节前面程序里已经点亮的LED灯的亮度值。
- 参数
ledx (int) – x可以为1或2,分别用来选择控制led1或者led2的亮度。
value (int) – 设置板载上对应led的亮度,数值范围为0~255,数值越大,对应的光亮度越高。
例子:
from button import Button
import pyb
def xtron_button_a_pressed(pin):
pyb.led_2.on()
pyb.led_2.intensity(255)
button_a = Button('A',callback=xtron_button_a_pressed)
解析:当xtron的A键被按下时,点亮板载上的led2灯,并且调节灯光亮度至255,led的亮度,数值范围为0~255。
-
setrgbhexcolor
(rgbledIndex, color)¶ Xtron上有4个RGB彩灯,可以分别设置不同的颜色,通过颜色、饱和度、亮度来调节颜色,数值范围均为0~100。 点击颜色下方的【滴管图标】还可以从已有的角色中一键获取角色上的任意颜色。
- 参数
rgbledIndex (int) – 选择控制板载上彩色灯,从左往右依次为1-2-3-4。
color (int) – 设置颜色值,例如”#ff0000”代表红色,”#000000”代表黑色.
例子:
import pyb
from neopixel import *
setrgbhexcolor(1,'#1dc83a')
setrgbhexcolor(2,'#000000')
setrgbhexcolor(3,'#ff0000')
setrgbhexcolor(4,'#ffffff')
解析:Xtron上有4个RGB彩灯,可以分别设置不同的颜色。 当xtron启动时,板载上的RGB灯被点亮,颜色分别为绿色、黑色、红色、白色。
-
setAllcolor
(color)¶ Xtron上有4个RGB彩灯,可以分别设置不同的颜色,通过颜色、饱和度、亮度来调节颜色,数值范围均为0~100。 同样的,还可以从选择的角色中一键吸取已有的颜色。 和上面的程序块的区别是,上面的是单独设置某一个RGB灯,这个程序块则是同时设置所有的RGB灯。
- 参数
color (int) – 选择控制板载上所有led彩灯的颜色。
例子:
import pyb
from neopixel import *
import time
setrgbhexcolor(1,'#1dc83a')
setrgbhexcolor(2,'#000000')
setrgbhexcolor(3,'#ff0000')
setrgbhexcolor(4,'#ffffff')
time.sleep(3)
setAllcolor('#e244d1')
解析:Xtron上有4个RGB彩灯,可以分别设置不同的颜色。当xtron启动时,板载上的RGB彩灯被点亮, 颜色分别为绿色、黑色、红色、白色。等待3秒后,板载上的4个RGB彩灯颜色全部变为紫色。
-
setbrightness
(value)¶ 用来设置Xtron板载的RGB灯的亮度。 设置亮度值之后,再设置RGB灯的颜色,亮度值才生效。 如果你想改变亮度值的话,你需要设置亮度值之后,再次设置一下对应的RGB灯颜色。
- 参数
value (int) – 设置Xtron板载的RGB彩灯的亮度。
例子:
import pyb
from neopixel import *
setbrightness(0.5)
setrgbhexcolor(1,'#1dc83a')
setrgbhexcolor(2,'#000000')
setrgbhexcolor(3,'#ff0000')
setrgbhexcolor(4,'#ffffff')
解析:设置Xtron板载的RGB彩灯的亮度,只有先设置好亮度值,再设置RGB彩灯的颜色,亮度值才生效。 当xtron启动时,板载上的RGB彩灯被点亮,颜色分别为绿色、黑色、红色、白色。
-
colour_rgb
(red, green, blue)¶ 颜色值动态设置,分别设置red红色、green绿色、blue蓝色的数值,数值范围为0~255。
- 参数
red green blue (int) – 设置板载上对应RGB彩灯的数值,数值范围为0~255。
显示¶
-
lcd.
clearScreen
()¶ 用来清空LCD屏幕上之前显示的所有内容。在同一个位置显示不同的内容,如果不清空,会和之后显示的内容重叠。
例子:
import pyb
import lcd
import time
lcd.drawText(2,2,'Hello',2)
time.sleep(0.5)
lcd.clearScreen()
lcd.drawText(2,2,'Friend',2)
time.sleep(0.5)
lcd.clearScreen()
解析:当xtron启动时,在坐标轴(x=2,y=2)处,显示文本内容:”Hello”,颜色为红色。 等待0.5秒后,清空这个文本,然后在相同位置显示下一文本内容:”Friend”,颜色同样为红色。再等待0.5秒后,清空这个文本。
-
lcd.
setBgColor
(colorIndex)¶ 该积木块可以设置屏幕的背景色,一共有16个颜色可以选择,其中第一个颜色是透明色。
- 参数
colorIndex (int) – 设置屏幕的背景色,一共有16个颜色可以选择,其中第一个颜色是透明色。。
-
lcd.
show
()¶ 在设置好屏幕背景以及屏幕显示内容后,加上显示生效积木块,屏幕上才会显示我们设置好的背景及内容。
-
lcd.
drawText
(x, y, string, colorIndex)¶ 把文本内容显示在某个坐标(x,y)处。 文本内容可以是字母、数字,暂时不支持中文显示。 坐标的范围是X:0~160, Y: 0~128 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 通过x轴和y轴的距离,将文本显示在特定的坐标(x,y)上,坐标的范围是X:0~160, Y: 0~128。
string (int) – 文本内容可以是字母、数字,暂时不支持中文显示。
colorIndex (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
drawHline
(x, y, len, color)¶ 绘制线一条水平的线段,在某个坐标(x,y)绘制一条水平的线段,线的长度≤显示屏的长度。 坐标的范围是X:0~160, Y: 0~128,线段长度+ X的坐标<160,否则线段显示不完整。 所有绘制的图案,都要加上显示生效积木块,才会在屏幕上显示出来。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)绘制一条水平的线段,坐标的范围是X:0~160, Y: 0~128。
len (int) – 线的长度≤显示屏的长度。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
drawVline
(x, y, len, color)¶ 绘制线一条垂直的线段,在某个坐标(x,y)绘制一条垂直的线段,线的长度≤显示屏的长度。 坐标的范围是X:0~160, Y: 0~128,线段长度+ Y的坐标<128,否则线段显示不完整。 所有绘制的图案,都要加上显示生效积木块,才会在屏幕上显示出来。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)绘制一条垂直的线段,坐标的范围是X:0~160, Y: 0~128。
len (int) – 线的长度≤显示屏的长度。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
drawLine
(x1, y1, x2, y2, color)¶ 绘制一条线段,绘制一条从一个坐标(x1,y1)到另一个坐标(x2,y2)的线段。 坐标的范围是X:0~160, Y: 0~128 和上一个积木块的区别是,这个积木块绘制的线段是任意的方向,上一个只能是水平或者垂直方向。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x1 y1 x2 y2 (int) – 确定坐标1(x1,y1)和坐标2(x2,y2)的位置,坐标的范围是X:0~160, Y: 0~128。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
drawRect
(x, y, width, height, color)¶ 绘制一个空心矩形,在某个坐标(x,y)处绘制一个矩形,通过设置矩形的宽和高来设置矩形的大小。 坐标的范围是X:0~160, Y: 0~128。 如果坐标值加上矩形大小,超过了显示范围,会显示不完整。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)处绘制一个空心矩形,坐标的范围是X:0~160, Y: 0~128,如果坐标值加上矩形大小,超过了显示范围,会显示不完整。
width (int) – 设置空心矩形的宽。
height (int) – 设置空心矩形的高。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
fillRect
(x, y, width, height, color)¶ 绘制一个实心矩形,在某个坐标(x,y)处绘制一个实心矩形,通过设置矩形的宽和高来设置矩形的大小。 坐标的范围是X:0~160, Y: 0~128。 如果坐标值加上矩形大小,超过了显示范围,会显示不完整。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)处绘制一个实心矩形,坐标的范围是X:0~160, Y: 0~128,如果坐标值加上矩形大小,超过了显示范围,会显示不完整。
width (int) – 设置实心矩形的宽。
height (int) – 设置实心矩形的高。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
circle
(x, y, radius, color)¶ 绘制一个空心圆形,在某个坐标(x,y)绘制一个空心圆形,通过设置圆的半径来改变圆的大小。 坐标的范围是X:0~160, Y: 0~128 如果坐标值加上圆形大小,超过了显示范围,会显示不完整。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)绘制一个空心圆形,通过设置圆的半径来改变圆的大小。坐标的范围是X:0~160, Y: 0~128。
radius (int) – 确定好空心圆的圆心(x,y)后,通过设置圆的半径来改变圆的大小。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
fill_circle
(x, y, radius, color)¶ 绘制一个实心圆形,在某个坐标(x,y)绘制一个实心圆形,通过设置圆的半径来改变圆的大小。 坐标的范围是X:0~160, Y: 0~128 如果坐标值加上圆形大小,超过了显示范围,会显示不完整。 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x y (int) – 在某个坐标(x,y)绘制一个实心圆形,通过设置圆的半径来改变圆的大小。坐标的范围是X:0~160, Y: 0~128。
radius (int) – 确定好实心圆的圆心(x,y)后,通过设置圆的半径来改变圆的大小。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
triangle
(x1, y1, x2, y2, x3, y3,color)¶ 绘制一个空心三角形,通过设置三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)来绘制一个空心三角形。 设置三角形三个点的坐标,如果坐标值加上三角形大小,超过了显示范围,会显示不完整。 坐标的范围是X:0~160, Y: 0~128 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x1 y1 x2 y2 x3 y3 (int) – 通过设置三角形三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)来绘制一个空心三角形。坐标的范围是X:0~160, Y: 0~128。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
lcd.
fill_triangle
(x1, y1, x2, y2, x3, y3,color)¶ 绘制一个实心三角形,通过设置三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)来绘制一个实心三角形。 设置三角形三个点的坐标,如果坐标值加上三角形大小,超过了显示范围,会显示不完整。 坐标的范围是X:0~160, Y: 0~128 文本内容有16个颜色可选,其中第一个颜色是透明色。
- 参数
x1 y1 x2 y2 x3 y3 (int) – 通过设置三角形三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)来绘制一个实心三角形。坐标的范围是X:0~160, Y: 0~128。
color (int) – 文本内容有16个颜色可选,其中第一个颜色是透明色。
-
(colour_rgb(value, value, value)
用来设置RGB的颜色,在设置屏幕颜色或者画笔颜色的时候,可以用指定的RGB的值来设置颜色。 红绿蓝三种颜色的数值范围分别为0~255。 比如红色有很多种:粉红(255,192,203),深红(220,20,60),淡紫红(255,240,245),弱紫罗兰红(219,112,147), 深粉红(255,20,147)等,我们通过设置不同的RGB值就可以精确的显示不同的颜色。
- 参数
value (int) – 红绿蓝三种颜色的数值范围分别为0~255。
声音¶
-
music.
pitch
(频率,持续时间= -1,pin = microbit.pin0,wait = True)¶ 该积木块可以播放音符,音符以及节拍长度可以在下拉框里选择。 点击音符,显示的是中央C的音调,可以用左右两边的箭头来切换高低音,左边是低音,右边是高音。 详情请参考:https://microbit-micropython.readthedocs.io/en/latest/music.html
C调中,C、D、E、F、G、A、B分别对应简谱中的1、2、3、4、5、6、7,一个唱名为四分音符持续1个节拍,下方有一个横杠的是八分音符持续1/2节拍, 音符后有一个横杠的为二分音符持续2个节拍,同学们按照音符和节拍数编写整段音乐。
- 参数
note (int) – 默认选择播放的音符为0,即代表暂停播放。
beat (int) – 音符播放的节拍数,节拍数为500的倍数,倍数范围为1/16~4。
例子:
from microbit import *
import music
music.pitch(262 , 500 , pin=pin0 , wait=True)
music.pitch(330 , 1000 , pin=pin0 , wait=True)
解析:当绿旗被点击时,播放C音符持续一个节拍,然后播放E音符持续一个节拍。
-
music.
stop
(pin = microbit.pin0)¶ 在给定的引脚上停止所有音乐播放,例如:music.stop(pin1)。 如果没有给出引脚,例如:music.stop()假设为pin0。
- 参数
note (int) – 默认选择播放的音符为0,即代表暂停播放。
beat (int) – 音符播放的节拍数,节拍数为500的倍数,倍数范围为1/16~4。
-
music.
stopPlay
()¶ 停止播放所有声音。
事件¶
-
import pyb
-
pass
()¶ 当启动Xtron三合一掌机时,执行此模块下方的程序。
例子:
import pyb
import music
music.pitch(262 , 500 , pin=pin0 , wait=True)
解析:当启动Xtron三合一掌机时,播放C音符持续一个节拍。
-
from button import Button
-
def xtron_button_x_pressed(pin):
-
pass
() -
button_x = Button('ID',callback=xtron_button_x_pressed)
选择xtron按键触发事件的回调函数。当对应Xtron的按钮被按下时,执行此模块下方的程序。
- 参数
x (int) – 按钮回调事件,返回按键事件实例,x包括”a”A键,”b”B键,”up”方向键上,”down”方向键下, “left”方向键左,”right”方向键右,”menue”菜单键。
ID (int) – 注册回调事件,ID为按钮唯一标识符,ID包括”a”A键,”b”B键,”up”方向键上,”down”方向键下, “left”方向键左,”right”方向键右,”menue”菜单键。
控制¶
-
import time
-
time.
sleep
(n)¶ 等待n秒后执行其下方的程序,n可以是整数或浮点数。
- 参数
n (int) – 控制xtron执行的指令停止执行指定的时间(秒)。
-
for count in range(n):
重复执行其内部程序n次,n只能是整数。
- 参数
n (int) – 控制xtron重复执行其内部程序n次。
-
while True:
重复执行程序块内部包含的程序。
-
if False:
当下面的程序条件满足时,执行程序块内部的程序。
-
if False:
-
pass
() -
else:
当下面的程序条件满足时,执行那么内部的程序,不满足时执行否则内部的程序。
-
while not False:
等待直到条件为真时才继续执行接下来的程序。
-
while not False:
重复执行其内部的程序,直到下面的程序条件满足时,才执行程序下方的程序。
BitCon简介¶
BitCon Scratch 指南¶
以下是使用Scratch给BitCon编程的快速参考, 大多数的积木块功能根据文字描述就可以了解。
对积木块参数范围,或者是使用方法不确定的,你可以根据下面对积木块的介绍以及简单的例子来深入的理解。
基础积木块编程指南¶
遥控器¶
摇杆程序块¶

选择摇杆LX、LY、RX、RY,L、R代表左右方向。 BitCon是一款智能编程手柄,基于micro:bit,配置了6个可编程按键、2个全向摇杆、加速度传感器和电子罗盘, 并拥有一个5x5点阵显示屏,可以显示图案、数字和字符等。 BitCon有蓝牙和2.4G两种无线通信方式,可以使用摇杆、 按键和重力感应来控制另外一块micro:bit主板或者Ovobot Bit机器人。
判断按键程序块¶

BitCon有6个可编程按键,分别为绿色、蓝色、红色、黄色、左上方、右上方按键, 当按键被按下时,可以控制另外一块micro:bit主板或者Ovobot Bit机器人。 也可以连接到电脑,可以使用Ovoblock进行编程来与动画或者游戏角色互动, 还可以与Scratch互动,编写一个Scratch游戏,使用BitCon来闯关。
外观¶
声音¶
播放音符程序块¶

Ovoblock的程序块是使用五线谱的音名来显示的,在C调的乐谱中,它们之间的对应关系如下。

C调中,C、D、E、F、G、A、B分别对应简谱中的1、2、3、4、5、6、7,一个唱名为四分音符持续1个节拍,下方有一个横杠的是八分音符持续1/2节拍, 音符后有一个横杠的为二分音符持续2个节拍。