📄 formation.c
字号:
int NumOptions=0; int Side = Mem->GetMyPositionSide(); int LocationSide = Mem->GetMyLocationSide(); switch ( position ){ case f244_LEFT_INSIDE_FORWARD: case f244_RIGHT_INSIDE_FORWARD: break; /* shoot */ case f244_LEFT_WING: NumOptions = (int_random(3) ? 3 : 0); /* shoot 1 in 3 times */ PreferenceList[0] = f244_LEFT_INSIDE_FORWARD; PreferenceList[1] = f244_RIGHT_INSIDE_FORWARD; PreferenceList[2] = f244_RIGHT_WING; break; case f244_RIGHT_WING: NumOptions = (int_random(3) ? 3 : 0); /* shoot 1 in 3 times */ PreferenceList[0] = f244_RIGHT_INSIDE_FORWARD; PreferenceList[1] = f244_LEFT_INSIDE_FORWARD; PreferenceList[2] = f244_LEFT_WING; break; case f244_OFFENSIVE_CENTER_MIDFIELD: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f244_RIGHT_WING : f244_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f244_LEFT_WING : f244_RIGHT_WING; PreferenceList[2] = (LocationSide == RIGHT) ? f244_RIGHT_INSIDE_FORWARD : f244_LEFT_INSIDE_FORWARD; PreferenceList[3] = (LocationSide == RIGHT) ? f244_LEFT_INSIDE_FORWARD : f244_RIGHT_INSIDE_FORWARD; break; case f244_DEFENSIVE_CENTER_MIDFIELD: NumOptions = 7; PreferenceList[0] = (LocationSide == RIGHT) ? f244_RIGHT_WING : f244_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f244_LEFT_WING : f244_RIGHT_WING; PreferenceList[2] = (LocationSide == RIGHT) ? f244_RIGHT_INSIDE_FORWARD : f244_LEFT_INSIDE_FORWARD; PreferenceList[3] = (LocationSide == RIGHT) ? f244_LEFT_INSIDE_FORWARD : f244_RIGHT_INSIDE_FORWARD; PreferenceList[4] = f244_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[5] = (LocationSide == RIGHT) ? f244_RIGHT_MIDFIELD :f244_LEFT_MIDFIELD; PreferenceList[6] = (LocationSide == RIGHT) ? f244_LEFT_MIDFIELD :f244_RIGHT_MIDFIELD; break; case f244_RIGHT_MIDFIELD: case f244_LEFT_MIDFIELD: NumOptions = 5; PreferenceList[0] = (Side == RIGHT) ? f244_RIGHT_WING : f244_LEFT_WING; PreferenceList[1] = (Side == RIGHT) ? f244_RIGHT_INSIDE_FORWARD : f244_LEFT_INSIDE_FORWARD; PreferenceList[2] = (Side == RIGHT) ? f244_LEFT_INSIDE_FORWARD : f244_RIGHT_INSIDE_FORWARD; PreferenceList[3] = f244_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[4] = (Side == RIGHT) ? f244_LEFT_WING : RIGHT_WING; break; case f244_RIGHT_DEFENSE: case f244_LEFT_DEFENSE: case f244_GOALIE: NumOptions = 7; PreferenceList[0] = (LocationSide == RIGHT) ? f244_RIGHT_MIDFIELD : f244_LEFT_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f244_RIGHT_WING : f244_LEFT_WING; PreferenceList[2] = (Side == RIGHT) ? f244_RIGHT_INSIDE_FORWARD : f244_LEFT_INSIDE_FORWARD; PreferenceList[3] = f244_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[4] = (LocationSide == RIGHT) ? f244_LEFT_MIDFIELD : f244_RIGHT_MIDFIELD; PreferenceList[5] = (Side == RIGHT) ? f244_LEFT_INSIDE_FORWARD : f244_RIGHT_INSIDE_FORWARD; PreferenceList[6] = (LocationSide == RIGHT) ? f244_LEFT_WING : f244_RIGHT_WING; break; } for (int i = NumOptions; i<TEAM_SIZE; i++) PreferenceList[i] = position; /* Pad list with own number, meaning no receiver */}/************************ 4-3-2 Formation ********************************/#define f432_GOALIE_BUF 2#define f432_POSITION_BUF 3#define f432_GOALTENDERX (-52)#define f432_SWEEPERX (-43)#define f432_DEFENDERX (-35)#define f432_MIDFIELDERX 0#define f432_FORWARDX 30#define f432_LEFTY 25#define f432_INSIDELEFTY 15#define f432_CENTERY 0#define f432_INSIDERIGHTY (-f432_INSIDELEFTY)#define f432_RIGHTY (-f432_LEFTY)#define f432_HOMEXRANGE f432_FORWARDX#define f432_HOMEYRANGE f432_LEFTY#define f432_MAXXRANGE (f432_FORWARDX*2)#define f432_MAXYRANGE (((Y0+5) - f432_LEFTY)*2)#define f432_INSIDE_MAXYRANGE (((Y0+5) - f432_INSIDELEFTY)*2)void Initialize_432_Formation(Formation *formation){ /* set position within goal stay, in penalty box */ formation->SetPosition(f432_RIGHT_GOALIE, f432_GOALTENDERX, f432_CENTERY-(GOAL_WIDTH/4), f432_GOALIE_BUF, (X0- (-f432_GOALTENDERX))*2, GOAL_WIDTH/2, /*(-f432_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-f432_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); formation->SetPosition(f432_LEFT_GOALIE, f432_GOALTENDERX, f432_CENTERY+(GOAL_WIDTH/4), f432_GOALIE_BUF, (X0- (-f432_GOALTENDERX))*2, GOAL_WIDTH/2, /*(-f432_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-f432_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); /* set position inside penalty box, don't go more than half-way to mid */ formation->SetPosition(f432_SWEEPER, f432_SWEEPERX, f432_CENTERY, f432_POSITION_BUF, (X0- (-f432_SWEEPERX))*2, PA_Y*2, -f432_SWEEPERX - X0/2, (Y0+5)*2, GOALIEMAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_RIGHT_DEFENSE, f432_DEFENDERX, f432_RIGHTY+13, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_CENTER_DEFENSE, f432_DEFENDERX+5, f432_CENTERY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_LEFT_DEFENSE, f432_DEFENDERX, f432_LEFTY-13, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_RIGHT_MIDFIELD, f432_MIDFIELDERX, f432_RIGHTY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_CENTER_MIDFIELD, f432_MIDFIELDERX, f432_CENTERY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_LEFT_MIDFIELD, f432_MIDFIELDERX, f432_LEFTY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_RIGHT_WING, f432_FORWARDX, f432_INSIDERIGHTY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f432_LEFT_WING, f432_FORWARDX, f432_INSIDELEFTY, f432_POSITION_BUF, f432_HOMEXRANGE,f432_HOMEYRANGE, f432_MAXXRANGE ,f432_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); /* Candidate receivers will be chosen on the fly here */ int dummylist[TEAM_SIZE]; for (int i=0; i<TEAM_SIZE; i++) formation->SetCandidateReceivers(i,0,dummylist); formation->AllocateUnits(6); /* Positions listed in order of importance, captain indicated as index into list */ int defenders[6] = {f432_RIGHT_GOALIE, f432_LEFT_GOALIE, f432_SWEEPER, f432_CENTER_DEFENSE, f432_RIGHT_DEFENSE, f432_LEFT_DEFENSE}; formation->GetUnit(DEFENSIVE_UNIT)->InitializeUnit(DEFENSIVE_UNIT, 6, defenders, 0); int midfielders[3] = {f432_CENTER_MIDFIELD, f432_RIGHT_MIDFIELD, f432_LEFT_MIDFIELD}; formation->GetUnit(MIDFIELD_UNIT)->InitializeUnit(MIDFIELD_UNIT, 3, midfielders, 0); int forwards[2] = {f432_RIGHT_WING, f432_LEFT_WING}; formation->GetUnit(FORWARD_UNIT)->InitializeUnit(FORWARD_UNIT, 3, forwards, 0); int rights[3] = {f432_RIGHT_DEFENSE, f432_RIGHT_MIDFIELD, f432_RIGHT_WING}; formation->GetUnit(RIGHT_UNIT)->InitializeUnit(RIGHT_UNIT, 3, rights, 1); int centers[5] = {f432_RIGHT_GOALIE, f432_LEFT_GOALIE, f432_SWEEPER, f432_CENTER_DEFENSE, f432_CENTER_MIDFIELD}; formation->GetUnit(CENTER_UNIT)->InitializeUnit(CENTER_UNIT, 5, centers, 4); int lefts[3] = {f432_LEFT_DEFENSE, f432_LEFT_MIDFIELD, f432_LEFT_WING}; formation->GetUnit(LEFT_UNIT)->InitializeUnit(LEFT_UNIT, 3, lefts, 1);}int *Build_432_ReceiverList(int *PreferenceList, int position){ int NumOptions=0; int Side = Mem->GetMyPositionSide(); int LocationSide = Mem->GetMyLocationSide(); switch ( position ){ case f442_LEFT_WING: case f442_RIGHT_WING: NumOptions = (int_random(3) ? 1 : 0); /* shoot 1 in 3 times */ PreferenceList[0] = (Side == RIGHT) ? f442_LEFT_WING : f442_RIGHT_WING; break; case f432_CENTER_MIDFIELD: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f432_RIGHT_WING : f432_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f432_LEFT_WING : f432_RIGHT_WING; PreferenceList[2] = (LocationSide == RIGHT) ? f432_RIGHT_MIDFIELD :f432_LEFT_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f432_LEFT_MIDFIELD :f432_RIGHT_MIDFIELD; break; case f432_RIGHT_MIDFIELD: case f432_LEFT_MIDFIELD: NumOptions = 3; PreferenceList[0] = (LocationSide == RIGHT) ? f432_RIGHT_WING : f432_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f432_LEFT_WING : f432_RIGHT_WING; PreferenceList[2] = f432_CENTER_MIDFIELD; break; case f432_CENTER_DEFENSE: NumOptions = 3; PreferenceList[0] = (LocationSide == RIGHT) ? f432_RIGHT_MIDFIELD : f432_LEFT_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f432_LEFT_MIDFIELD : f432_RIGHT_MIDFIELD; PreferenceList[2] = f432_CENTER_MIDFIELD; break; case f432_RIGHT_DEFENSE: case f432_LEFT_DEFENSE: NumOptions = 3; PreferenceList[0] = (LocationSide == RIGHT) ? f432_RIGHT_MIDFIELD : f432_LEFT_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f432_RIGHT_WING : f432_LEFT_WING; PreferenceList[2] = f432_CENTER_MIDFIELD; break; case f432_SWEEPER: NumOptions = 7; PreferenceList[0] = (LocationSide == RIGHT) ? f432_RIGHT_DEFENSE : f432_LEFT_DEFENSE; PreferenceList[1] = (LocationSide == RIGHT) ? f432_LEFT_DEFENSE : f432_RIGHT_DEFENSE; PreferenceList[2] = (LocationSide == RIGHT) ? f432_RIGHT_MIDFIELD : f432_LEFT_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f432_LEFT_MIDFIELD : f432_RIGHT_MIDFIELD; PreferenceList[4] = f432_CENTER_MIDFIELD; PreferenceList[5] = (LocationSide == RIGHT) ? f432_RIGHT_WING : f432_LEFT_WING; PreferenceList[6] = (LocationSide == RIGHT) ? f432_LEFT_WING : f432_RIGHT_WING; break; case f432_RIGHT_GOALIE: case f432_LEFT_GOALIE: break; /* clear */ } for (int i = NumOptions; i<TEAM_SIZE; i++) PreferenceList[i] = position; /* Pad list with own number, meaning no receiver */}/************************ RIGHT Formation ********************************/#define fRT_GOALIE_BUF 2#define fRT_POSITION_BUF 3#define fRT_GOALTENDERX (-52)#define fRT_FULLBACKX (-35)#define fRT_QTRBACKX (-15)#define fRT_HALFBACKX 0#define fRT_3QTRBACKX 12#define fRT_FORWARDX 30#define fRT_OUTSIDEY (-22)#define fRT_INSIDEY (-7)#define fRT_CENTERY 0#define fRT_HOMEXRANGE 20#define fRT_HOMEYRANGE 10#define fRT_MAXXRANGE 30#define fRT_MAXYRANGE 30void Initialize_RT_Formation(Formation *formation){ /* set position within goal stay, in penalty box */ formation->SetPosition(fRT_GOALIE, fRT_GOALTENDERX, fRT_CENTERY, fRT_GOALIE_BUF, (X0- (-fRT_GOALTENDERX))*2, GOAL_WIDTH, /*(-fRT_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-fRT_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); formation->SetPosition(fRT_INSIDE_FULLBACK, fRT_FULLBACKX, fRT_INSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_OUTSIDE_FULLBACK, fRT_FULLBACKX, fRT_OUTSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_INSIDE_QTRBACK, fRT_QTRBACKX, fRT_INSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_OUTSIDE_QTRBACK, fRT_QTRBACKX, fRT_OUTSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_INSIDE_HALFBACK, fRT_HALFBACKX, fRT_INSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_OUTSIDE_HALFBACK, fRT_HALFBACKX, fRT_OUTSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_INSIDE_3QTRBACK, fRT_3QTRBACKX, fRT_INSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_OUTSIDE_3QTRBACK, fRT_3QTRBACKX, fRT_OUTSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_INSIDE_FORWARD, fRT_FORWARDX, fRT_INSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(fRT_OUTSIDE_FORWARD, fRT_FORWARDX, fRT_OUTSIDEY, fRT_POSITION_BUF, fRT_HOMEXRANGE,fRT_HOMEYRANGE, fRT_MAXXRANGE ,fRT_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); /* Candidate receivers will be chosen on the fly here */ int receiverlist[TEAM_SIZE] = {fRT_INSIDE_FORWARD,fRT_OUTSIDE_FORWARD, fRT_INSIDE_3QTRBACK,fRT_OUTSIDE_3QTRBACK,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -