📄 behave.c
字号:
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 + -