?? nonplayondecision.cpp
字號:
homeBall.setByPoints(positions[i], worldModel->getBall().getPos()); if (homeBall.getMagnitude() < nearestDistance) nearestDistance = homeBall.getMagnitude(); }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : nearestdist" << nearestDistance << endl;#endif myHome = positions[worldModel->getBody().getUniNum() - 1]; homeBall.setByPoints(myHome, worldModel->getBall().getPos());#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : mydist" << homeBall.getMagnitude() << endl;#endif if (homeBall.getMagnitude() < nearestDistance + EPS) return 2; else return 1; }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : normal" << endl;#endif actualPlayModeRemainCycles = worldModel->getPlayModeRemainCycle(); actualPlayModeStayCycles = (unsigned)worldModel->getServerParam()["drop_ball_time"].asInt(); if (worldModel->getPlayMode() == PM_OFFSIDE_OPP || worldModel->getPlayMode() == PM_FREE_KICK_FAULT_OPP || worldModel->getPlayMode() == PM_CATCH_FAULT_OPP) { return 1; } #ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : actualPlayModeRemainCycles" << actualPlayModeRemainCycles << endl;LOG << "selectKicker : actualPlayModeStayCycles" << actualPlayModeStayCycles << endl;#endif if (actualPlayModeRemainCycles > actualPlayModeStayCycles - 6) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : wait cycles (return 1)" << endl;#endif return 1; } nearestDistance = 10000; for (i = 0; i < FULL_PLAYERS_NUM; i++) { if (i + 1 == GOALIE_UNIFORM_NUM) continue; // Goalie if (i + 1 == worldModel->getBody().getUniNum()) continue; // Body homeBall.setByPoints(positions[i], worldModel->getBall().getPos()); if (homeBall.getMagnitude() < nearestDistance) nearestDistance = homeBall.getMagnitude(); }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : nearestdist(w/o body)" << nearestDistance << endl;#endif myHome = positions[worldModel->getBody().getUniNum() - 1]; homeBall.setByPoints(myHome, worldModel->getBall().getPos());#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : mydist" << homeBall.getMagnitude() << endl;#endif if (homeBall.getMagnitude() > nearestDistance + 20) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : normal very far(return 1)" << endl;#endif return 1; } if (worldModel->getFreeKickAdvicerSayCycle() <= worldModel->getCurTime() - (actualPlayModeStayCycles - actualPlayModeRemainCycles)) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : late advice(return 1)" << endl;#endif return 1; }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : listening to advice" << worldModel->getFreeKickAdvicerSayNumber() << endl;#endif if (worldModel->getFreeKickAdvicerSayNumber() == worldModel->getBody().getUniNum()) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : listening to advice i go" << endl;#endif return 2; } else {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : listening to advice i don't go" << endl;#endif return 1; } return 1;}void NonPlayOnDecision::selectBallKickerSay(Point positions[11], Form &form){ Point myHome; Vector homeBall; float nearestDistance; unsigned nearestPlayer; unsigned i; unsigned actualPlayModeStayCycles,actualPlayModeRemainCycles; actualPlayModeRemainCycles = worldModel->getPlayModeRemainCycle(); actualPlayModeStayCycles = (unsigned)worldModel->getServerParam()["drop_ball_time"].asInt(); if (worldModel->getPlayMode() == PM_OFFSIDE_OPP || worldModel->getPlayMode() == PM_FREE_KICK_FAULT_OPP || worldModel->getPlayMode() == PM_CATCH_FAULT_OPP) { return; }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : actualPlayModeRemainCycles" << actualPlayModeRemainCycles << endl;LOG << "selectKickerSay : actualPlayModeStayCycles" << actualPlayModeStayCycles << endl;#endif form.sayForm.freeKickSay = false; if (actualPlayModeRemainCycles >= actualPlayModeStayCycles - 1) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : reset savedAdvicePlayer" << endl;#endif savedAdvicePlayer = -1; } if (actualPlayModeRemainCycles < actualPlayModeStayCycles - 1 && worldModel->getBall().getSeeTime() > worldModel->getCurTime() - (actualPlayModeStayCycles - actualPlayModeRemainCycles)) { if (worldModel->getBody().getUniNum() == FREE_KICK_ADVICER) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : advice" << endl;LOG << "selectKickerSay : current advice=" << savedAdvicePlayer << endl;#endif if (savedAdvicePlayer == -1) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : find advice" << endl;#endif if (!worldModel->getBody().isGoalie() && worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : find advice" << endl;#endif savedAdvicePlayer = 1; } else if (worldModel->getPlayMode() == PM_CORNER_KICK) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : corner kick" << endl;#endif if (worldModel->getBall().getPos().getY() > 0) savedAdvicePlayer = 10; else savedAdvicePlayer = 11; } else if (worldModel->getPlayMode() == PM_KICK_IN && worldModel->getBall().getPos().getX() >= 35) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : near corner kick" << endl;#endif if (worldModel->getBall().getPos().getY() > 0) savedAdvicePlayer = 10; else savedAdvicePlayer = 11; } else { nearestDistance = 100000; nearestPlayer = worldModel->getBody().getUniNum(); for (i = 0; i < FULL_PLAYERS_NUM; i++) { if (i + 1 == GOALIE_UNIFORM_NUM) continue; // Goalie homeBall.setByPoints(positions[i], worldModel->getBall().getPos()); if (homeBall.getMagnitude() < nearestDistance) { nearestPlayer = i + 1; nearestDistance = homeBall.getMagnitude(); } } savedAdvicePlayer = nearestPlayer; } } form.sayForm.freeKickSay = true; form.sayForm.freeKickAdviceNumber = savedAdvicePlayer; form.sayForm.attentionNum = savedAdvicePlayer;#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : finded advice=" << savedAdvicePlayer << endl;#endif } else {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : listener" << endl;#endif if (worldModel->getFreeKickAdvicerSayCycle() > worldModel->getCurTime() - (actualPlayModeStayCycles - actualPlayModeRemainCycles)) { form.sayForm.freeKickSay = true; form.sayForm.freeKickAdviceNumber = worldModel->getFreeKickAdvicerSayNumber(); form.sayForm.attentionNum = worldModel->getFreeKickAdvicerSayNumber();#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : listener listened=" << form.sayForm.freeKickAdviceNumber << endl;#endif } else { form.sayForm.attentionNum = FREE_KICK_ADVICER; } } } else {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKickerSay : 1 cycle after changePlayMode or late Ball" << endl;#endif } // Previous Method}int NonPlayOnDecision::backBallChoice(int cyclesToWait){ unsigned waitMinCycles; int i; waitMinCycles = 32; unsigned actualPlayModeStayCycles,actualPlayModeRemainCycles; actualPlayModeRemainCycles = worldModel->getPlayModeRemainCycle(); actualPlayModeStayCycles = (unsigned)worldModel->getServerParam()["drop_ball_time"].asInt(); if (worldModel->getPlayMode() == PM_OFFSIDE_OPP || worldModel->getPlayMode() == PM_FREE_KICK_FAULT_OPP || worldModel->getPlayMode() == PM_CATCH_FAULT_OPP) { actualPlayModeRemainCycles += worldModel->getServerParam()["drop_ball_time"].asInt(); actualPlayModeStayCycles += 30; }#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "backBallChoice : actualPlayModeRemainCycles" << actualPlayModeRemainCycles << endl;LOG << "backBallChoice : actualPlayModeStayCycles" << actualPlayModeStayCycles << endl;#endif if (worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL) waitMinCycles = 100; if (actualPlayModeRemainCycles < 3) return 1; if (actualPlayModeRemainCycles > actualPlayModeStayCycles - waitMinCycles) return 2; if (cyclesToWait > 0) return 2; if (worldModel->getBody().getStamina() < worldModel->getBody().getStaminaMax() - 1) return 2; // Check Other Players Stamina for (i = 0; i < 11; i++) if (worldModel->getFullPlayer(TID_TEAMMATE, i).isValid() && worldModel->getFullPlayer(TID_TEAMMATE, i).getStamina() < worldModel->getFullPlayer(TID_TEAMMATE, i).getStaminaMax() - 1) { LOG << "backBallChoice : COPS player " << i + 1 << endl; return 2; // FIXME : turned off because of ... } return 1;}void NonPlayOnDecision::getCurrentHomePoints(Point positions[11], const Library &library){ int i; if (worldModel->getPlayMode() == PM_BEFORE_KICK_OFF || worldModel->getPlayMode() == PM_KICK_OFF || worldModel->getPlayMode() == PM_KICK_OFF_OPP) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "getMovePoint" << endl;#endif for (i = 1; i <= FULL_PLAYERS_NUM; i++) positions[i - 1] = (dynamic_cast<NonPlayOnBeforeKickOff *> (advancedActions[BEFOREKICKOFF_NUM]))->getMovePoint(i); } else if (worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "GoalieCatchOffense" << endl;#endif advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getValue(library); for (i = 1; i <= FULL_PLAYERS_NUM; i++) positions[i - 1] = (dynamic_cast<GoalieCatchOffense *> (advancedActions[GOALIE_CATCH_OFFENSE_NUM]))->getHomePoint(i); } else if (DefenseOffenseChoice() == 2) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "Offense.getHomePoint" << endl;#endif advancedActions[OFFENSE_NUM]->getValue(library); for (i = 1; i <= FULL_PLAYERS_NUM; i++) positions[i - 1] = (dynamic_cast<Offense *> (advancedActions[OFFENSE_NUM]))->getHomePoint(i, library); } else {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "Defense.getHomePoint" << endl;#endif advancedActions[DEFENSE_NUM]->getValue(library); for (i = 1; i <= FULL_PLAYERS_NUM; i++) positions[i - 1] = (dynamic_cast<Defense *> (advancedActions[DEFENSE_NUM]))->getHomePoint(i); }#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "All home points found." << endl;#endif#ifdef NON_PLAY_ON_DECISION_LOG2for (i = 1; i <= FULL_PLAYERS_NUM; i++) LOG << "homepoint[" << i << "] = " << positions[i - 1] << endl;#endif}int NonPlayOnDecision::DefenseOffenseChoice(){ switch (worldModel->getPlayMode()) { case PM_KICK_OFF: case PM_FREE_KICK: case PM_KICK_IN: case PM_OFFSIDE_OPP: case PM_GOAL_OPP: case PM_GOAL_KICK: case PM_CORNER_KICK: case PM_FREE_KICK_FAULT_OPP: case PM_CATCH_FAULT_OPP: case PM_BACK_PASS_OPP: return 2; // Offense break; case PM_KICK_OFF_OPP: case PM_FREE_KICK_OPP: case PM_KICK_IN_OPP: case PM_OFFSIDE: case PM_GOAL: case PM_GOAL_KICK_OPP: case PM_CORNER_KICK_OPP: case PM_FREE_KICK_FAULT: case PM_CATCH_FAULT: case PM_BACK_PASS: return 1; // Defense break; case PM_TIME_UP_WITHOUT_A_TEAM: case PM_TIME_UP: return 0; // NoWork break; default: return 1; // Defense break; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -