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; } } } }
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); }
//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"() }