📄 worm.c
字号:
#include <airobot/c/SimpleRobot.h>
#define MAX_SPARROWS 100 /*最多对付100个麻雀*/
double ex[MAX_SPARROWS]; /*记录麻雀x坐标的数组*/
double ey[MAX_SPARROWS]; /*记录麻雀y坐标的数组*/
double getSparrowSapor(double dist);
double getSparrowSapor(double dist);
double getSparrowSaporTotal(double x, double y);
void recordSparrowSapor();
void setMove();
void onTick(struct TickAction* action)
{
setMove();
}
/**
* 计算并返回指定距离下的麻雀味道大小,留到后面来实现
*/
double getSparrowSapor(double dist){
return 0;
}
/**
* 计算指定坐标点的总的麻雀味道大小,留到后面来实现
*/
double getSparrowSaporTotal(double x, double y){
return 0;
}
/**
* 记录所有麻雀的坐标
*/
void recordSparrowSapor(){
int i;
for(i=0; i<getOtherBots() && i<MAX_SPARROWS; i++){
/*记录此麻雀的坐标*/
ex[i] = getOpponentX(i);
ey[i] = getOpponentY(i);
}
}
/**
* 远离麻雀的运动模块函数,必须是一个设置函数
*/
void setMove()
{
recordSparrowSapor();
double mx = getX();
double my = getY();
double angle = 0; /* 搜索角度 */
double step = toRadians(10); /* 搜索角度跨度,以达成36个搜索点的目标 */
double radius = 40; /* 搜索半径 */
/* 下面代码找出以自己为圆心,指定半径的圆上若干个点上麻雀味道最小的点 */
double minSparrowSapor = 10000; /*一个非常大的值*/
double minSparrowSaporX = 0;
double minSparrowSaporY = 0;
for(angle=0; angle<PI*2; angle+=step){
/* 算出搜索点 */
double nx = mx + cos(angle)*radius;
double ny = my + sin(angle)*radius;
/* 得到搜索点的麻雀味道大小 */
double sparrowSapor = getSparrowSaporTotal(nx, ny);
/* 是否比目前最小的还要小,如果是,记录坐标并更新最小值*/
if(sparrowSapor < minSparrowSapor){
minSparrowSapor = sparrowSapor;
minSparrowSaporX = nx;
minSparrowSaporY = ny;
}
}
/* 下面代码让自己往目标点方向移动 */
double myHeading = getHeading();
/* 目标点相对自己的方向 */
double moveToHeading = heading(mx, my, minSparrowSaporX, minSparrowSaporY);
/* 需要转动的角度值 */
double needTurn = bearing(moveToHeading, myHeading);
turn(needTurn);
move(8); /*保持向前运动*/
}
//启动机器人程序
int main(int argC, char* argV[])
{
tickHook = onTick;
return startup(argC, argV);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -