前进(n) / forward(n)
沿当前朝向向前移动 n 格;省略 n 时前进 1 格。
例:forward(2) 表示向前移动两格。它还会返回实际移动的格数。
# map: default.map
forward(2)
向右转ROBO LANGUAGE GUIDE
从第一步行走到会观察、会思考的小格。每条指令都有说明和可以复制运行的示例,绝大多数支持中英文写法。
FIRST STEPS
不写步数时,移动指令默认走 1 格。撞墙不会报错,小格会停在能到达的位置。
前进(n) / forward(n)沿当前朝向向前移动 n 格;省略 n 时前进 1 格。
例:forward(2) 表示向前移动两格。它还会返回实际移动的格数。
# map: default.map
forward(2)
向右转后退(n) / backward(n)不改变朝向,向后移动 n 格;省略 n 时后退 1 格。
返回实际后退的格数,遇到障碍会提前停止。
# map: openArea.map
backward()向左转 / left在原地逆时针转 90°,不移动位置。
无参数指令的圆括号可以省略,写成 left() 也可以。
# map: openArea.map
left
forward(2)向右转 / right在原地顺时针转 90°,不移动位置。
# map: openArea.map
right()
forward(2)朝北(n) / north(n)先转向地图上方,再前进 n 格;省略 n 时走 1 格。
# map: openArea.map
north(2)朝南(n) / south(n)先转向地图下方,再前进 n 格;省略 n 时走 1 格。
# map: openArea.map
south朝东(n) / east(n)先转向地图右方,再前进 n 格;省略 n 时走 1 格。
# map: openArea.map
east(3)朝西(n) / west(n)先转向地图左方,再前进 n 格;省略 n 时走 1 格。
# map: openArea.map
west(2)goto(x, y)保留的坐标指令,必须填写两个数值参数。
当前与参考实现保持一致:它不会移动小格。日常编程请使用罗盘移动指令。
# map: openArea.map
goto(3, 4)ROBOT ACTIONS
让小格留下笔迹、搬运能量星,或把计算结果显示在「探险小广播」中。
画白色 / paintWhite放下白色画笔,立即涂白当前格,之后每进入一格都会涂色。
# map: openArea.map
paintWhite
forward(2)画黑色 / paintBlack放下黑色画笔,立即涂黑当前格,之后每进入一格都会涂色。
# map: openArea.map
paintBlack()
forward(2)停止绘画 / stopPainting抬起画笔,之后移动不再留下新笔迹,已有笔迹会保留。
# map: openArea.map
画白色
前进(2)
stopPainting
前进拾起 / pickUp用夹爪拾起小格前方一格的能量星。拾起后能量星会跟随小格。
注意:作用于前方,不是脚下。没有可拾取物时会出现提示。
# map: default.map
south(2)
east(2)
pickUp()放下 / putDown把夹爪中的能量星放到小格前方一格。
# map: default.map
south(2)
east(2)
pickUp
putDown吃 / eatUp直接清除小格前方一格的能量星,不需要先用夹爪拾起。
# map: default.map
south(2)
east(2)
eatUp()show(值)把一个数值或计算结果输出到右侧「探险小广播」。必须填写一个参数。
# map: openArea.map
show(3 + 4)LOOK AROUND
传感器会得到「真」或「假」,要放在条件中使用。方向始终相对小格当前朝向,而不是地图方向。
前方是障碍物 / frontIsObstacle前方有墙、能量星等障碍时为真。
if (frontIsObstacle) {
show(1)
}前方通畅 / frontIsClear前方可以进入时为真。
# map: openArea.map
if (frontIsClear) {
forward
}前方是白色 / frontIsWhite前方一格有白色笔迹时为真。
if (frontIsWhite) {
show(1)
}前方是黑色 / frontIsBlack前方一格有黑色笔迹时为真。
if (frontIsBlack) {
show(1)
}前方是灯塔 / frontIsBeacon前方一格有能量星(信标)时为真。
# map: default.map
if (frontIsBeacon) {
pickUp
}左侧是障碍物 / leftIsObstacle小格左侧有障碍时为真。
if (leftIsObstacle) {
show(1)
}左侧通畅 / leftIsClear小格左侧可以进入时为真。
# map: openArea.map
if (leftIsClear) {
left
}左侧是白色 / leftIsWhite小格左侧一格有白色笔迹时为真。
if (leftIsWhite) {
show(1)
}左侧是黑色 / leftIsBlack小格左侧一格有黑色笔迹时为真。
if (leftIsBlack) {
show(1)
}左侧是灯塔 / leftIsBeacon小格左侧一格有能量星时为真。
if (leftIsBeacon) {
show(1)
}右侧是障碍物 / rightIsObstacle小格右侧有障碍时为真。
if (rightIsObstacle) {
show(1)
}右侧通畅 / rightIsClear小格右侧可以进入时为真。
# map: openArea.map
if (rightIsClear) {
right
}右侧是白色 / rightIsWhite小格右侧一格有白色笔迹时为真。
if (rightIsWhite) {
show(1)
}右侧是黑色 / rightIsBlack小格右侧一格有黑色笔迹时为真。
if (rightIsBlack) {
show(1)
}右侧是灯塔 / rightIsBeacon小格右侧一格有能量星时为真。
if (rightIsBeacon) {
show(1)
}MAKE DECISIONS
让小格根据传感器和计算结果选择下一步行动。
假如(条件) / if(条件)条件为真时,执行花括号中的指令。
# map: openArea.map
if (frontIsClear) {
forward(2)
}否则 / else接在 if 后,条件不成立时执行另一组指令;也可组成 else if 链。
# map: openArea.map
if (frontIsClear) {
forward
} else {
right
}与 / and / &左右两个条件都为真,结果才为真。
if (frontIsClear and rightIsClear) {
show(1)
}或 / or / |左右任意一个条件为真,结果就是真。
if (leftIsObstacle or rightIsObstacle) {
show(1)
}非 / not / ~把真变成假、假变成真。
if (not frontIsWhite) {
show(1)
}真 / true表示永远成立的布尔值,常用于条件或变量。
if (true) {
show(1)
}假 / false表示永远不成立的布尔值。
if (not false) {
show(1)
}抛硬币 / flipCoin随机得到真或假,可以让小格每次做出不同选择。
# map: openArea.map
if (flipCoin) {
left
} else {
right
}REPEAT & CONTROL
把重复的工作交给循环,并在需要时提前退出。
重复(n) / repeat(n)把代码块执行 n 次。省略 n 和括号时会持续重复,直到 break 或 end。
# map: openArea.map
repeat(4) {
forward(2)
right
}在…的时候重复 / repeatWhile每次循环前检查条件,为真就继续,为假就结束。中文也支持「在...的时候重复」。
# map: default.map
repeatWhile (frontIsClear) {
forward
}中断 / break立即跳出最近的一层循环,从循环后继续执行。不能写在循环外。
# map: openArea.map
repeat(5) {
if (frontIsObstacle) {
break
}
forward
}结束 / end立即结束整个程序,后面的指令不再执行。
# map: openArea.map
forward
end
forward(10)BUILD YOUR OWN
把常用动作起个名字,组合成自己的指令。
程序 名称(参数) / procedure定义可重复调用的过程。过程名和参数可自定义,调用时传入对应数量的值。
# map: openArea.map
procedure walkAndTurn(steps) {
forward(steps)
right
}
walkAndTurn(2)返回 / return立即离开当前过程,回到调用它的位置继续执行。
procedure stopHere() {
return
show(99)
}
stopHere
show(1)用 变量名 = 表达式 保存数值或布尔值,之后可以直接使用。变量名也支持中文。
# map: openArea.map
步数 = 2 + 1
实际步数 = forward(步数)
show(实际步数)
+ 加 - 减或负号 * 乘 / 除== 等于 < 小于 <= 小于等于 > 大于 >= 大于等于and / & 与 or / | 或 not / ~ 非优先级:先算 * /,再算 + -;逻辑中先 not,再比较,然后 and,最后 or。整数除法向零取整,除零得到 0。不支持 !=,「不等于」可写成 not (a == b)。
总分 = (3 + 4) * 2
if (总分 >= 10 and not (总分 == 12)) {
show(总分)
}
MINI MISSION
前方有障碍就右转,否则前进;循环 20 次。试着加入左侧传感器,让小格沿着墙壁行走。
# map: maze1.map
repeat(20) {
if (frontIsObstacle) {
right
} else {
forward
}
}
去模拟器完成挑战
COCKPIT & OBSERVATION
模拟器不只有「运行」:观察、投影、单步、回放、导出……这些工具帮你把小格的一举一动看个明白。
焦点在代码区打字时,快捷键会自动让位,放心输入。
观察模式里按 Esc 分两步退:先收起代码抽屉,再退出观察;全屏投影时按 Esc 会一步退出全屏和投影。
写代码时还有两位小帮手:关键词、数字和注释会自动着色,看得更清楚;打出指令的前几个字母或汉字会弹出补全建议,↑↓ 选择、Tab 插入。
点「观察」或按 F 进入观察模式:地图铺满屏幕,控制条沉到底部,随时点「代码」把程序抽出来对照。教室大屏用「投影」:全屏显示并放大按钮和状态文字,轨迹线也会加粗,后排同学看得清。
滚轮或双指可以缩放地图,按住拖动平移;「适应全图」一键看整张地图,「跟随小格」让镜头始终对准小格,拖动地图即可脱离跟随。
「单步」每点一次执行一条指令。想看得更细,在「设置」里打开「逐格单步」:一条「前进(3)」会拆成一格一格走,笔迹跟着一格一格出现。
# map: default.map
画白色
前进(3)
打开逐格单步后逐条点「单步」:第一下放下画笔并涂白当前格,之后每点一下前进一格、多出一段白色笔迹。
跑完(或暂停)之后,地图下方会出现回放条:拖动滑杆或点「后退 / 前进」,就能回到任意一步,查看小格当时的位置、笔迹、轨迹和正在执行的代码行。拖到最右端回到当前状态,接着点「运行」就能继续。
回放只是「看」,不会改动程序状态;修改程序会自动退出回放。
程序出错时,出错的代码行会变红,底部还会弹出小提示,用看得懂的话告诉你问题在哪、下一步怎么改。读完点「知道了」关掉它;改好程序再运行,提示也会自动消失。
回放条右侧的「导出轨迹图」会把完整轨迹保存成 PNG 图片,可以打印、放进作业或分享给同学。动画速度、信息卡、轨迹显示、逐格单步这些偏好都会被自动记住,下次打开还是你熟悉的样子。
OBSERVATION MISSION
右侧「观察任务」卡里有三个小任务:读一读程序,猜猜小格会停在哪一格,直接点地图选答案,再点「运行」验证。猜对猜错都会告诉你正确落点——多玩几次,读程序的眼睛就练出来了。
去试试观察任务