Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }