教师出题指南(图形化编程)
本篇面向教师与教研,讲清楚怎么为图形化编程题配置测试点。内容按「先做什么 → 怎么选检查方式 → 常见题型怎么做 → 常见错误」的顺序组织,照着做即可。
一、出题前的准备
- 创建题目时,把语言分类选为图形化编程(Scratch)、题型选为图形化编程题。只有这类题目才能配置测试点。
- 进入题目编辑页的「测试点」区域进行配置(机构出题表单用的是同一套编辑器组件)。
- 每个测试点需要填写:
| 字段 | 说明 |
|---|---|
| 用例名称 | 给自己看的说明,如「使用循环积木」 |
| 用例类型 | 公开示例(学生可见)/ 隐藏判题 |
| 检查类型 | 静态规则(看作品结构)/ 运行时断言(看运行结果) |
| 分值 | 该测试点通过后获得的分值 |
| 超时(ms) | 运行时断言的运行上限,留空表示默认 15000 毫秒 |
| 启用 | 只有「启用」的测试点参与判题 |
提示:未配置任何启用测试点的题目,学生提交时无法判题。出题完成后建议自己按学生方式提交一次,确认能正常判分。
二、两种检查类型怎么选
静态规则:检查「作品结构」
静态规则不运行程序,只检查工程里有哪些积木、角色、变量、广播。适合提出「必须用到某类积木」「禁止使用某积木」「必须有 N 个角色」这类硬性结构要求。
| 想检查什么 | 用哪一项(界面上的中文名) |
|---|---|
| 必须用到某类积木 | 必须出现的积木 |
| 不许使用某积木 | 禁止出现的积木 |
| 某积木至少出现几次 | 积木最少数量 |
| 必须有某个事件积木(如「当绿旗被点击」) | 必须存在的事件积木 |
| 至少要有几个角色 | 最少角色数 |
| 必须有 / 禁止某个角色名 | 必须出现的角色名 / 禁止出现的角色名 |
| 必须有 / 禁止某个造型名 | 必须出现的造型名 / 禁止出现的造型名 |
| 必须有 / 禁止某个背景名 | 必须出现的背景名 / 禁止出现的背景名 |
| 必须有 / 禁止某个声音名 | 必须出现的声音名 / 禁止出现的声音名 |
| 必须定义了某变量 | 必须定义的变量 |
| 必须出现了某广播消息 | 必须出现的广播消息 |
| 必须使用克隆 | 必须使用克隆 |
- 可以先用「作用范围」限定检查的是全部角色、仅舞台,还是某个指定角色。
- 静态规则至少要配置一条有效条件,否则无法保存。
运行时断言:检查「运行结果」
运行时断言会真正运行作品,在运行过程中或结束后读取状态。适合检查作品「做出来对不对」。
界面里可选的断言(按分组):
| 分组 | 可选断言 |
|---|---|
| 常用 | 变量、坐标、克隆体数量、广播已发送、说话内容、思考气泡、列表(含「是否包含某元素」「某元素的位置」) |
| 舞台视觉 / 交互 | 背景、造型、造型切换序列、背景切换序列、大小、方向、显示/隐藏、旋转方式、图形特效、图层、角色是否存在、鼠标状态、按键状态、计时器、到角色(或鼠标指针)的距离、音量、播放音效次数、画笔笔迹、积木执行次数、舞台像素颜色、涂色覆盖率 |
| 碰撞 / 克隆体 | 碰到(碰撞,含碰到颜色)、克隆体属性 |
提示:把「必须用到某积木」这类结构要求交给静态规则,把「算得对不对、动得对不对」交给运行时断言,可以让判分更稳定,也更容易向学生解释。
三、让检查「先后有序」:分阶段检查
很多作品是「先问后答」「先按键后反应」——只看最终结果,容易被「点绿旗就把答案一次性说完 / 直接给出终态」的写法绕过。这时请勾选分阶段检查(高级)。
- 每个阶段:先执行本阶段的「步骤」,再校验本阶段的「断言」;任一阶段不通过,该测试点即不通过(不必跑完后面的阶段)。
- 最多 10 个阶段,每阶段至少 1 条断言;阶段的上下顺序就是执行顺序。
- 断言可以完全没有、也可以只有「步骤」,但每阶段必须至少有一条断言。
一个「先问后答」的例子(下面用文字描述,界面上分三步配置):
- 阶段 1:不设步骤;断言「角色还没说话」「得分变量 = 0」。—— 这是基线断言,堵住「一开局就给出终态」的写法。
- 阶段 2:步骤「回填答案 30」「等待 600 毫秒」;断言「得分 = 1」「『询问…并等待』积木至少执行 1 次」。
- 阶段 3:步骤「等待 1500 毫秒」;断言「得分 = 2」。
提示:答案是按询问出现的顺序依次回填的,答案队列在整个测试点内共享、跨阶段不会重置。所以阶段 2 回过答案后,阶段 3 不必再给。另外,程序一旦进入「询问并等待」,作品里显示问题的说话气泡会在作答后被清空,因此「询问 + 说话」组合的说话断言请放在作答之后。
四、在「某个时刻」检查状态(过程性检查)
断言可以填一个时间点(毫秒),含义是「作品运行到这一刻时的状态」,用来检查过程而不只是终态。
- 时间点按作品运行的工程时间计算(是作品内部的时间,不是你等了多少秒)。
- 采样以约 100 毫秒为一段对齐,所以与设定值存在不到 100 毫秒的偏差。
- 时间点不能超过你在该测试点里推进的总运行时长,否则这一项会被判为配置有误。
- 例:要求火箭「逐步上升」——在时间点 1000 毫秒时,y 坐标应在 0~100 之间;在时间点 3000 毫秒时,y 坐标应大于 120。两个时间点一起用,就能堵住「瞬间跳到终点」的实现。
提示:不确定作品用时、或作品实现方式多样时,不要卡精确时间点。改用「终态断言」,或「等待某条件成立」的步骤(可设超时)会更稳。
五、随机题怎么做(随机种子 + 答案模板)
随机出题时(例如程序随机出「被减数 − 减数」),判题无法预先知道题目给出的数字,需要两步:
- 填随机种子(一个整数):让作品里的「随机数」可复现,保证每次判分稳定。
- 用答案模板占位回答:写成
{{被减数-减数}}表示「填入当轮的正确答案」。判题会在每次询问真正发生时,按当时的变量值算出答案再回填,因此逐轮不同。
答案模板支持的写法:
| 写法 | 含义 |
|---|---|
{{变量名}} |
取该变量的当前值(要能当成数字) |
{{变量名 运算符 变量名}} |
两个变量做一次四则运算 |
{{变量名 运算符 数字}} |
变量与数字 |
{{数字 运算符 变量名}} |
数字与变量 |
- 运算符只能是
+ - * /中的一个;不支持括号、函数,也不支持a-b-c这样的连续运算。 - 不含
{{ }}的答案会按原样使用(普通题目照常填固定答案即可)。
以下情况会让该测试点被判为运行错误(属于配置问题,不是学生答错):引用的变量名写错或不存在、变量值不是数字、出现除以 0、模板写成多个运算符。
提示:只有作品真的用了「随机数」积木时,随机种子才有意义;固定题目填了种子也不会「随机」。
怎么判断作品是不是「真的随机」
只跑一次的话,把结果写死成一个固定值也会通过。要识别这种「假随机」,请配置多轮随机种子:给出若干个整数种子,判题会每个种子各完整运行一次作品,然后按「跨轮去重计数」检查——多次运行的结果去重后有多少种。
- 例:要求「4 个克隆体每次落在互不相同的位置」——填 5 个种子,给「克隆体属性(位置)」这条断言勾选跨轮去重计数、期望值填 3。真实随机的实现多次运行去重后会有好几种,能通过;把位置写死的实现去重后只有 1 种,会被判不通过。
- 「跨轮去重计数」只能用在能观测到结果的地方:变量、列表、造型、坐标、克隆体属性(位置 / 造型 / 大小 / 方向)。
- 勾选后,期望值填整数(即「去重后至少要有几种不同结果」),比较方式用 等于 / 大于等于 等,默认是「大于等于」。
- 多轮随机种子与上面的单个随机种子不能同时配置,请二选一。
六、画面类题目怎么做(像素颜色 / 涂色覆盖率)
两类画面断言:
| 断言 | 检查什么 |
|---|---|
| 舞台像素颜色 | 画面上某个点的颜色是否符合要求(可设颜色容差) |
| 涂色覆盖率 | 某块区域内目标颜色占了多大比例(可指定区域,默认整个舞台) |
- 颜色写法:
#ff0000或255,0,0。 - 覆盖率是 0~1 的比值:0.5 表示一半。
- 适合画笔涂色、图章、背景/角色覆盖等画面类任务。
因为是「近似判断」,请给宽松阈值:
- 颜色容差不要小于 16(更小的值在覆盖率判断上与 0 没有区别)。
- 覆盖率用「不小于 / 不大于 / 区间」表达,例如「红色覆盖不少于 0.1」或「介于 0.4~0.6」,不要写「精确等于 0.5」。
提示:画面类检查读的是所有角色、画笔、背景叠加后的最终画面,所以不要指定「哪个角色」;它也不区分是谁画上去的。
七、画笔参数、声音与前后层次类题目怎么做
画笔参数类题目(画笔颜色 / 画笔粗细)
以「设置画笔粗细为 3、颜色为红色」为例,用「画笔笔迹」断言里的两个检查项分别配置:
| 检查项 | 怎么填 | 说明 |
|---|---|---|
| 画笔颜色 | 填期望颜色,如 #ff0000 或 255,0,0 |
颜色在内部换算时有极小误差,建议保留默认的颜色容差,不要改成 0 |
| 画笔粗细 | 填期望数值,如 3 | 作品里「设为 0」会被当成 1,期望值写 0 永远不会通过 |
- 颜色不要求「零误差」:Scratch 设置画笔颜色时会做一次内部换算,结果可能有极小的偏差(例如设置
#4c97ff,实际读到的可能是#4c96ff)。编辑器默认已经留了 1 的容差,正确作品不会被误判,通常不用改;只有确实要求严格相等时,才把颜色容差调成 0。 - 粗细别写 0:画笔粗细的可用范围是 1~1200;作品里写「将画笔粗细设为 0」,实际会被当成 1。所以期望值应填 1(或 1~1200 内的其它值),不能填 0。
- 别忘了「画笔是否落笔」——没落笔就画不出笔迹。
提示:「画笔颜色」「画笔粗细」「画笔是否落笔」都属于「画笔笔迹」断言,按题目真正要考的点选用即可,不必每项都配。
多段颜色类题目(画笔用过几种颜色 / 颜色的先后顺序)
「画笔笔迹」断言里还有两个与多段颜色有关的检查项:
| 检查项 | 检查什么 | 怎么填 |
|---|---|---|
| 画笔颜色种类数 | 作品这次运行中,画笔总共用过几种不同的颜色 | 填期望的整数,如 6;比较用 等于 / 大于等于 等 |
| 画笔颜色序列 | 按时间顺序,画笔的颜色里是否依次出现过给定的几种颜色 | 按先后顺序每行填一个颜色,如先红、再黄、再绿 |
- 「颜色序列」只要求依次出现:红→黄→绿之间夹着别的颜色也算通过;但顺序颠倒(黄→红)不算。
- 颜色写法同前:
#ff0000或255,0,0。 - 这两个检查项用的是较宽松的颜色容差(默认 16):同一种颜色的细微差别不会被算成两种颜色。只有确实要求逐色严格相等时,才把容差改成 0(与「画笔颜色」默认容差为 1 不同)。
- 这两项不需要渲染器;角色可选(默认第一个角色),舞台不能作为检查对象。
声音类题目
「播放音效次数」检查项有三种统计口径,按题意选择:
| 统计口径 | 数的是什么 | 适用题意 |
|---|---|---|
| 播放次数合计(默认) | 「开始播放声音」和「播放声音等待播完」两种积木加起来的次数 | 只要求「播放过」 |
| 只是开始播放 | 只数「开始播放声音」这一种积木 | 要求用「开始播放」积木 |
| 用了等待播完 | 只数「播放声音等待播完」这一种积木 | 要求用「等待播完」积木 |
提示:判题环境没有声音,判题能知道的只是作品有没有用某个播放积木、用了几次。它无法知道声音是否真的从头播到尾,也无法判断播放有没有被打断。
因此「不能只播放一次」这类要求,建议写成「必须使用『播放声音等待播完』积木」(即选「用了等待播完」口径),而不要指望判题能听出声音是否完整。
可判用语 / 不可判用语对照表:判题环境没有声音,它只知道作品用了哪个播放积木、用了几次。请把评分点写成左列的「可判用语」,不要写成右列的「不可判用语」。
| 可判用语(判题能判) | 不可判用语(判题判不了) |
|---|---|
| 播放两次 | 完整播放 |
| 使用「播放声音等待播完」积木播放两次 | 不被打断 |
| 用「开始播放声音」积木播放过 | 必须完整播放一遍 |
| 该播放积木至少执行 1 次 | 声音听起来没问题 / 音色正确 |
反例提示:不要用「用了『等待播完』积木的次数」去判断「声音有没有被打断」——判题听不到声音,这两种说法对判题来说没有区别;它数到的只是「积木被调用了多少次」,并不是「声音是否真的播完」。
把「不可判」的说法改成「可判」的说法:
| 原来的说法(不可判) | 建议改写成(可判) |
|---|---|
| 声音必须完整播放一遍 | 必须使用「播放声音等待播完」积木(选「用了等待播完」口径) |
| 播放过程不能被打断 | 该播放积木的执行次数不少于 1 次 |
| 至少播放两次,而且每次都播完 | 「播放声音等待播完」积木至少执行 2 次 |
| 不要只播放一次 | (同上)「播放声音等待播完」积木至少执行 2 次 |
多个角色的前后层次类题目
以「螃蟹最近(最前)、水母居中、小鱼最远(最后)」为例,用图层断言里的「相对某角色」方式,分别写几组「A 在 B 前面」的检查项:
- 「螃蟹」相对「水母」:更靠前。
- 「水母」相对「小鱼」:更靠前。
两条检查项都通过,就代表三者的前后层次正确。
- 这种「相对某角色」的比较比直接写「第几层」更稳定:作品里增删角色都不会影响「A 在 B 前面」这个关系,而写死层号很容易因为多了或少了角色就判错。
- 如果要表达「最前 / 最后」,可以直接选「最前」「最后」两个关键字;它们比同名的角色名优先(即使作品里真有个角色叫「最前」,也按关键字理解)。
- 注意:比较的两个角色不能是同一个,参照的一方也不能是舞台(舞台没有图层)。
提示:判断「谁在谁前面」时,用「相对某角色」两两比较来表达,比逐个指定层号更省心,也更贴合「近大远小」这类题意。
八、渲染器:平台会自动开启
「角色的真实大小」「画面像素颜色与涂色范围」「角色之间的碰撞判断(碰到角色 / 边缘 / 鼠标指针,以及碰到颜色)」「克隆体的大小」这几项需要渲染器才能观测。编辑器里对这类断言有明确提示:
该断言需要渲染器:保存后平台提交判题时会自动开启渲染器(无需手动配置)。
作者不需要、也不应该去手工配置渲染器。只要在界面上按选项配好断言,平台在提交判题时会自动处理。
九、常见错误配置与正确写法
| 现象 | 原因 | 正确做法 |
|---|---|---|
| 像素断言里填了「角色名」 | 画面是所有东西叠加后的整幅舞台,不区分角色 | 不填角色名 |
| 用「容差」来近似颜色 | 颜色近似要用专门的「颜色容差」 | 用颜色容差,别用数值容差 |
| 颜色容差填 5 | 小于一个色阶档位,与 0 等效 | 填 16 及以上 |
| 覆盖率写「精确等于 0.5」 | 画面判定是近似 | 用「不小于 0.1」「介于 0.4~0.6」等宽松写法 |
| 时间点超过推进的时长 | 配置有误,该点报错 | 加大推进时长,或调小时间点 |
| 询问作答只注入了变量、没给答案 | 程序卡在「询问并等待」,最终超时 | 提供答案序列(或答案模板) |
| 答案个数少于询问次数 | 出现「预设答案不足」 | 按询问次数补齐答案 |
| 把只适用于角色的断言填了「舞台」(如造型、大小、方向) | 这类断言不能用于舞台 | 舞台请用「背景」;角色类断言填角色名 |
| 角色 / 背景 / 造型 / 音效 / 变量 / 列表名写错或大小写不一致 | 名称按原样精确匹配 | 核对名称,与作品里保持一致 |
| 静态规则里积木名拼错 | 会被判成「没有用到该积木」 | 用界面下拉候选选择,避免手写拼错 |
| 想检查「有没有真的发出声音」 | 判题环境没有声音,做不到 | 改用「播放音效次数」;若要求「必须完整播放」则选「用了等待播完」口径 |
| 想检查「声音有没有完整播放 / 有没有被打断」 | 判题环境没有声音,只知道用了哪个播放积木、用了几次 | 把要求写成「必须使用『播放声音等待播完』积木」(选「用了等待播完」口径) |
| 想区分作品用的是「说话」还是「思考」 | 「说话内容」检查项只读文字、不区分类别;需要区分时要用专门的「思考气泡」检查项 | 要求「必须用思考」→ 用「思考气泡」;只要求显示出来的文字 → 用「说话内容」即可 |
| 只跑一次就想验证「作品是不是真的随机」 | 把结果写死成一个固定值也会通过 | 配置多轮随机种子,并给断言勾选「跨轮去重计数」 |
| 把「克隆体位置互不相同」理解成像素级的不重叠 | 位置判定是按坐标近似比较,不是形体相交 | 用「两两不重合」「去重个数达到」来表达 |
| 担心碰撞 / 克隆体大小类断言要不要手动开渲染器 | 这类断言确实需要渲染器 | 无需手动配置,平台提交判题时会自动开启 |
| 用「按键状态」检查时,步骤里配的是「按一下」 | 「按一下」在按下的瞬间就松开了,检查时已经松手,观测不到「按住」 | 步骤改用「按住不放」,再检查按键状态 |
| 计时器检查写成「精确等于 1 秒」 | 计时器读数有微小偏差,不会正好是整数秒 | 改成「介于 0.5~2.5 秒」这类区间写法 |
| 检查计时器前作品没先「计时器归零」 | 计时器起点是作品加载时刻,读数含加载耗时、不稳定 | 让作品在开始处先执行「计时器归零」 |
| 用「碰到颜色」做精细颜色判断 | 碰到颜色没有颜色容差,且是粗粒度匹配,只适合大致判断 | 需要容差 / 精细判断改用「舞台像素颜色」「涂色覆盖率」 |
| 「碰到颜色」的查询色和背景颜色接近 | 可能把「碰到背景」误判成「碰到该颜色」 | 换一个与背景色差别明显的查询色 |
| 想用「碰到颜色」判角色自己身上的颜色 | 碰到颜色不含角色自身颜色 | 改用「舞台像素颜色」,在角色所在位置取色判断 |
| 想检查「列表里有没有某个元素 / 它排在第几位」 | 整表比对过严;「第 N 项」又要先知道位置 | 用「列表」检查项里的「是否包含某元素」「某元素的位置」 |
| 想用「音量」检查证明「声音真的响了」 | 音量只表示音量参数被设置,判题环境没有声音 | 把音量当作「音量参数是否设置正确」;声音是否播放用「播放音效次数」表达 |
| 画笔颜色容差填 0,正确作品却不通过 | 画笔颜色在内部换算时有极小误差 | 保留默认的颜色容差(1) |
| 画笔粗细的期望值填 0 | 作品里「设为 0」会被当成 1 | 期望值按 1 填(粗细范围 1~1200) |
| 静态规则一条条件都没配 | 无法保存 | 至少配置一条有效条件 |
十、出题自检清单
- 每个题目至少有 1 个启用的测试点。
- 「结构要求」用静态规则,「结果要求」用运行时断言。
- 随机题:给了随机种子,并在答案里用了答案模板。
- 过程性要求:用较宽松的时间点,不卡精确毫秒。
- 计时器类:作品先「计时器归零」,且检查写成区间、不写「精确等于某秒」。
- 按键类:步骤用「按住不放」(不用「按一下」),再检查「按键状态」。
- 画面类:颜色容差 ≥ 16,覆盖率给区间或下限。
- 出题后,按学生身份完整走一遍「保存 → 提交 → 看结果」。
素材准备、碰撞、克隆体、列表与「思考」气泡等专项细则,见下文第十一节。
十一、素材、碰撞、克隆体与列表类题目怎么做
本节集中说明前几节标题没有归类到的几类能力:素材准备、碰撞、克隆体、列表的项级检查与列表注入,以及「说话 / 思考」气泡。本轮新增的思考气泡、按键、计时器与距离、碰到颜色、列表包含与元素位置、音量,统一见第十二节。
素材准备类题目(造型 / 背景 / 声音的「必须有」与「不能出现」)
「准备工作」有没有做到,用静态规则检查(不运行作品),一共有 6 项:
| 想检查什么 | 用哪一项(界面上的中文名) |
|---|---|
| 必须有某个造型 | 必须出现的造型名 |
| 不许出现某个造型 | 禁止出现的造型名 |
| 必须有某个背景 | 必须出现的背景名 |
| 不许出现某个背景 | 禁止出现的背景名 |
| 必须有某个声音 | 必须出现的声音名 |
| 不许出现某个声音 | 禁止出现的声音名 |
- 名称要完全一致(区分大小写):作品里的造型叫
galaxy,这里写Galaxy不会通过。名称两端多余的空格会被忽略,但大小写与中间的字符必须一模一样(不做前缀、后缀或模糊匹配)。 - 「背景」指的是舞台的背景;「造型」按所选「作用范围」统计(默认是全部角色与舞台的造型);「声音」统计角色与舞台上的声音。
- 「必须有」的素材缺失、「不能出现」的素材出现了,该测试点都不通过;提示里会列出作品里实际有哪些素材名,方便核对。
- 这 6 项都算「有效条件」,可以和别的条件用同一个作用范围一起配置。
碰撞类题目(碰到角色 / 碰到边缘 / 碰到鼠标指针 / 碰到颜色)
用「碰到(碰撞)」断言,可以检查一个角色有没有碰到:
| 碰撞对象 | 说明 |
|---|---|
| 另一个角色 | 填被碰到的角色名(该角色必须存在) |
| 舞台边缘 | 是否碰到舞台四周的边缘 |
| 鼠标指针 | 是否碰到鼠标指针 |
| 颜色 | 是否碰到某个颜色(填 #ff0000 或 255,0,0 这样的颜色) |
- 比较方式只有两种:碰到、没碰到。
- 可以填「时间点」做过程性检查,例如「碰撞前没碰到、碰撞后碰到了」。
- 提示:这类检查需要渲染器,平台会在保存后自动开启,作者不需要手动配置(同第八节)。
- 边界口径:角色刚好卡在边缘线上不算碰到,要真正越出边界才算(与 Scratch「碰到边缘」积木一致)。
- 被碰到的角色名写错或不存在,该测试点不通过。
- 碰到颜色:没有颜色容差、只做粗粒度判断,且不能判角色自己身上的颜色;适用与禁忌详见「十二」的「碰到颜色怎么判」。
克隆体类题目(每个克隆体的位置 / 造型 / 大小 / 显隐 / 方向)
用「克隆体属性」断言:先填角色名,再选一个属性(位置 / 造型 / 大小 / 显隐 / 方向),最后选比较方式:
| 比较方式 | 含义 | 期望值怎么填 |
|---|---|---|
| 克隆体数量等于 / 大于等于 / 小于等于 | 与克隆体个数比较 | 整数 |
| 全部落在(数组内) | 每一个克隆体的该属性都落在给定取值里 | 一行一个取值(位置写成 100,200) |
| 存在至少一个 | 至少有一个克隆体满足该属性值 | 一个取值(位置写成 100,200) |
| 去重个数达到(≥ 期望值) | 该属性的取值去重后有几种,要 ≥ 期望值 | 整数 |
| 两两不重合 | 任意两个克隆体的位置都不重合 | 只选角色与位置,不用填期望值 |
- 「位置」的判定是按坐标近似比较(带容差),用来表达「位置互不相同 / 不重叠」,不是像素级的形体相交判断。
- 「大小」这一项需要渲染器才准确(平台会自动开启);其余属性不需要渲染器。
- 克隆体一旦被删除,就不再计入以上任何统计。
- 角色名必填,且不能是舞台(舞台没有克隆体)。
列表类题目:只检查其中某一项
列表断言的比较方式除了「等于 / 不等于 / 长度」,还有「第 N 项」——只比较列表的某一项是否符合要求。
- 项号从 1 开始(与 Scratch 列表一致),例如「第 2 项 = 8」。
- 比整表比对更宽容:部分正确也能给分,很适合排序题、逐项填空;整表比对则要求每一项都对。
- 项号超出列表实际长度时该测试点不通过,提示里会给出列表实测长度与请求的项号。
列表类题目:把列表内容作为题目输入
出题时可以预设列表内容作为题目给作品的输入(界面在「输入变量」旁边,叫「输入列表」):
- 写法是「列表名 + 一组值」,值用逗号或每行一项,例如
data=3,1,2;留空表示一个空列表。 - 这些内容会在触发绿旗之前就注入作品;作品里没有这个列表也会自动创建。
- 典型用途:算法题先给定一段待处理的输入数据(如待排序的数列),让学生写出处理过程,再用列表断言检查处理结果。
显示文字类题目:「说话」与「思考」
作品显示文字有两种气泡:「说话」和「思考」。判题提供两个检查项:
| 检查项 | 检查什么 |
|---|---|
| 说话内容 | 角色当前显示的文字(无论是「说话」还是「思考」都能被它命中) |
| 思考气泡 | 角色当前必须是「思考」气泡,且其文字符合要求 |
- 「说话内容」不区分作品用的是「说话」还是「思考」,只比较显示出来的文字,适合「角色要说出某句话」这类要求。
- 「思考气泡」只认「思考」:作品用「说话」显示同样的文字时不通过。因此要求「必须用『思考』而不能用『说话』」时,请用「思考气泡」——只用「说话内容」是区分不了的。
- 不填角色名时,默认检查作品里的第一个角色;「思考气泡」不能用于舞台。
十二、思考气泡、按键、计时器与距离、碰到颜色、列表包含、音量怎么判
本节集中说明本轮新增的几类检查项:思考气泡、按键状态、计时器、到角色的距离、碰到颜色、列表包含与元素位置、音量。
怎么判「思考」气泡
要点见上一节「显示文字类题目」。一句话:要求「必须用『思考』」就用「思考气泡」,只要求显示出来的文字就用「说话内容」。
- 不填角色名时,默认检查作品里的第一个角色;「思考气泡」不能用于舞台。
- 作品用「说话」显示同样的文字时,「思考气泡」不通过(这正是它和「说话内容」的区别)。
怎么判按键是否按住
用「按键状态」检查项:选一个键(有「任意键」选项),再选按住 / 不按住。
- 键盘是否被按住是整台键盘的状态,所以不用、也不能指定角色。
- 前提:步骤里必须用「按住不放」。如果步骤里用的是「按一下」,按下后马上松开,检查时已经松手,是判不出「按住」的。
计时器与到角色距离怎么判
用「计时器」和「到角色的距离」两个检查项:
| 检查项 | 检查什么 |
|---|---|
| 计时器 | 作品从「计时器归零」起累计经过的时间(秒) |
| 到角色的距离 | 某角色到另一个角色(或鼠标指针)的距离(单位与 Scratch 坐标一致) |
- 计时器要先归零:作品如果没先执行「计时器归零」,计时器起点就是作品加载的那一刻,读数里会混进加载耗时、不稳定。请让作品在开始处先「计时器归零」。
- 计时器不要写精确相等:计时器读数会有极小的偏差,很少正好是整数秒。请写成区间(如「介于 0.5~2.5 秒」)或给出范围,不要把「等于 1 秒」当评分点。
- 到角色的距离:先选被测角色,再选参照对象(另一个角色,或鼠标指针),最后填期望距离。参照的角色必须存在、且不能选舞台;参照角色写错时提示会说明「未找到角色」。
碰到颜色怎么判
用「碰到(碰撞)」检查项,碰撞对象选颜色(填 #ff0000 或 255,0,0 这样的颜色)。要点:
- 需要渲染器(平台会自动开启,作者无需手动配置)。
- 没有颜色容差,而且不是精确匹配:它是粗粒度的颜色判断,同色系里的细微差别可能判成同一个、相邻的颜色也可能判成不同。只适合大致判断;需要按容差做精细颜色判断时,请改用「舞台像素颜色」「涂色覆盖率」。
- 避免和背景颜色接近的查询色:查询色若与舞台背景色接近,可能被误判成「碰到背景」。请换一个与背景色差别明显的颜色。
- 不能用来判角色自己身上的颜色:这个检查不含角色自身的颜色,只看其它角色 / 画笔 / 背景。要判角色自己,请用「舞台像素颜色」在角色位置取色。
列表包含与元素位置怎么判
用「列表」检查项里的两个新方式:
| 检查方式 | 检查什么 |
|---|---|
| 是否包含某元素 | 列表里有没有这个元素(也可以反过来要求「不包含」) |
| 某元素的位置 | 该元素第一次出现在第几位(从 1 开始;不存在时是 0) |
- 「位置」从 1 开始数,与 Scratch 列表一致;元素不存在时按 0 处理。
- 大小写敏感:元素大小写不同会被当成不同元素(例如
A与a不是同一个)。这与 Scratch 里「列表包含 / 编号」积木的口径可能不同,请按这里的口径写要求。 - 只要求「包含」时,比整表比对更宽松,适合「检查某个答案是否被收集到」「检查某元素排在第几位」这类要求。
音量怎么判
用「音量」检查项,填期望的音量数值(0~100)。
- 不填角色名时默认检查作品里的第一个角色;舞台也可以作为检查对象。
- 提醒:它只能证明「音量被设置成了某个值」,并不能证明声音真的响了。 判题环境没有声音。要表达「作品播放过声音」,请改用「播放音效次数」检查项。