帮助中心 / 首页

判题能力边界:能验证什么、不能验证什么

自动判题有它擅长的地方,也有做不到的地方。为了让教师出题时不「许下判不了的承诺」,下面分层如实说明:哪些能直接验证、哪些要额外条件、哪些根本做不到。

一、能直接验证(无需任何额外设置)

以下能力都能稳定读取,可以直接用运行时断言检查:

能力 说明
变量与列表 变量值、列表内容与长度是否算对
坐标与面向角度 角色的位置、朝向是否符合要求
显示与隐藏 角色当前是显示还是隐藏
旋转方式 任意旋转 / 左右翻转 / 不旋转
造型与背景 当前造型、当前背景,以及造型/背景的切换顺序
图层 角色谁在前、谁在后
克隆体数量 某个角色产生了几个克隆体
广播 作品是否发出了某条广播消息(与有没有人接收无关)
说话内容与思考气泡 角色当前显示的文字;还可区分作品用的是「说话」还是「思考」(要求「必须用思考」时用「思考气泡」)
按键与鼠标交互 鼠标按下状态、鼠标坐标;键盘按键的按下与松开,以及某键当前是否被按住
计时器 作品从「计时器归零」起累计经过的时间(秒);需作品先归零,且只能写区间 / 范围,不能写精确值
到角色(或鼠标指针)的距离 两个角色之间(或角色到鼠标指针)的距离
列表包含与元素位置 列表里有没有某个元素、该元素首次出现在第几位(从 1 起,不存在为 0)
音量参数 角色 / 舞台的音量数值(0~100);只表示音量参数,不代表声音真的响了
积木执行次数 某个可计数的积木被执行了多少次
落笔状态 角色是否处于落笔状态、画出了几段笔迹

提示:说话内容与「询问并等待」组合时有个细节——程序开始询问后,显示问题的气泡会在作答后被清空。所以「询问 + 说话」的检查,要把说话断言放在作答之后。

二、需要开启渲染器才能验证(平台会自动开启)

以下几项要渲染器才能观测,平台在提交判题时会自动开启,教师无需(也不应)手动配置:

能力 说明
角色的真实大小 不开渲染器时只能按「设过的大小」推算,拉伸等路径不计入;开启后读到的是真实值。
克隆体的大小 与「角色的真实大小」同理;不开渲染器时读到的是克隆时继承的本体大小。
画笔绘制后的画面颜色与涂色覆盖范围 只有在开启渲染器时,画笔才会真正画到画面上,才能按颜色与覆盖面积来判断。
舞台合成画面的像素颜色 读的是所有角色、画笔、背景叠加后的整幅画面。
角色之间的碰撞(碰到角色 / 边缘 / 鼠标指针) 需要渲染器才能算出角色实际占用的形状,进而判断有没有碰到。
碰到颜色 角色是否碰到某个颜色。没有颜色容差、且不是精确匹配(只做粗粒度判断),不含角色自身颜色,查询色还需避开与背景同色系;需要按容差做精细颜色判断,请改用「舞台像素颜色」「涂色覆盖率」。

三、做不到的事(如实说明)

以下几项任何配置都做不到,出题时请避开:

  1. 判断作品「是否真的发出声音」
    判题环境没有音频引擎,播放声音的积木不会真的发声。能检查的只是「播放积木被调用了多少次」,而不是「听起来有没有声音」、音色、时长或波形。同样地,「音量」检查只表示音量参数被设置为某个值,也不能证明声音真的响了。

  2. 跨设备 / 跨渲染方式的像素级精确颜色与坐标匹配
    画面判定是「合成画面 + 分级量化 + 容差」的近似结果。不同环境下的抗锯齿、字体渲染有细微差别,因此不能用来做「某个像素必须精确是某个颜色」或「精确到某个坐标」的严格匹配。

  3. 对精确时间点的强依赖
    时间点采样有约 100 毫秒的粒度,且不同实现完成同一效果所需时间不同。不能要求「在第 137 毫秒时恰好处于某状态」这种精确时序。需要检查过程时,用较粗的时间点,或改用「等待某条件成立」。

  4. 要求计时器「精确等于某秒」
    计时器读数存在微小偏差,很少正好是整数秒。不能写「计时器等于 1 秒」这类精确值;请用区间 / 范围表达(如「介于 0.5~2.5 秒」),并让作品先执行「计时器归零」。

四、画面类检查是「近似判断」

画面类检查(像素颜色、涂色覆盖率)并不是逐像素的精确比对,而是按颜色比例与容差来近似判断:

  • 偶尔会有细微差异,属正常现象。
  • 出题请用较宽松的阈值:颜色容差不小于 16;覆盖率用区间或下限(如「不少于 0.1」「介于 0.4~0.6」),不要写精确值。
  • 不要把它当成「像素级标准答案」。

五、做不到的部分怎么办

对于上面「做不到」或难以稳定判定的部分,建议改用这些办法:

  1. 让关键状态写入变量或列表,再用变量/列表断言去检查(这是最稳的做法)。
  2. 用积木执行次数、静态规则来判断「是否按要求调用了相关积木」。
  3. 确实无法自动判分的部分,请在题目中明确标注不参与自动判分,避免学生困惑。