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

📄 behave.c

📁 足球机器人仿真组CMU97的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  static int BEHAVIOR = 0;  float cdist=0, sdist, pdist, gpow, dpow, spow, pbuf, x, y;   int Marker;  int formation, position;#if MOVE_LEARN  if (Mem->MoveRecorded){    RecordDashResult(Mem);    Mem->MoveRecorded = FALSE;  }#endif  switch (behavior){  case FORGET:     Mem->Reset();    break;  case RANDOM_INTERCEPT:    /*if ( Mem->view_width != NARROW_WIDTH )      NARROW_HIGH_VIEW;*/    /*    gpow = 6, cdist = 20;*/    gpow = 50, cdist = 14;  /* Wait longer to go, but then go faster */    if (BEHAVIOR != RANDOM_INTERCEPT) BEHAVIOR = RANDOM_INTERCEPT;    BehaviorName = strdup("Random Intercept");    COLLECTBALL( &ChooseRandom, cdist, gpow );    break;  case INTERCEPT:    /*if ( Mem->view_width != NARROW_WIDTH )      NARROW_HIGH_VIEW;*/    NARROW_HIGH_VIEW;    gpow = 50, cdist = 30;  /* Wait longer to go, but then go faster */    if (BEHAVIOR != INTERCEPT) BEHAVIOR = INTERCEPT;    BehaviorName = strdup("Intercept");    /* TRAINCOLLECT( &ChooseNN, cdist, gpow ); */    ANALYTICCOLLECTBALL( cdist, gpow );     break;  case SHOOT:    if ( Mem->view_width != WIDE_WIDTH )        WIDE_HIGH_VIEW;    /* usleep(1000 * SEND_STEP);  /* Wait a bit so defender sees ball */    spow = 3;     if (BEHAVIOR != SHOOT) BEHAVIOR = SHOOT;    BehaviorName = strdup("Shoot");    /* STAYANDSHOOT( spow ); */    SHOOTONGOAL( 100 );    break;  case CHASE_AND_SHOOT:     gpow = 6, spow = 4;     if (BEHAVIOR != CHASE_AND_SHOOT) BEHAVIOR = CHASE_AND_SHOOT;    BehaviorName = strdup("ChaseAndShoot");    CHASEANDSHOOT( gpow, spow );    break;  case DRIBBLE_AND_SHOOT:     gpow = 6, dpow = 6, spow = 4, sdist = 40;     if (BEHAVIOR != DRIBBLE_AND_SHOOT) BEHAVIOR = DRIBBLE_AND_SHOOT;    BehaviorName = strdup("DribbleAndShoot");    DRIBBLEANDSHOOT( sdist, gpow, dpow, spow );    break;  case DEFEND:     cdist = 20, gpow = 10, spow = 4;      if (BEHAVIOR != DEFEND) BEHAVIOR = DEFEND;    BehaviorName = strdup("Defend");    Defend( cdist, gpow, spow);    break;  case KAMRAM:     cdist = 20, gpow = 10, spow = 4;      if (BEHAVIOR != KAMRAM) BEHAVIOR = KAMRAM;    BehaviorName = strdup("Kamram");    Kamram( cdist, gpow, spow);    break;  case RANDOM_PASS:     if ( Mem->view_width != NORMAL_WIDTH )        NORMAL_HIGH_VIEW;    cdist = 0, pdist = 35, gpow = 0, dpow = 10, spow = 3;      if (BEHAVIOR != RANDOM_PASS) BEHAVIOR = RANDOM_PASS;    BehaviorName = strdup("RandomPass");    TreePass( &ChooseReceiverRandom, cdist, pdist, gpow, dpow, spow);    break;  case LEARNED_PASS:     if ( Mem->view_width != NORMAL_WIDTH )        NORMAL_HIGH_VIEW;    cdist = 0, pdist = 35, gpow = 0, dpow = 10, spow = 3;      if (BEHAVIOR != LEARNED_PASS) BEHAVIOR = LEARNED_PASS;    BehaviorName = strdup("TreePass");    TreePass( &ChooseReceiverTree, cdist, pdist, gpow, dpow, spow);    break;  case COLLECT_PASS:    if ( Mem->view_width != NARROW_WIDTH )      NARROW_HIGH_VIEW;    /*    gpow = 6, cdist = 20;*/    gpow = 10, cdist = 14;  /* Wait longer to go, but then go faster */    spow = 100;    if ( Mem->GetGlobalAngle() < 0 ) gpow = 0;   /* Don't run back after ball */    if (BEHAVIOR != COLLECT_PASS) BEHAVIOR = COLLECT_PASS;    BehaviorName = strdup("CollectPass");    TreeTestReceiveAndAttack( &ChooseNN, cdist, gpow, spow);    break;  case INTERCEPT_PASS:    if ( Mem->view_width != NARROW_WIDTH )      NARROW_HIGH_VIEW;    cdist = 14, gpow = 10, spow = 100;    if ( Mem->GetGlobalAngle() > 0 ) gpow = 0;   /* Don't run back after ball */    if (BEHAVIOR != INTERCEPT_PASS) BEHAVIOR = INTERCEPT_PASS;    BehaviorName = strdup("InterceptPass");    Marker = int_random(2) ? THEIR_GOAL : MY_GOAL;    COLLECTANDKNOCK( Marker ,&ChooseNN, cdist, gpow, spow );    break;  case GOALIE:    gpow = 50, pbuf = 2, spow = 5;    formation = f433_FORMATION;    position = f433_GOALIE;    BehaviorName = strdup("Goalie");    cdist = 14;    break;  case CENTER_SWEEPER:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_SWEEPER;    BehaviorName = strdup("Sweeper");    break;  case RIGHT_DEFENSE:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_RIGHT_DEFENSE;    BehaviorName = strdup("RightDefense");    break;  case CENTER_DEFENSE:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_CENTER_DEFENSE;    BehaviorName = strdup("CenterDefense");    break;  case LEFT_DEFENSE:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_LEFT_DEFENSE;    BehaviorName = strdup("LeftDefense");    break;  case RIGHT_MIDFIELD:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_RIGHT_MIDFIELD;    BehaviorName = strdup("RightMidfield");    break;  case CENTER_MIDFIELD:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_CENTER_MIDFIELD;    BehaviorName = strdup("CenterMidfield");    break;  case LEFT_MIDFIELD:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_LEFT_MIDFIELD;    BehaviorName = strdup("LeftMidfield");    break;  case RIGHT_WING:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_RIGHT_WING;    BehaviorName = strdup("RightWing");    break;  case CENTER_FORWARD:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_CENTER_FORWARD;    BehaviorName = strdup("CenterForward");    break;  case LEFT_WING:    gpow = 50, pbuf = 3, spow = 5;    formation = f433_FORMATION;    position = f433_LEFT_WING;    BehaviorName = strdup("LeftWing");    break;  case START_SET_PLAY:    x = -45, y = 0;    pbuf = 10, cdist = 30, pdist = 25;    gpow = 6, dpow = 6, spow = 3;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != START_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = START_SET_PLAY;    }    BehaviorName = strdup("StartSetPlay");    StartSetPlay( &ChooseReceiverTree, cdist, pdist, gpow, 		  dpow, spow);    break;  case RIGHT_MID_SET_PLAY:    x = 0, y = -25, pbuf = 10;    cdist = 14, gpow = 10, spow = 6;    Marker = RF_FLAG;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != RIGHT_MID_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = RIGHT_MID_SET_PLAY;    }    BehaviorName = strdup("RightMidSetPlay");    TreeReceiveAndKnock(&ChooseNN,cdist,gpow,Marker,spow);    break;  case LEFT_MID_SET_PLAY:    x = 0, y = 25, pbuf = 10;    cdist = 14, gpow = 10, spow = 6;    Marker = LF_FLAG;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != LEFT_MID_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = LEFT_MID_SET_PLAY;    }    BehaviorName = strdup("LeftMidSetPlay");    TreeReceiveAndKnock(&ChooseNN,cdist,gpow,Marker,spow);    break;  case RIGHT_WINGER_SET_PLAY:    x = 40, y = -30;    pbuf = 10, cdist = 15, pdist = 35;    gpow = 10, dpow = 6, spow = 3;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != RIGHT_WINGER_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = RIGHT_WINGER_SET_PLAY;    }    BehaviorName = strdup("RightWingerSetPlay");    StartSetPlay( &ChooseReceiverTree, cdist, pdist, gpow, 		  dpow, spow);    break;  case LEFT_WINGER_SET_PLAY:    x = 40, y = 30;    pbuf = 10, cdist = 15, pdist = 35;    gpow = 10, dpow = 6, spow = 3;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != LEFT_WINGER_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = LEFT_WINGER_SET_PLAY;    }    BehaviorName = strdup("LeftWingerSetPlay");    StartSetPlay( &ChooseReceiverTree, cdist, pdist, gpow, 		  dpow, spow);    break;  case FINISH_SET_PLAY:    x = 35, y = 0, pbuf = 10;    cdist = 14, gpow = 10, spow = 6;    Marker = THEIR_GOAL;    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      PREGAMEMOVE(x,y);      FIRST_TIME = FALSE;    }    if (BEHAVIOR != FINISH_SET_PLAY){      Mem->SetCurrentHome(x,y);      BEHAVIOR = FINISH_SET_PLAY;    }    BehaviorName = strdup("FinishSetPlay");    TreeReceiveAndKnock(&ChooseNN,cdist,gpow,Marker,spow);    break;  case JUSTIN_KICK:    break; /* Action triggered by message from coach */  case JUSTIN_COLLECT:    break; /* Action triggered by message from coach */  }#if USE_RL  #define ACTFUNC &UseRL#else/*#define ACTFUNC &RandomOccupied*//*#define ACTFUNC &WorkTheWings*//*#define ACTFUNC &HighestDTOutput */#define ACTFUNC &ConsiderDTOutput#endif  switch(behavior){  case GOALIE:  case CENTER_SWEEPER:  case RIGHT_DEFENSE:  case CENTER_DEFENSE:  case LEFT_DEFENSE:  case RIGHT_MIDFIELD:  case CENTER_MIDFIELD:  case LEFT_MIDFIELD:  case RIGHT_WING:  case CENTER_FORWARD:  case LEFT_WING:    if ( FIRST_TIME ){      NORMAL_HIGH_VIEW;      /* formation = f352_FORMATION;         */      formation = f442_FORMATION;               /* formation = f72_FORMATION;          */      /* formation = f334_FORMATION;         */      /* formation = f244_FORMATION;         */#if PRACTICE      formation = f433_FORMATION;#endif      Mem->SetFormation(formation,Mem->CurrentTime);      Mem->ChangePositions = FALSE;       Mem->HomeChangeMethod = HOME_SHIFT;       Mem->UseSetPlays = FALSE;       Mem->UseUnitCoaching = FALSE;  /* makes marking happen */      Mem->EchoSounds = FALSE;      FIRST_TIME = FALSE;    }    if (BEHAVIOR != behavior){      Mem->SetMyPosition(position);      BEHAVIOR = behavior;    }    /* ReactToScoreAndTime(); */    /* SwitchRightLeft();     */    /* SinglePlayerSwitch();  */    if ( Mem->PlayMode == BEFORE_KICK_OFF ){      if( Mem->InKickoffPosition() ){	Mem->CheckForPlayersInMyPosition();      }      else{  /* Not in kickoff position */	Mem->Reset();  /* Erases memory, active status, currenthome, etc. */		position = Mem->GetMyPosition();	float goalX,goalY;	if ( Mem->SetPlay && Mem->MyPositionInSetPlay() )	  Mem->GetMySetPlayXY(&goalX,&goalY);	else if ( Mem->BallValid() ){	  Mem->UpdateHome();	  goalX = Mem->GetCurrentHomeX();	  goalY = Mem->GetCurrentHomeY();	}	else{	  Mem->GetMyPositionXY(&goalX,&goalY);	}		PREGAMEMOVE(goalX,goalY);		WAITFORSIGHT; /* Wait until in the actual position */	if ( Mem->InKickoffPosition() )	  ANNOUNCEMYPOSITION;      }    }    if ( Mem->UseSetPlays && Mem->PlayMode != PLAY_ON ){      if ( !Mem->SetPlay )	Mem->InitializeSetPlay();      else if ( Mem->MyPositionInSetPlay() )  /* There's a set play on */	Mem->SetMyselfInSetPlay();      else                                    /* I'm not in it         */	Mem->SetMyselfInactive();    }    else       Mem->SetPlay = FALSE;  /* Should already be in SetPlay ActiveStatus (if in play) */#if 0    int ChangeTime = 18000*6;    int NumFormations = 6;    if ( Mem->CurrentTime>10 && (Mem->CurrentTime)%ChangeTime < 7){      int newFormationType = ((Mem->CurrentTime/ChangeTime)%NumFormations)+1;      Mem->SetFormation(newFormationType,Mem->CurrentTime);    }    /* Mem->HomeChangeMethod = HOME_OBEY; */#endif#if 1    /* Asssuming we always want high quality view if we're not in a tight loop */    /* Corrects for possible missed high_quality command                       */    if (Mem->BallValid()){      float bdist = Mem->GetBallDistance();      if ( bdist > 50 )	WIDE_HIGH_VIEW;      else if (bdist > 25)	NORMAL_HIGH_VIEW;      else	NARROW_HIGH_VIEW;    }#endif    /* if ( strcmp(Mem->GetMyStatus(),BLANK_STAT) )      printf("%d:%d status== %s\n",Mem->MyNumber,Mem->CurrentTime,Mem->GetMyStatus());*/#if PRACTICE     Mem->ChangePositions = FALSE;    Mem->HomeChangeMethod = HOME_OBEY;    Mem->SetPlay = FALSE;#endif#if 0      Mem->HomeChangeMethod = HOME_OBEY;       Mem->SetPlay = FALSE;#endif    ChangePositionsAndAct( ACTFUNC, gpow, spow );    if ( Mem->UseUnitCoaching && !Mem->NewSight ){      /* Do captainly stuff if there's time left over */      for (int i=0; i<Mem->GetCurrentFormation()->GetNumUnits(); i++){	if ( Mem->AmUnitCaptain(i) )	  DirectUnit(i);      }    }    if ( Mem->EchoSounds && !Mem->NewSight ){      if ( !int_random(1000) )	ECHOTHEIRSOUND;    }    if ( Mem->QActionTaken )      Mem->LookForRewards();    break;  }}

⌨️ 快捷键说明

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