📄 walls.cpp
字号:
#include <airobot/cpp/SimpleRobot.hpp>
/**
* 这是一个绕墙走的机器人
* @author xiemin
*/
class Walls : public SimpleRobot
{
private:
/*
* 前进的方向。如果机器人当前的方向不在这个方向上,
* 则先停止运动,转动车身到这个方向上来
*/
double headingTo;
public:
void onTick(TickAction* action);
void onHitWall(HitWallAction* action);
void onRoundBegin(RoundBeginAction* action);
};
///////////////////////////////////////////////////////////////
//正确的实现方案
void Walls::onTick(TickAction* action)
{
//计算当前的方向和headingTo的夹角
double angle = Math::bearing(headingTo, getHeading());
if( fabs(angle)>0.0001 ) //停止前进,转动到headingTo方向上来
{
move(0);
turn(angle);
}
else //停止转动,继续前进
{
turn(0);
move(8);
}
}
void Walls::onHitWall(HitWallAction* action)
{
//改变前进的方向
headingTo += Math::PI/2;
}
void Walls::onRoundBegin(RoundBeginAction* action)
{
//初始化移动方向
headingTo = 0;
}
/////////////////////////////////////////////////////////
//错误的实现方案
/*
void Walls::onRoundBegin(RoundBeginAction* action)
{
move(8);
}
void Walls::onHitWall(HitWallAction* action)
{
//headingTo 表示要转动到的方向
double headingTo = getHeading()+Math::PI/2;
//停止移动
move(0);
while(true)
{
//计算要转动的角度
double angle = Math::bearing( getHeading(), headingTo);
//执行转动
turn(angle);
//当转到headingTo时退出循环
if(angle == 0) break;
}
//继续向前移动
move(8);
}
*/
//启动机器人程序
int main(int argC, char* argV[])
{
Robot* robot = new Walls();
return startup(argC, argV, robot);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -