⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strategy.cpp

📁 FIRA机器人足球比赛5V5仿真组的一般的防守策略
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//定义类型,常量
#include "Strategy.h"

//定义动作函数
#include "vsv.h"

// NormalGame 在没有犯规和罚球的情况下的策略


void NormalGame ( Environment *env )
{
	Mydata * p;
	p=(Mydata *)env->userData;
	Vector3D pos,begin,end;
    static int flag=1;
	int count;
    double alfa,l=4;
    
	if(flag==1){
		PredictBall(env,2);
		Kick(env,3,p->preball);
		Kick(env,4,p->preball);
	    flag++;
	}
	Goalie(env,0);
    
	if(p->curball.x>=50&&p->curball.x<61)
		Kick(env,1,CONSTGATE);
	else if(p->curball.x>=61&&p->curball.x<78.6){
		   if(p->curball.y<27.8){
              pos.x=37.2;
			  pos.y=20;
		   }
		   else if(p->curball.y<=58.5){
			   PredictBall(env,2);
			   pos.x=37.2;
			   pos.y=p->preball.y;
		   }
		   else{
			   pos.x=37.2;
			   pos.y=66.2;
		   }
		   PositionAndStop(env,1,pos);
	}
	else  if(p->curball.x>78.6&&
		     ((p->curball.y<34&&p->curball.y>6.3)||(p->curball.y>48&&p->curball.y<77.2))){
		       Order(env);
		       count=120;			 
			   while(count>0){
				  Kick(env,1,p->slowrobot);
				  count--;
			   }
	}
			 if(p->mygrand ==true)
			 {
				  switch(p->ballArea)
					 {
					 case 1:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,3))
		{
		pos.x =48.7;
		pos.y =43;
		PositionAndThrough(env,p->cutrobot ,pos,125);
			Kick(env,p->mainrobot ,p->cutrobot );

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation) ,3);
		}
		pos.x =20;
		pos.y =43;
         if(fabs(p->opp[p->slowrobot].pos.x-pos.x)<15&&fabs(p->opp[p->slowrobot].pos.y-pos.y)<15)
		 {
		  PositionAndThrough(env,p->slowrobot ,p->opp[p->slowrobot].pos,125);
		 }
		 else
		 {
			 PositionAndStop(env,p->slowrobot ,Meetball_p(env,p->slowrobot ),45,1.5);
		 }
		pos.x =20;
		pos.y =27;
         if(fabs(p->opp[p->oppcutrobot].pos.x-pos.x)<15&&fabs(p->opp[p->cutrobot ].pos.y-pos.y)<15)
		 {
		  PositionAndThrough(env,p->defentrobot ,p->opp[p->cutrobot].pos,125);
		 }
		 else
		 {
			 PositionAndThrough(env,p->defentrobot ,pos ,130);
		 }
	    break;
	   case 2:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =93;
		pos.y =35;
		if(Within(env,p->slowrobot  ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->slowrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->mainrobot].pos ,(180+p->opp [p->mainrobot].rotation ),3);
		}
         pos.x =13;
		 pos.y=53;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 4:
				Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->slowrobot  ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =93;
		pos.y =35;
		if(Within(env,p->slowrobot  ,5))
		{
			Kick(env,p->slowrobot,pos);

		}
		else
		{
		PredictBall(env,2);
		PositionAndThrough(env,p->slowrobot ,p->preball ,130);
		}
         pos.x =13;
		 pos.y=53;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 3:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =93;
		pos.y =35;
		if(Within(env,p->slowrobot  ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->slowrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->mainrobot].pos ,(180+p->opp [p->mainrobot].rotation ),3);
		}
         pos.x =13;
		 pos.y=53;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 4:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =93;
		pos.y =35;
		if(Within(env,p->slowrobot  ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->slowrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->cutrobot ,p->opp [p->mainrobot].pos ,(180+p->opp [p->mainrobot].rotation ),3);
		}
         pos.x =13;
		 pos.y=53;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 4:
				Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->slowrobot  ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =93;
		pos.y =35;
		if(Within(env,p->slowrobot  ,5))
		{
			Kick(env,p->slowrobot,pos);

		}
		else
		{
		PredictBall(env,2);
		PositionAndThrough(env,p->slowrobot ,p->preball ,130);
		}
         pos.x =13;
		 pos.y=53;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 5:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,3))
		{
		pos.x =94;
		pos.y =35;
		Kick(env,p->mainrobot ,pos );
		PositionAndThrough(env,p->cutrobot ,Meetball_p(env,p->cutrobot ),120);
		}
		else
		{
			Kick(env,p->mainrobot,1,1.5);
			Kick(env,p->cutrobot ,3,1.5);
		}
        		if(Within(env,p->slowrobot ,6))
				{
		  Kick(env,p->slowrobot ,p->mainrobot );
		         }
		 else
		 {
			 pos.x =48;
			 pos.y =43;
			 PositionAndStop(env,p->slowrobot ,Meetball_p(env,p->slowrobot ),90,1.5);
		 }
		pos.x =25;
		pos.y =43;
         if(fabs(p->opp[p->oppcutrobot].pos.x-pos.x)<15&&fabs(p->opp[p->cutrobot ].pos.y-pos.y)<15)
		 {
		  PositionAndThrough(env,p->defentrobot ,p->opp[p->cutrobot].pos,125);
		 }
		 else
		 {
		pos.x =25;
		pos.y =43;
			 PositionAndStop(env,p->defentrobot ,pos,30,1.5);
		 }
	    break;    
	   case 6:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =97;
		pos.y =49;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->slowrobot  ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =97;
		pos.y =49;
		if(Within(env,p->slowrobot  ,5))
		{
			Kick(env,p->slowrobot,pos);

		}
		else
		{
		PredictBall(env,2);
		PositionAndThrough(env,p->slowrobot ,p->preball ,130);
		}
         pos.x =13;
		 pos.y=p->curball;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 7:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =97;
		pos.y =49;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->slowrobot  ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =97;
		pos.y =49;
		if(Within(env,p->slowrobot  ,5))
		{
			Kick(env,p->slowrobot,pos);

		}
		else
		{
		PredictBall(env,2);
		PositionAndThrough(env,p->slowrobot ,p->preball ,130);
		}
         pos.x =13;
		 pos.y=p->curball;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 8:
				Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =97;
		pos.y =49;
			Kick(env,p->mainrobot,pos);

		}
		else
		{
			pos=PredictOpp(env,p->oppslowrobot ,2);
			Kick(env,p->mainrobot ,1,1.5);
			PositionAndStop(env,p->slowrobot  ,p->opp [p->oppslowrobot ].pos ,(180+p->opp [p->slowrobot ].rotation ),3);
		}
		pos.x =97;
		pos.y =49;
		if(Within(env,p->slowrobot  ,5))
		{
			Kick(env,p->slowrobot,pos);

		}
		else
		{
		PredictBall(env,2);
		PositionAndThrough(env,p->slowrobot ,p->preball ,130);
		}
         pos.x =13;
		 pos.y=p->curball;
		 if(Within(env,p->cutrobot ,2.5))
		 {
			 Kick(env,p->cutrobot ,1,1.5);
		 }
		 else
		 {

		 PositionAndThrough(env,p->cutrobot ,pos,130);
		 }
		  if(Within(env,p->defentrobot  ,2.5))
		  {
			  Kick(env,p->cutrobot ,1,1.5);
		  }
		  else
		  {
		 pos.x =p->robot [p->cutrobot ].pos .x ;
		 pos.y =p->robot [p->cutrobot ].pos .y -4;
		 PositionAndThrough(env,p->defentrobot ,pos,130);
		  }
	   case 9:
		Order(env);
		oppOrder(env);
		if(Within(env,p->mainrobot ,5))
		{
		pos.x =93;
		pos.y =35;
		Kick(env,p->mainrobot ,pos);
		PositionAndThrough(env,p->cutrobot ,Meetball_p(env,p->cutrobot ),120);

		}
		else
		{
			Kick(env,p->mainrobot ,1,1.5);
			PredictBall(env,3);
			PositionAndStop(env,p->cutrobot ,p->preball ,30,1.5);
			Kick(env,p->cutrobot ,p->mainrobot );
		}
         if(Within(env,p->slowrobot ,6))
		 {
		  Kick(env,p->slowrobot ,p->mainrobot );
		 }
		 else
		 {
			 pos.x=43;
			 pos.y =33;
			 PositionAndStop(env,p->slowrobot ,pos,30,1.5);
		 }
		pos.x =20;
		pos.y =30;
         if(fabs(p->opp[p->oppcutrobot].pos.x-pos.x)<15&&fabs(p->opp[p->cutrobot ].pos.y-pos.y)<15)
		 {
		  PositionAndThrough(env,p->defentrobot ,p->opp[p->cutrobot].pos,125);
		 }
		 else
		 {
			 PositionAndThrough(env,p->defentrobot ,pos ,30);
		 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -