?? clear.cpp
字號(hào):
} else { // Defense kick#ifdef CLEAR_LOG1 LOG << "Clear::defense" << endl;#endif if ((worldModel->getBall().getPos().getX() >= -28 || fabs(worldModel->getBall().getPos().getY()) >= 21) && !worldModel->getBody().isGoalie()) return AD_MIN_VALUE; Point clearPoints[20]; int clearPointsNum = 0; float clearWeights[20]; bool clearToTeammate[20]; Ball clearBall; Command *curClearCommand; float maxWeight; int maxPointNum; InterceptCalculate clearIntercept; float interceptX; Point oppPoint; clearPoints[0] = Point(0, 20); clearPoints[1] = Point(0, 10); clearPoints[2] = Point(0, 0); clearPoints[3] = Point(0, -10); clearPoints[4] = Point(0, -20); clearPoints[5] = Point(-14, 30); clearPoints[6] = Point(-14, -30); clearPoints[7] = Point(0, worldModel->getBody().getPos().getY()); if (worldModel->getBody().getPos().getY() > 0) clearPoints[8] = Point(worldModel->getBody().getPos().getX(), 30); else clearPoints[8] = Point(worldModel->getBody().getPos().getX(), -30); clearPointsNum = 9; clearIntercept.startSession(1); clearIntercept.updateByWorldModel(worldModel); clearIntercept.setTmmSlowDashPower(20); clearIntercept.setTmmFastDashPower(80); clearIntercept.setTmmDirectDashPower(100); clearIntercept.setTmmSeeBallDelay(2); clearIntercept.setTmmPosDevRate(0.8); clearIntercept.setOppSlowDashPower(20); clearIntercept.setOppFastDashPower(90); clearIntercept.setOppDirectDashPower(100); clearIntercept.setOppSeeBallDelay(1); clearIntercept.setOppPosDevRate(0.8); for (i = 0; i < clearPointsNum; i++) { FastKickToPoint fastKick(AT_CLEAR, clearPoints[i], worldModel->getBall(), worldModel->getBody()); if (!fastKick.isPossible()) {#ifdef CLEAR_LOG1 LOG << "Clear:point [" << i << "] = " << clearPoints[i] << " not possible" << endl;#endif clearWeights[i] = AD_MIN_VALUE; if (fastKick.getCommand()) delete fastKick.getCommand(); continue; } curClearCommand = fastKick.getCommand(); clearBall = worldModel->getBall(); clearBall.simulateByAction(worldModel->getBody(), curClearCommand); clearIntercept.setVirtualBall(clearBall); clearIntercept.setKickCycles(1); clearIntercept.run();#ifdef CLEAR_LOG1 LOG << "Clear:point [" << i << "] = " << clearPoints[i] << endl;#endif if (clearIntercept.existFastestPlayer()) { if (clearIntercept.getFastestPlayer().getTeamId() == TID_TEAMMATE) {#ifdef CLEAR_LOG1 LOG << "Clear:fastest exist teammate" << endl;#endif interceptX = clearIntercept.getFastestInterPlayer().getInterPoint().x;#ifdef CLEAR_LOG1 LOG << "Clear:interceptX = " << interceptX << endl;#endif if (interceptX < -36) clearWeights[i] = -10; else if (interceptX < -25) clearWeights[i] = Basics::reRate(interceptX, -36, -25, -10, 45); else clearWeights[i] = Basics::reRate(interceptX, -25, 10, 45, 70); clearWeights[i] += 25; clearToTeammate[i] = true; } else {#ifdef CLEAR_LOG1 LOG << "Clear:fastest exist opponent" << endl;#endif interceptX = clearIntercept.getFastestInterPlayer().getInterPoint().x;#ifdef CLEAR_LOG1 LOG << "Clear:interceptX = " << interceptX << endl;#endif if (interceptX < -36) clearWeights[i] = -50; else if (interceptX < -25) clearWeights[i] = Basics::reRate(interceptX, -36, -25, -50, 5); else clearWeights[i] = Basics::reRate(interceptX, -25, 10, 5, 25); clearToTeammate[i] = false; } } else { clearWeights[i] = 20; }#ifdef CLEAR_LOG1 LOG << "Clear:clearWeight = " << clearWeights[i] << endl;#endif } maxPointNum = 0; maxWeight = -0xFFFF * 10; for (i = 0; i < clearPointsNum; i++) if (clearWeights[i] > maxWeight) { maxWeight = clearWeights[i]; maxPointNum = i; } if (maxWeight <= AD_MIN_VALUE) {#ifdef CLEAR_LOG1 LOG << "Clear: all not possible" << endl;#endif if (worldModel->getBody().getPos().getY() >= 0) clearCommand = new KickCommand(AT_CLEAR, 100, 50); else clearCommand = new KickCommand(AT_CLEAR, 100, -50); return -60; }#ifdef CLEAR_LOG1 LOG << "Clear::selected =" << maxPointNum << " " << clearPoints[maxPointNum] << endl; LOG << "Clear::weight =" << maxWeight << endl;#endif clearCommand = FastKickToPoint(AT_CLEAR, clearPoints[maxPointNum], worldModel->getBall(), worldModel->getBody()).getCommand(); if (clearToTeammate[maxPointNum]) maxWeight -= 15;#ifdef CLEAR_LOG1 LOG << "Clear::weight(after add1) =" << maxWeight << endl;#endif maxWeight += Basics::reRate(worldModel->getBall().getPos().getX(), -53, -34, 2, 20, RRM_REVERSE); #ifdef CLEAR_LOG1 LOG << "Clear::weight(after add2) =" << maxWeight << endl;#endif for (i = 0; i < FULL_PLAYERS_NUM; i++) if (worldModel->getFullPlayer(TID_OPPONENT, i).isValid()) { oppPoint = worldModel->getFullPlayer(TID_OPPONENT, i).getPos(); if (oppPoint.x > worldModel->getBody().getPos().getX() - 2.5 && oppPoint.x < worldModel->getBody().getPos().getX() + 5 && oppPoint.y > worldModel->getBody().getPos().getY() - 7 && oppPoint.y < worldModel->getBody().getPos().getY() + 7) { maxWeight += Basics::reRate(worldModel->getBody().getDistance(oppPoint), 0, 9, 1, 4, RRM_REVERSE);#ifdef CLEAR_LOG1 LOG << "Clear::addOpp " << i + 1 << endl;#endif } }#ifdef CLEAR_LOG1 LOG << "Clear::weight(after add3) =" << maxWeight << endl;#endif if (worldModel->getBody().isGoalie()) return AD_ALWAYS_RUN_VALUE; if (maxWeight > 75) return AD_ALWAYS_RUN_VALUE; else return maxWeight; // Previous Methdod if ((worldModel->getBall().getPos().getX() >= -36 || fabs(worldModel->getBall().getPos().getY()) >= 20)) return AD_MIN_VALUE; if(worldModel->getBall().getVel().getMagnitude() > 2) { if(worldModel->getBall().getAbsVec().getMagnitude() > .8) { if(worldModel->getBody().getPos().getY() < 0) { kickPoint.x = 0.00; ////////////////TOF Chasbide kickPoint.y = 9.00; clearCommand = FastKickToPoint(AT_CLEAR, kickPoint, worldModel->getBall(), worldModel->getBody()).getCommand(); if ((worldModel->getBall().getPos().getX() >= -46 || fabs(worldModel->getBall().getPos().getY()) >= 15)) return defaultClearWeight; else return AD_ALWAYS_RUN_VALUE; } else { kickPoint.x = 0.00; ////////////////TOF Chasbide kickPoint.y = -9.00; clearCommand = FastKickToPoint(AT_CLEAR, kickPoint, worldModel->getBall(), worldModel->getBody()).getCommand(); if ((worldModel->getBall().getPos().getX() >= -46 || fabs(worldModel->getBall().getPos().getY()) >= 15)) return defaultClearWeight; else return AD_ALWAYS_RUN_VALUE; } } else { kickPoint.x = worldModel->getBody().getPos().getX() + 42; ////////////////TOF Chasbide kickPoint.y = worldModel->getBody().getPos().getY(); clearCommand = FastKickToPoint(AT_CLEAR, kickPoint, worldModel->getBall(), worldModel->getBody()).getCommand(); if ((worldModel->getBall().getPos().getX() >= -46 || fabs(worldModel->getBall().getPos().getY()) >= 15)) return defaultClearWeight; else return AD_ALWAYS_RUN_VALUE; } } else if(worldModel->getBall().getVel().getMagnitude() > .9) { Vector ballVector; ballVector.setByPoints(worldModel->getBody().getPos(), worldModel->getBall().getPos()); ballVector.setAsPolar(.45, ballVector.getDirection()); kickPoint.x = worldModel->getBody().getPos().getX() + ballVector.getX(); kickPoint.y = worldModel->getBody().getPos().getY() + ballVector.getY(); clearCommand = KickToPointArriveVelocity(AT_CLEAR, kickPoint, 0, worldModel->getBall(), worldModel->getBody()).getCommand(); if ((worldModel->getBall().getPos().getX() >= -46 || fabs(worldModel->getBall().getPos().getY()) >= 15)) return defaultClearWeight; else return AD_ALWAYS_RUN_VALUE; } else { ///in ke joloye darvaze dar mavaghei, bayad be darvazeban pass bede va hamin joori be jolo shoot nakone ra bayad ba'dan bezaram kickPoint.x = worldModel->getBody().getPos().getX() + 42; ////////////////TOF Chasbide kickPoint.y = worldModel->getBody().getPos().getY(); clearCommand = KickToPointArriveVelocity(AT_CLEAR, kickPoint, 0, worldModel->getBall(), worldModel->getBody()).getCommand(); if ((worldModel->getBall().getPos().getX() >= -46 || fabs(worldModel->getBall().getPos().getY()) >= 15)) return defaultClearWeight; else return AD_ALWAYS_RUN_VALUE; } } return AD_MIN_VALUE;}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -