📄 formation.c
字号:
PreferenceList[3] = (LocationSide == RIGHT) ? f442_RIGHT_MIDFIELD :f442_LEFT_MIDFIELD; PreferenceList[4] = (LocationSide == RIGHT) ? f442_LEFT_MIDFIELD :f442_RIGHT_MIDFIELD; break; case f442_RIGHT_MIDFIELD: case f442_LEFT_MIDFIELD: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f442_RIGHT_WING : f442_LEFT_WING; PreferenceList[1] = f442_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[2] = (LocationSide == RIGHT) ? f442_LEFT_WING : f442_RIGHT_WING; PreferenceList[3] = f442_DEFENSIVE_CENTER_MIDFIELD; break; case f442_CENTER_DEFENSE: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f442_RIGHT_MIDFIELD : f442_LEFT_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f442_LEFT_MIDFIELD : f442_RIGHT_MIDFIELD; PreferenceList[2] = f442_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[3] = f442_DEFENSIVE_CENTER_MIDFIELD; break; case f442_RIGHT_DEFENSE: case f442_LEFT_DEFENSE: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f442_RIGHT_MIDFIELD : f442_LEFT_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f442_RIGHT_WING : f442_LEFT_WING; PreferenceList[2] = f442_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[3] = f442_DEFENSIVE_CENTER_MIDFIELD; break; case f442_SWEEPER: case f442_GOALIE: NumOptions = 8; PreferenceList[0] = (LocationSide == RIGHT) ? f442_RIGHT_DEFENSE : f442_LEFT_DEFENSE; PreferenceList[1] = (LocationSide == RIGHT) ? f442_LEFT_DEFENSE : f442_RIGHT_DEFENSE; PreferenceList[2] = (LocationSide == RIGHT) ? f442_RIGHT_MIDFIELD : f442_LEFT_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f442_LEFT_MIDFIELD : f442_RIGHT_MIDFIELD; PreferenceList[4] = f442_OFFENSIVE_CENTER_MIDFIELD; PreferenceList[5] = f442_DEFENSIVE_CENTER_MIDFIELD; PreferenceList[6] = (LocationSide == RIGHT) ? f442_RIGHT_WING : f442_LEFT_WING; PreferenceList[7] = (LocationSide == RIGHT) ? f442_LEFT_WING : f442_RIGHT_WING; break; } for (int i = NumOptions; i<TEAM_SIZE; i++) PreferenceList[i] = position; /* Pad list with own number, meaning no receiver */}/************************ 3-5-2 Formation ********************************/#define f352_GOALIE_BUF 2#define f352_POSITION_BUF 3#define f352_GOALTENDERX (-52)#define f352_SWEEPERX (-43)#define f352_DEFENDERX (-35)#define f352_MIDFIELDERX 0#define f352_FORWARDX 30#define f352_LEFTY 30 /*25*/#define f352_INSIDELEFTY 15#define f352_CENTERY 0#define f352_INSIDERIGHTY (-f352_INSIDELEFTY)#define f352_RIGHTY (-f352_LEFTY)#define f352_HOMEXRANGE f352_FORWARDX#define f352_HOMEYRANGE f352_LEFTY#define f352_MAXXRANGE (f352_FORWARDX*2)#define f352_MAXYRANGE (((Y0+5) - f352_LEFTY)*2)#define f352_INSIDE_MAXYRANGE (((Y0+5) - f352_INSIDELEFTY)*2)void Initialize_352_Formation(Formation *formation){ /* set position within goal stay, in penalty box */ formation->SetPosition(f352_GOALIE, f352_GOALTENDERX, f352_CENTERY, f352_GOALIE_BUF, (X0- (-f352_GOALTENDERX))*2, GOAL_WIDTH, /*(-f352_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-f352_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); /* set position inside penalty box, don't go more than half-way to mid */ formation->SetPosition(f352_SWEEPER, f352_SWEEPERX, f352_CENTERY, f352_POSITION_BUF, (X0- (-f352_SWEEPERX))*2, PA_Y*2, -f352_SWEEPERX - X0/2, (Y0+5)*2, GOALIEMAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_RIGHT_DEFENSE, f352_DEFENDERX, f352_INSIDERIGHTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_LEFT_DEFENSE, f352_DEFENDERX, f352_INSIDELEFTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_RIGHT_OUTSIDE_MIDFIELD, f352_MIDFIELDERX, f352_RIGHTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, (X0+5)*2,f352_MAXYRANGE, /* can go whole length of field */ MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_RIGHT_INSIDE_MIDFIELD, f352_MIDFIELDERX-10, f352_INSIDERIGHTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_CENTER_MIDFIELD, f352_MIDFIELDERX+9, f352_CENTERY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_LEFT_INSIDE_MIDFIELD, f352_MIDFIELDERX-10, f352_INSIDELEFTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_LEFT_OUTSIDE_MIDFIELD, f352_MIDFIELDERX, f352_LEFTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, (X0+5)*2, f352_MAXYRANGE, /* can go whole length of field */ MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_RIGHT_WING, f352_FORWARDX, f352_INSIDERIGHTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f352_LEFT_WING, f352_FORWARDX, f352_INSIDELEFTY, f352_POSITION_BUF, f352_HOMEXRANGE,f352_HOMEYRANGE, f352_MAXXRANGE ,f352_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); int defenders[4] = {f352_GOALIE, f352_SWEEPER, f352_RIGHT_DEFENSE, f352_LEFT_DEFENSE}; formation->GetUnit(DEFENSIVE_UNIT)->InitializeUnit(DEFENSIVE_UNIT, 4, defenders, 0); int midfielders[5] = {f352_CENTER_MIDFIELD, f352_RIGHT_OUTSIDE_MIDFIELD, f352_LEFT_OUTSIDE_MIDFIELD, f352_RIGHT_INSIDE_MIDFIELD, f352_LEFT_INSIDE_MIDFIELD}; formation->GetUnit(MIDFIELD_UNIT)->InitializeUnit(MIDFIELD_UNIT, 5, midfielders, 0); int forwards[2] = {f352_RIGHT_WING, f352_LEFT_WING}; formation->GetUnit(FORWARD_UNIT)->InitializeUnit(FORWARD_UNIT, 2, forwards, 0); int rights[3] = {f352_RIGHT_DEFENSE, f352_RIGHT_OUTSIDE_MIDFIELD, f352_RIGHT_WING}; formation->GetUnit(RIGHT_UNIT)->InitializeUnit(RIGHT_UNIT, 3, rights, 1); int centers[5] = {f352_GOALIE, f352_SWEEPER, f352_CENTER_MIDFIELD, f352_RIGHT_INSIDE_MIDFIELD, f352_LEFT_INSIDE_MIDFIELD}; formation->GetUnit(CENTER_UNIT)->InitializeUnit(CENTER_UNIT, 5, centers, 2); int lefts[3] = {f352_LEFT_DEFENSE, f352_LEFT_OUTSIDE_MIDFIELD, f352_LEFT_WING}; formation->GetUnit(LEFT_UNIT)->InitializeUnit(LEFT_UNIT, 3, lefts, 1);}int *Build_352_ReceiverList(int *PreferenceList, int position){ int NumOptions=0; int Side = Mem->GetMyPositionSide(); int LocationSide = Mem->GetMyLocationSide(); switch ( position ){ case f352_LEFT_WING: NumOptions = (int_random(3) ? 1 : 0); /* shoot 1 in 3 times */ PreferenceList[0] = f352_RIGHT_WING; break; case f352_RIGHT_WING: NumOptions = (int_random(3) ? 1 : 0); /* shoot 1 in 3 times */ PreferenceList[0] = f352_LEFT_WING; break; case f352_CENTER_MIDFIELD: NumOptions = 4; PreferenceList[0] = (LocationSide == RIGHT) ? f352_RIGHT_WING : f352_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f352_LEFT_WING : f352_RIGHT_WING; PreferenceList[2] = (LocationSide == RIGHT) ? f352_RIGHT_OUTSIDE_MIDFIELD : f352_LEFT_OUTSIDE_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f352_LEFT_OUTSIDE_MIDFIELD : f352_RIGHT_OUTSIDE_MIDFIELD; break; case f352_RIGHT_OUTSIDE_MIDFIELD: case f352_LEFT_OUTSIDE_MIDFIELD: NumOptions = 3; PreferenceList[0] = (LocationSide == RIGHT) ? f352_RIGHT_WING : f352_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f352_LEFT_WING : f352_RIGHT_WING; PreferenceList[2] = f352_CENTER_MIDFIELD; break; case f352_RIGHT_INSIDE_MIDFIELD: case f352_LEFT_INSIDE_MIDFIELD: NumOptions = 6; PreferenceList[0] = (LocationSide == RIGHT) ? f352_RIGHT_WING : f352_LEFT_WING; PreferenceList[1] = (LocationSide == RIGHT) ? f352_RIGHT_OUTSIDE_MIDFIELD : f352_LEFT_OUTSIDE_MIDFIELD; PreferenceList[2] = f352_CENTER_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f352_LEFT_WING : f352_RIGHT_WING; PreferenceList[4] = (LocationSide == RIGHT) ? f352_LEFT_OUTSIDE_MIDFIELD : f352_RIGHT_OUTSIDE_MIDFIELD; PreferenceList[5] = (Side == RIGHT) ? f352_LEFT_INSIDE_MIDFIELD : f352_RIGHT_INSIDE_MIDFIELD; break; case f352_RIGHT_DEFENSE: case f352_LEFT_DEFENSE: case f352_SWEEPER: case f352_GOALIE: NumOptions = 7; PreferenceList[0] = (LocationSide == RIGHT) ? f352_RIGHT_OUTSIDE_MIDFIELD : f352_LEFT_OUTSIDE_MIDFIELD; PreferenceList[1] = (LocationSide == RIGHT) ? f352_RIGHT_INSIDE_MIDFIELD : f352_LEFT_INSIDE_MIDFIELD; PreferenceList[2] = (LocationSide == RIGHT) ? f352_LEFT_OUTSIDE_MIDFIELD : f352_RIGHT_OUTSIDE_MIDFIELD; PreferenceList[3] = (LocationSide == RIGHT) ? f352_LEFT_INSIDE_MIDFIELD : f352_RIGHT_INSIDE_MIDFIELD; PreferenceList[4] = f352_CENTER_MIDFIELD; PreferenceList[5] = (LocationSide == RIGHT) ? f352_RIGHT_WING : f352_LEFT_WING; PreferenceList[6] = (LocationSide == RIGHT) ? f352_LEFT_WING : f352_RIGHT_WING; break; } for (int i = NumOptions; i<TEAM_SIZE; i++) PreferenceList[i] = position; /* Pad list with own number, meaning no receiver */}/************************ 7-2 Formation ********************************/#define f72_GOALIE_BUF 2#define f72_POSITION_BUF 3#define f72_GOALTENDERX (-52)#define f72_DEFENDERX (-43)#define f72_MIDFIELDERX (-20)#define f72_FORWARDX 17 /* > ROUGH_FORWARDX/2 so treated as a forward */#define f72_LEFTY 25#define f72_INSIDELEFTY 15#define f72_CENTERY 0#define f72_INSIDERIGHTY (-f72_INSIDELEFTY)#define f72_RIGHTY (-f72_LEFTY)#define f72_HOMEXRANGE 15#define f72_HOMEYRANGE f72_INSIDELEFTY#define f72_MAXXRANGE 30#define f72_MAXYRANGE (((Y0+5) - f72_LEFTY)*2)#define f72_INSIDE_MAXYRANGE (((Y0+5) - f72_INSIDELEFTY)*2)void Initialize_72_Formation(Formation *formation){ /* set position within goal stay, in penalty box */ formation->SetPosition(f72_RIGHT_GOALIE, f72_GOALTENDERX, f72_CENTERY-(GOAL_WIDTH/4), f72_GOALIE_BUF, (X0- (-f72_GOALTENDERX))*2, GOAL_WIDTH/2, /*(-f72_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-f72_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); formation->SetPosition(f72_LEFT_GOALIE, f72_GOALTENDERX, f72_CENTERY+(GOAL_WIDTH/4), f72_GOALIE_BUF, (X0- (-f72_GOALTENDERX))*2, GOAL_WIDTH/2, /*(-f72_GOALTENDERX - PA_X)*2, PA_Y*2, */ (X0- (-f72_GOALTENDERX))*2, GOAL_WIDTH, GOALIEMAXACTIVEDIST, MININACTIVEDIST, FALSE); formation->SetPosition(f72_RIGHT_DEFENSE, f72_DEFENDERX, f72_INSIDERIGHTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_CENTER_DEFENSE, f72_DEFENDERX+5, f72_CENTERY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_LEFT_DEFENSE, f72_DEFENDERX, f72_INSIDELEFTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_RIGHT_OUTSIDE_MIDFIELD, f72_MIDFIELDERX, f72_RIGHTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_RIGHT_INSIDE_MIDFIELD, f72_MIDFIELDERX-5, f72_INSIDERIGHTY+5, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_LEFT_INSIDE_MIDFIELD, f72_MIDFIELDERX-5, f72_INSIDELEFTY-5, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_LEFT_OUTSIDE_MIDFIELD, f72_MIDFIELDERX, f72_LEFTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_MAXYRANGE, MAXACTIVEDIST, MININACTIVEDIST, TRUE); formation->SetPosition(f72_RIGHT_WING, f72_FORWARDX, f72_INSIDERIGHTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, 60, MININACTIVEDIST, TRUE); /* Need to go to the corners */ formation->SetPosition(f72_LEFT_WING, f72_FORWARDX, f72_INSIDELEFTY, f72_POSITION_BUF, f72_HOMEXRANGE,f72_HOMEYRANGE, f72_MAXXRANGE ,f72_INSIDE_MAXYRANGE, 60, MININACTIVEDIST, TRUE); /* Need to go to the corners */ /* 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); int defenders[9] = {f72_RIGHT_GOALIE, f72_LEFT_GOALIE, f72_RIGHT_DEFENSE, f72_CENTER_DEFENSE, f72_LEFT_DEFENSE, f72_RIGHT_INSIDE_MIDFIELD, f72_LEFT_INSIDE_MIDFIELD, f72_RIGHT_OUTSIDE_MIDFIELD, f72_LEFT_OUTSIDE_MIDFIELD}; formation->GetUnit(DEFENSIVE_UNIT)->InitializeUnit(DEFENSIVE_UNIT, 9, defenders, 0); int midfielders[4] = {f72_RIGHT_INSIDE_MIDFIELD, f72_LEFT_INSIDE_MIDFIELD, f72_RIGHT_OUTSIDE_MIDFIELD, f72_LEFT_OUTSIDE_MIDFIELD}; formation->GetUnit(MIDFIELD_UNIT)->InitializeUnit(MIDFIELD_UNIT, 4, midfielders, 0); int forwards[2] = {f72_RIGHT_WING, f72_LEFT_WING}; formation->GetUnit(FORWARD_UNIT)->InitializeUnit(FORWARD_UNIT, 2, forwards, 0); int rights[3] = {f72_RIGHT_DEFENSE, f72_RIGHT_OUTSIDE_MIDFIELD, f72_RIGHT_WING}; formation->GetUnit(RIGHT_UNIT)->InitializeUnit(RIGHT_UNIT, 3, rights, 1); int centers[5] = {f72_RIGHT_GOALIE, f72_LEFT_GOALIE, f72_CENTER_DEFENSE, f72_RIGHT_INSIDE_MIDFIELD, f72_LEFT_INSIDE_MIDFIELD}; formation->GetUnit(CENTER_UNIT)->InitializeUnit(CENTER_UNIT, 5, centers, 3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -