コード例 #1
0
        private void drawUnit(SpriteBatch batch)
        {
            Vector2 temp = convertToXY();

            temp.X += 49;
            temp.Y += 13;

            if (unit != null)
            {
                Unit.unitType t = unit.t;

                if (unit.getOwner().isPlayer1)        //check if unit belongs to player 1
                {
                    switch (t)
                    {
                    case Unit.unitType.trooper:
                        batch.Draw(Game.trooper, temp, Color.Red);
                        break;

                    case Unit.unitType.demolitionSquad:
                        batch.Draw(Game.demo, temp, Color.Red);
                        break;

                    case Unit.unitType.samTrooper:
                        batch.Draw(Game.samT, temp, Color.Red);
                        break;
                    }
                }
                else
                {
                    switch (t)
                    {
                    case Unit.unitType.trooper:
                        batch.Draw(Game.trooper, temp, Color.Blue);
                        break;

                    case Unit.unitType.demolitionSquad:
                        batch.Draw(Game.demo, temp, Color.Blue);
                        break;

                    case Unit.unitType.samTrooper:
                        batch.Draw(Game.samT, temp, Color.Blue);
                        break;
                    }
                }
            }
        }
コード例 #2
0
 Unit.unitType findMaximumTypeOfUnit(int infantry, int antiTank, int Tank)
 {
     Unit.unitType unitToCreate = Unit.unitType.infantry;
     if (infantry > antiTank && infantry > Tank)
     {
         unitToCreate = Unit.unitType.infantry;
     }
     else if (antiTank > infantry && antiTank > Tank)
     {
         unitToCreate = Unit.unitType.antiTank;
     }
     else if (Tank > infantry && Tank > antiTank)
     {
         unitToCreate = Unit.unitType.Tank;
     }
     return(unitToCreate);
 }
コード例 #3
0
    //P:ej si voy a atacar/me está atacando la URSS, estudiaré que tipo de nave es la más común y creare su counter (en función de las naves que tengo yo)
    void calculateAndSpawnNeededShip()
    {
        bool attack = false;

        Goal.TypeGoal current_attack_obj = Goal.TypeGoal.conquestMoon;
        int           maxPeso            = 11;

        //En base a las naves enemigas, mis naves y mis recursos

        foreach (Goal objective in factionPriorities)
        {
            if (objective.objective == Goal.TypeGoal.attackAliens || objective.objective == Goal.TypeGoal.attackCCP || objective.objective == Goal.TypeGoal.attackUSA)
            {
                attack = true;
                if (objective.weight < maxPeso)
                {
                    maxPeso            = objective.weight;
                    current_attack_obj = objective.objective;
                }
            }
        }
        Unit.unitType unitToCreate = Unit.unitType.infantry;
        //Si no atacamos a nadie
        if (attack == false)
        {
            switch (myFactionType)
            {
            case Factions.ALIENS:
                unitToCreate = findMinimumTypeOfUnit(aliensNumberOfInfantryUnits, aliensNumberOfAntyTankUnits, aliensNumberOfTankUnits);
                break;

            case Factions.USA:
                unitToCreate = findMinimumTypeOfUnit(usaNumberOfInfantryUnits, usaNumberOfAntyTankUnits, usaNumberOfTankUnits);
                break;

            case Factions.CCCP:
                unitToCreate = findMinimumTypeOfUnit(cccpNumberOfInfantryUnits, cccpNumberOfAntyTankUnits, cccpNumberOfTankUnits);
                break;
            }

            switch (unitToCreate)
            {
            case Unit.unitType.infantry:
                myBuilding.CreateBasicUnit();
                break;

            case Unit.unitType.antiTank:
                if (myFaction.GetEnergy() > myBuilding.IntermediateUnitEnergyCost && myFaction.GetMaterial() > myBuilding.IntermediateUnitMaterialCost)
                {
                    myBuilding.CreateIntermediateUnit();
                }
                else
                {
                    myBuilding.CreateBasicUnit();
                }
                break;

            case Unit.unitType.Tank:
                if (myFaction.GetEnergy() > myBuilding.AdvancedUnitEnergyCost && myFaction.GetMaterial() > myBuilding.AdvancedUnitMaterialCost)
                {
                    myBuilding.CreateAdvancedUnit();
                }
                else
                {
                    myBuilding.CreateBasicUnit();
                }
                break;
            }
        }
        else
        {
            switch (current_attack_obj)
            {
            case (Goal.TypeGoal.attackAliens):
                unitToCreate = findMaximumTypeOfUnit(aliensNumberOfInfantryUnits, aliensNumberOfAntyTankUnits, aliensNumberOfTankUnits);
                break;

            case (Goal.TypeGoal.attackUSA):
                unitToCreate = findMaximumTypeOfUnit(usaNumberOfInfantryUnits, usaNumberOfAntyTankUnits, usaNumberOfTankUnits);
                break;

            case (Goal.TypeGoal.attackCCP):
                unitToCreate = findMaximumTypeOfUnit(cccpNumberOfInfantryUnits, cccpNumberOfAntyTankUnits, cccpNumberOfTankUnits);
                break;
            }

            //Este switch va por separado ya que si la IA necesita una clase de nave especial va a ahorrar recursos para poderla crear en el siguiente turno
            switch (unitToCreate)
            {
            case Unit.unitType.infantry:
                myBuilding.CreateBasicUnit();
                break;

            case Unit.unitType.antiTank:
                if (myFaction.GetEnergy() > myBuilding.IntermediateUnitEnergyCost && myFaction.GetMaterial() > myBuilding.IntermediateUnitMaterialCost)
                {
                    myBuilding.CreateIntermediateUnit();
                }
                break;

            case Unit.unitType.Tank:
                if (myFaction.GetEnergy() > myBuilding.AdvancedUnitEnergyCost && myFaction.GetMaterial() > myBuilding.AdvancedUnitMaterialCost)
                {
                    myBuilding.CreateAdvancedUnit();
                }
                break;
            }
        }

        //El resultado de esta funcion son las llamadas a myBuilding.Create"TypeOfUnit"()
    }