样例展示
在下面的例子中,您将看到基本指令集和编成结构在构建Robot行为过程中所起到的作用。希望通过下面的实例,让您更加了解这些脚本和它的工作原理。更进一步的,您可以拷贝这些代码到RoboMind的脚本框中,从而更加清楚的了解这些脚本。
样例 1 : 写您的名字
因为robot具有绘画能力,因此,您可以运用它做一些简单的绘画程序. 采用 画白色() 和 停止绘画() 您能控制robot 放下或者举起它的刷子。如果,您要求robot移动,它将会在移动的时候就会在地方绘出线条。通过这种方法,您就能够创作出类似于“A” 这样的字母。
在openArea.map中,您有足够的空间来创作一副漂亮的作品。此外,您可以通过远程操控来控制robot的绘画
参见: 基本指令集: paint, move |
|
#字母 'A'
画白色()
前进(2)
向右转()
前进(1)
向右转()
前进(2)
后退(1)
向右转()
前进(1)
停止绘画()
样例 2 : 寻找白点
文件findSpot1.map 可以在 Rhomboid的默认文件夹中找到。这个地图中,在左上角落,您会看到一个白色的点。假设一开始您不知道白点在什么地方,那么,我们的Robot如何才能寻找到这个白点呢? 当然,您可以数robot寻找到白点所需要的步数,当然,还是有其他更好的方法。
首先,让robot往前走,每次走一步。在行走的过程中,检查是否寻找到白点。如果发现,那么robot停止,并完成任务。不然,它将继续前行并检查是否接近白点。以上过程可以重复执行到任务结束。
参见: 基本指令集:move, see, 结构化编程: loops, if-structures, end |
|
重复(){
假如(做测试白色()){
# There's a white spot on your left
向左转()
前进(1)
结束
}
否则{
# There's no white spot yet
前进(1)
}
}
另外一种方法在下图解释。Robot不停重复前行的动作直到它远离围墙(这样,它一定是到达一个角落,这个角落也是我们正在寻找的)。之后,Robot可以拐弯并且直行发现白点。
在...的时候重复(左侧是障碍物()){
前进(1)
}
向左转()
前进(1)
样例 3 : 线路追踪
# Go to the start of the line
向右转()
前进(8)
# Keep on track step by step
重复()
{
假如(前方是白色()){
前进(1)
}
否则 假如(右侧是白色()){
向右转()
}
否则 假如(做测试白色()){
向左转()
}
否则 假如(前方是障碍物()){
结束
}
}
另一种策略是采用递归策略。在下面的脚本中,您将看到follow() 就是一个递归函数. 在这个过程中,如果robot走对一步,那么 follow() 将根据其自身定义再调用一次. 这样我们可以获得序列 follow(...follow(...follow(...)...)...) ,它将一步一步robot采取正确的步子到最终任务的完成。这种环形定义称之为递归调用,这就像,当您去一个陌生的地方,没有关系,慢慢来,您将对此越来越清楚。
# Go to the start of the line
向右转()
前进(8)
# Start tracking
follow()
# Recursive definition for tracking
程序 follow(){
假如(前方是白色()){
前进(1)
follow()
}
否则 假如(右侧是白色()){
向右转()
follow()
}
否则 假如(做测试白色()){
向左转()
follow()
}
否则 假如(前方是障碍物()){
# Finish the current procedure call
# (because there is nothing to after
# this return, all calls will be finished
# and the program stops)
返回
}
}
样例 4 : 迷宫奔跑
如何从一个迷宫中逃脱呢? 常常,一个复杂的问题可能会有一个简单的答案。我们总是沿着墙的右(或左)侧行走,这样我们总是可以发现出口的位置
下面的脚本将展示robot发现信标的示例maze1.map.
参见: 基本指令集:move, see,
结构化编程: loops, if-structures, end |
|
重复(){
假如(右侧是障碍物()){
假如(前方通畅()){
前进(1)
}
否则{
向左转()
}
}
否则{
向右转()
前进(1)
}
假如(前方是灯塔()){
拾起()
结束
}
}
|