文档
样例展示
概要
基本指令集
结构化编程
样例展示
- 写您的名字
- 寻找白点
- 线路跟踪
- 迷宫奔跑
乐高头脑风暴支持
更多

样例展示

在下面的例子中,您将看到基本指令集和编成结构在构建Robot行为过程中所起到的作用。希望通过下面的实例,让您更加了解这些脚本和它的工作原理。更进一步的,您可以拷贝这些代码到RoboMind的脚本框中,从而更加清楚的了解这些脚本。

样例 1 : 写您的名字

因为robot具有绘画能力,因此,您可以运用它做一些简单的绘画程序. 采用 画白色()停止绘画() 您能控制robot 放下或者举起它的刷子。如果,您要求robot移动,它将会在移动的时候就会在地方绘出线条。通过这种方法,您就能够创作出类似于“A” 这样的字母。

在openArea.map中,您有足够的空间来创作一副漂亮的作品。此外,您可以通过远程操控来控制robot的绘画

参见: 基本指令集: paint, move

write 'A'
#字母 'A'
画白色()


前进(2)
向右转()
前进(1)
向右转()
前进(2)
后退(1)
向右转()
前进(1)


停止绘画()

 

样例 2 : 寻找白点

文件findSpot1.map 可以在 Rhomboid的默认文件夹中找到。这个地图中,在左上角落,您会看到一个白色的点。假设一开始您不知道白点在什么地方,那么,我们的Robot如何才能寻找到这个白点呢? 当然,您可以数robot寻找到白点所需要的步数,当然,还是有其他更好的方法。

首先,让robot往前走,每次走一步。在行走的过程中,检查是否寻找到白点。如果发现,那么robot停止,并完成任务。不然,它将继续前行并检查是否接近白点。以上过程可以重复执行到任务结束。

参见: 基本指令集:move, see, 结构化编程: loops, if-structures, end

find spot
重复(){
	假如(做测试白色()){
		# There's a white spot on your left
		向左转()
		前进(1)
		结束
	}
	否则{
		# There's no white spot yet
		前进(1)
	}
}

另外一种方法在下图解释。Robot不停重复前行的动作直到它远离围墙(这样,它一定是到达一个角落,这个角落也是我们正在寻找的)。之后,Robot可以拐弯并且直行发现白点。

在...的时候重复(左侧是障碍物()){
	前进(1)
}


向左转()
前进(1)
            

 

样例 3 : 线路追踪

在文件default.map 中,您能够看见一条白色的线。这条线代表了当前场景中的一条路。如何保证robot严格按照这条路径行走呢?

解决方案是和以前的问题很类似的。当robot处于路径的起点时,它是一步一步决定下一步的走向的。

参见: 基本指令集:move, see, 结构化编程: loops, procedures, if-structures, end

line follower
# 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)
    }

    假如(前方是灯塔()){	
        拾起()
        结束
    }
}

RoboMind - Copyright © 2005 - 2016 - Research Kitchen