结构化编程
本网页将解释语法结构,您可以做结构化编程从而实现您的Robot的各种行为.
注释 |
# 这些代码将不会被编译
‘#’ 标志后面的文字都不会被认为是程序结构中的真实代码。Robot是按行读取代码并执行,但‘#’后面的文字代码都不会被读取和执行,它的目的仅仅是用于程序员的个人理解和对前方代码的解释
|
循环 |
重复(n){...指令集...}
处于大括号内部的指令集将会被重复执行 n 次.
样例:
# 一个 2x2 的方形
重复(4)
{
前进(2)
向右转()
}
重复(){...指令...}
处于大括号内部的指令集将会被一直重复执行
样例:
# 一直前行
# (当碰到墙壁为止)
重复()
{
前进()
}
在...的时候重复(条件){...指令集...}
如果条件满足,处于大括号内部的指令集将会被一直重复执行.
这些条件必须是可见的指令(比如说 前方通畅)
样例:
# 保持前行
# 一直到不能行走为止
在...的时候重复(前方是障碍物)
{
前进(1)
}
中断
允许程序跳出循环 (比如 repeat() 部分)
它将结束执行大括号之间的指令集. 当Robot离开中断部分后,它会恢复执行指令,继续任务
样例:
# 保持前行,一直到不能行走为止
重复(){
假如(前方是障碍物()) {
中断
}
否则 {
前进(1)
}
}
|
If-结构 |
假如(条件){...结构...}
如果条件满足,Robot执行大括号内的指令集合。不然,Robot将跳出If之后的部分继续执行。条件语句必须为可见,可判断的语句。
(例如: 前方通畅())
样例:
# 如果发现你左侧的是白色,将其涂为黑色
假如(做测试白色())
{
向左转()
前进(1)
画黑色()
停止绘画()
后退(1)
向右转()
}
假如(条件){...指令集...}否则{...指令集...} 如果条件满足,Robot会执行第一个大括号内的指令集,并且略过else部分。如果条件不满足,Robot会执行第二大括号内的指令集。之后Robot继续执行条件语句之后的指令集。在这里,条件必须是可见或可判断的。(比如: 前方通畅())
样例:
# 如果Robot发现其左侧为白色,则将其涂为黑色
# 不然,继续前行
假如(做测试白色())
{
向左转()
前进(1)
画黑色()
停止绘画()
后退(1)
向右转()
}
否则
{
前进(3)
}
|
逻辑
表达式 |
条件词中的 if- 和 repeatWhile-结构 都被称作为逻辑表达式. 这些表达式能够返回一个值 真 或 假, 它是用来确定Robot是否进入当前大括号还是跳过并继续执行其他语句。
一个逻辑表达式可以看成是一个 可判断的指令, e.g.: 真(). 布尔指令也是构成基本指令集的一个部分 ~ , & , | .
样例:
假如(做测试白色())
{
向左转()
前进(1)
}
通过一些逻辑连接词,可以构造更加精细的条件语句
连接词 |
双目运算符
|
参数个数
|
解释 |
非 |
~ |
1 |
与返回值相反 :
真值表 :
~ 真 = 假
~ 假 = 真
样例:
~ 前方通畅() |
与 |
& |
2 |
双目都真才真.
真值表:
真 & 真 = 真
真 & 假 = 假
假 & 真 = 假
假 & 假 = 假
样例:
前方通畅() & 右侧是白色()
|
或 |
| |
2 |
单目真则真
真值表:
真 | 真 = 真
真 | 假 = 真
假 | 真 = 真
假 | 假 = 假
样例:
前方通畅() | 右侧是白色() |
返回值真 和 假 能够直接采用如果条件是可见或者可判断的.
连接词的顺序是非常重要的,有优先级之分。连接词 ~ 是最优先操作符, 之后是& , 再之后是 | . 小括号是可以用来调整连接词顺序的表达.
样例:
在...的时候重复(非 前方通畅() 与 (做测试白色() 或 右侧是白色())){
前进(1)
}
假如(抛硬币() 与 非 右侧是白色())
{
向右转()
后退(1)
}
假如(真 与 假){
# 下面的指令不会被调用
前进(1)
}
|
流程 |
程序 name(par1,
par2, ... , parN){...instructions...}
定义了一个指令集执行的流程,并赋这个流程一个名字。流程也可以没有参数或者有多个参数,这些参数您都可以为其定义一些有意义的名字。流程name中包含了N个par,都代表了不同的流程部分。流程中的代码不会被执行除非您在主函数中调用此流程。这里,流程在其它语言编程中也称为函数。
技巧: 当你要执行某一段指令集多次时,你可以考虑把这些指令集放在一个流程函数中,可以多次调用即可
样例:
# 定义如何画一个矩阵
程序 rectangle(width, height)
{
画白色()
重复(2)
{
前进(height)
向右转()
前进(width)
向右转()
}
停止绘画()
}
name(arg1, arg2, . .
. , argN) 就是调用name这个流程函数,并且每次都输入不同的参数。
样例:
# 这些指令将会被执行
前进(1)
rectangle(3,2) # 调用画矩形流程函数,并输入3,2参数
前进(3)
rectangle(1,4) # 调用画矩形流程函数,并输入1,4参数
# 定义一个矩阵
程序 rectangle(width, height)
{
画白色()
重复(2)
{
前进(height)
向右转()
前进(width)
向右转()
}
停止绘画()
}
|
End |
结束
告诉Robot整个任务的终结
样例:
# 行走5步停止,或者如果发现信标则立即停止(步数小于等于5)。
重复(5)
{
前进(1)
假如(右侧是灯塔())
{
结束 # 任务终结
}
}
# 正常的程序结束
|
|