private int howManyDefendersWeNeed(THREAT_VALUE tv) { int defs = 0; switch (tv) { case THREAT_VALUE.LOW: defs = 5; break; case THREAT_VALUE.MEDIUM: defs = 10; break; case THREAT_VALUE.HIGH: defs = allies.Count; break; } return(defs); }
protected internal override List <Accion> getStrategyActions() { List <Accion> aggresiveActions = new List <Accion>(); checkAlliesDownAndFill(); //actualizamos los grupos formados con las bajas producidas por el enemigo //y rellenamos la lista de unidades a las cuales podemos asignar ordenes /*DEFENSA DE LA BASE*/ if (ourBaseIsUnderAttack()) { List <PersonajeBase> attackers = enemiesOnBase(); //enemigos que estan atacando la base THREAT_VALUE defensePriority = calculateThreat(attackers.Count); //nivel de peligro int defenders = howManyDefendersWeNeed(defensePriority); //calculamos cuantos defensores necesitamos if (defensiveGroup.Count != defenders) //si necesitamos mas defensores habra que buscarlos { aggresiveActions = sendAlliesToDefend(defenders - defensiveGroup.Count, attackers); //se iguala porque es lo primero que se hace } else { aggresiveActions = continueDefending(attackers); } } else { unitsNotAsigned.AddRange(defensiveGroup); defensiveGroup.Clear(); } /*SET PATROL*/ aggresiveActions.AddRange(setPatrol()); /*COMPROBACION DE RETIRARSE A LA BASE SI NO ESTAMOS ASEDIANDO Y ESTAMOS BAJOS DE VIDA*/ aggresiveActions.AddRange(sendBackAllies()); /*COMPROBACION DE ENEMIGOS CERCANOS*/ aggresiveActions.AddRange(attackEnemiesClose()); /*CONTROL DE UN PUENTE COMO PUNTA DE LANZA*/ int bridgesControlled = bridgeUnderControl(); //comprobamos que puentes controlamos if (bridgesControlled == 0) //si no controlamos ninguno { //BridgeAttacked = changeBridgeAttack(); //selecionamos que puente atacar, vamos intercalando para despistar jeje aggresiveActions.AddRange(orderGroupToAttackBridge(BridgeAttacked)); //creamos un grupo de ataque para el puente } /*ATAQUE A LA BASE ENEMIGA*/ if (bridgesControlled != 0) { //si no tenemos los dos puentes, comprobamos si el enemigo controla el otro, en ese caso //vamos a darle mandanga if (bridgesControlled != allBridgedUP) { aggresiveActions.AddRange(goToSpearHead(bridgesControlled)); } //despues desde ahi ir a atacar la base //en este punto ya solo quedan unidades que no estan haciendo todo lo demas, //es decir, gente que esta en el puente esperando y sin luchar, //por lo tanto, A POR LA BASE! aggresiveActions.AddRange(createSiegeGroup(bridgesControlled)); } aggresiveActions.AddRange(rezagadosAttack(aggresiveActions)); return(aggresiveActions); }