文档
结构化编程
概要
基本治疗
结构化编程
- 注释
- 循环
- if-结构
- 流程
- 结束语句
样例展示
乐高头脑风暴支持
更多

结构化编程

本网页将解释语法结构,您可以做结构化编程从而实现您的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)
    假如(右侧是灯塔())
    {
        结束 # 任务终结
    }
}
# 正常的程序结束
                  
RoboMind - Copyright © 2005 - 2016 - Research Kitchen