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