?? main.c
字號:
/*
這是一個 c 機器人模板.
以下列出的函數(shù)是用戶必須定義的函數(shù)。
你可以根據(jù)需要在下面列出的執(zhí)行函數(shù)和事件處理函數(shù)中加入代碼,定義自己的機器人。
*/
#include "Robot.h"
#include "Utils.h"
#include "Math.h"
#include <stdlib.h>
/////////////////////////////////////////////////////////////
int ne=0;
int donothing=1;
int d=1;
void detecNear(void);
void changeDirection(double a,double b);
void doMove(void);
void doRadar(void);
void doGun(int);
int m=1;
int i=0;
double C=100;
double getEnergy();
double r=1;
double v=8;
int back=0;
int j=0;
void doGun0();
/**
* 執(zhí)行函數(shù)
*/
void work()
{
doRadar();
detecNear();
i++;
if ((getBodyTurnRemaining()==0)&&(ne==0)&&(i%(rand()%3+1)==0)&&(donothing==1))
{
changeDirection(rand()%((int)map.height),(rand()%(int)map.width));
}
if (getBodyTurnRemaining()==0&&ne==1&&donothing==1)
{
changeDirection(map.height/2,map.width/2 );
donothing=0;
}
else if(getBodyTurnRemaining()==0&&ne!=donothing&&donothing!=2)
{
doMove();
}
else if(getBodyTurnRemaining()==0&&ne==0&&donothing==0)
{
doMove();
donothing=1;
}
if(distance(getBodyX(),getBodyY(),scannedRobotEvent.x, scannedRobotEvent.y)<100&&donothing!=2)
{
doGun(3);
fire(3);
}
else if(distance(getBodyX(),getBodyY(),scannedRobotEvent.x, scannedRobotEvent.y)<150)
{
doGun(2);
fire(2);
}
else if(distance(getBodyX(),getBodyY(),scannedRobotEvent.x, scannedRobotEvent.y)<180)
{
doGun(1);
fire(1);
}
else if(donothing!=2)
doGun0();
if (((distance(getBodyX(),getBodyY(),scannedRobotEvent.x,scannedRobotEvent.y)<100)&&(getEnergy()>scannedRobotEvent.energy+36))||((distance(getBodyX(),getBodyY(),scannedRobotEvent.x,scannedRobotEvent.y)<60)&&(getEnergy()>scannedRobotEvent.energy+10)))
{
donothing=2;
}
if (donothing==2)
{
double h = heading(getBodyX(),getBodyY(),scannedRobotEvent.x,scannedRobotEvent.y);
double angle = turnAngle(getBodyHeading(),h);
turnBody(angle);
doGun(3);
fire(3);
}
if ((distance(getBodyX(),getBodyY(),scannedRobotEvent.x,scannedRobotEvent.y)<60)&&donothing!=2)
{
doGun(3);
fire(3);
}
else v=8;
moveBody(v);
r=(rand()%10)/20.0+0.5;
}
//////////////////////////////////////////////////////////////
//事件處理函數(shù),相應(yīng)事件發(fā)生時被調(diào)用一次
/*
* 當(dāng)開始一輪新的戰(zhàn)斗時觸發(fā)
*/
void onBegin()
{
detecNear();
if (ne==1) donothing=1;
else donothing=0;
scannedRobotEvent.time =-5;
j=0;
d=1;
}
/*
* 當(dāng)雷達掃描到敵人時觸發(fā)
*/
void onScannedRobot()
{
}
/*
* 當(dāng)打中某個敵人時觸發(fā)
*/
void onBulletHit()
{
}
/*
* 當(dāng)被敵人打中時觸發(fā)
*/
void onHitByBullet()
{
}
/*
* 當(dāng)撞到其它敵人時觸發(fā)
*/
void onHitRobot()
{
doGun0();
fire(3);
}
/*
* 當(dāng)撞到墻時觸發(fā)
*/
void onHitWall()
{
if(donothing!=2)
turnBody(PI/2);
}
/*
* 當(dāng)某個敵人死時觸發(fā)
*/
void onRobotDeath()
{
}
/*
* 當(dāng)一輪戰(zhàn)斗結(jié)束時觸發(fā)
*/
void onFinish()
{
}
/*
* 當(dāng)機器人執(zhí)行操作超時時觸發(fā)
*/
void onOvertime()
{
}
//改變方向//
void changeDirection(double a,double b)
{
double angle;
double h = heading(getBodyX(),getBodyY(),a ,b);
angle = turnAngle(getBodyHeading(),h);
turnBody(angle-d*r*PI/2);
}
//yundong//
void doMove()
{
turnBody(d*r*PI);
d=-d;
}
//near//
void detecNear()
{
if((getBodyX()>((map.height)-C))||(getBodyX()<C)||(getBodyY()>((map.width)-C))||(getBodyY()<C))
{
ne=1;
}
else
{
ne=0;
}
}
//控制雷達單元
void doRadar()
{
//雷達鎖定
if( getTime() - scannedRobotEvent.time > 3 ) turnRadar(PI);
else{
//雷達轉(zhuǎn)向敵人,以實現(xiàn)鎖定
double h = heading(getBodyX(),getBodyY(),scannedRobotEvent.x, scannedRobotEvent.y);
double angle = turnAngle(getRadarHeading(),h);
turnRadar(angle);
}
}
void doGun(int p)//提前量射擊
{
double angle,h,pv,gunangle,v;
v=scannedRobotEvent.velocity;//敵人運動速度
h=heading(scannedRobotEvent.x, scannedRobotEvent.y,getBodyX(),getBodyY());//敵人和自己連線的方向(自己的x,y,敵人的x,y)
angle=turnAngle(scannedRobotEvent.heading,h);//需要轉(zhuǎn)過的角度
pv=20-4.*p/3;//子彈速度
gunangle=asin(v*sin(angle)/pv);
gunangle=gunangle+(h-PI);//提前射擊的方向
angle=turnAngle(getGunHeading(),gunangle);//提前射擊炮口需要轉(zhuǎn)過的角度
turnGun(angle);//轉(zhuǎn)炮口
}
void doGun0(){
double h = heading( getBodyX(), getBodyY(), scannedRobotEvent.x, scannedRobotEvent.y);
double angle = turnAngle(getGunHeading(),h);
turnGun(angle);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -