GridGo小格探险工坊 返回模拟器

ROBO LANGUAGE GUIDE

小格使用手册

从第一步行走到会观察、会思考的小格。每条指令都有说明和可以复制运行的示例,绝大多数支持中英文写法。

01 指令按行书写 02 代码块放在 { } 中 03 英文不区分大小写 04 # 后面是注释
01

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)
02

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(值)

把一个数值或计算结果输出到右侧「探险小广播」。必须填写一个参数。

示例 · 显示 7
# map: openArea.map
show(3 + 4)
03

LOOK AROUND

感知周围环境

传感器会得到「真」或「假」,要放在条件中使用。方向始终相对小格当前朝向,而不是地图方向。

left / 左侧小格左手边front / 前方小格正前方right / 右侧小格右手边

前方是障碍物 / 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)
}
04

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
}
05

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)
06

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
  }
}
去模拟器完成挑战
07

COCKPIT & OBSERVATION

操作台与观察技巧

模拟器不只有「运行」:观察、投影、单步、回放、导出……这些工具帮你把小格的一举一动看个明白。

快捷键速查

焦点在代码区打字时,快捷键会自动让位,放心输入。

空格 运行 / 暂停 Ctrl + Enter 单步执行 F 进入 / 退出观察 Esc 退出观察模式 Ctrl + Shift + F 整理代码 Ctrl + 左键 整理代码 Tab / Shift + Tab 增加减少缩进 Enter 换行并自动对齐

观察模式里按 Esc 分两步退:先收起代码抽屉,再退出观察;全屏投影时按 Esc 会一步退出全屏和投影。

写代码时还有两位小帮手:关键词、数字和注释会自动着色,看得更清楚;打出指令的前几个字母或汉字会弹出补全建议,↑↓ 选择、Tab 插入。

看清小格的一举一动

点「观察」或按 F 进入观察模式:地图铺满屏幕,控制条沉到底部,随时点「代码」把程序抽出来对照。教室大屏用「投影」:全屏显示并放大按钮和状态文字,轨迹线也会加粗,后排同学看得清。

滚轮或双指可以缩放地图,按住拖动平移;「适应全图」一键看整张地图,「跟随小格」让镜头始终对准小格,拖动地图即可脱离跟随。

一步一步看:单步与逐格

「单步」每点一次执行一条指令。想看得更细,在「设置」里打开「逐格单步」:一条「前进(3)」会拆成一格一格走,笔迹跟着一格一格出现。

# map: default.map
画白色
前进(3)

打开逐格单步后逐条点「单步」:第一下放下画笔并涂白当前格,之后每点一下前进一格、多出一段白色笔迹。

回到任何一步:轨迹回放

跑完(或暂停)之后,地图下方会出现回放条:拖动滑杆或点「后退 / 前进」,就能回到任意一步,查看小格当时的位置、笔迹、轨迹和正在执行的代码行。拖到最右端回到当前状态,接着点「运行」就能继续。

回放只是「看」,不会改动程序状态;修改程序会自动退出回放。

出错怎么办

程序出错时,出错的代码行会变红,底部还会弹出小提示,用看得懂的话告诉你问题在哪、下一步怎么改。读完点「知道了」关掉它;改好程序再运行,提示也会自动消失。

留下成果,记住你的设置

回放条右侧的「导出轨迹图」会把完整轨迹保存成 PNG 图片,可以打印、放进作业或分享给同学。动画速度、信息卡、轨迹显示、逐格单步这些偏好都会被自动记住,下次打开还是你熟悉的样子。

OBSERVATION MISSION

观察任务:先猜再跑

右侧「观察任务」卡里有三个小任务:读一读程序,猜猜小格会停在哪一格,直接点地图选答案,再点「运行」验证。猜对猜错都会告诉你正确落点——多玩几次,读程序的眼睛就练出来了。

去试试观察任务