Example #1
0
 public void AddSoldier(ISoldier soldier)
 {
     if (!this.Members.ContainsKey(soldier.GetType().Name))
     {
         this.Members[soldier.GetType().Name] = new List <ISoldier>();
         this.Members[soldier.GetType().Name].Add(soldier);
     }
     else
     {
         this.Members[soldier.GetType().Name].Add(soldier);
     }
 }
Example #2
0
    public void AddSoldier(ISoldier soldier)
    {
        string typeSoldierName = soldier.GetType().Name;

        if (!this.SoldierArmy.ContainsKey(typeSoldierName))
        {
            this.SoldierArmy[typeSoldierName] = new List <ISoldier>();
        }
        this.SoldierArmy[typeSoldierName].Add(soldier);
    }
    private void AddSoldierToArmyCommand(string[] data)
    {
        // Create Soldier
        ISoldier soldier = CreateSoldier(data);

        // Equip soldier
        bool isFullyEquipped = this.wareHouse.TryEquipSoldier(soldier);

        // Add soldier to army if fully equipped
        if (!isFullyEquipped)
        {
            this.writer.AppendMessage(string.Format(OutputMessages.NoWeaponForSoldier,
                                                    soldier.GetType().Name, soldier.Name));
        }
        else
        {
            this.army.AddSoldier(soldier);
        }
    }
Example #4
0
    public string AddSoldierToArmy(string[] args)
    {
        string soldierTypeName = args[0];
        string name            = args[1];
        int    age             = int.Parse(args[2]);
        double experience      = double.Parse(args[3]);
        double endurance       = double.Parse(args[4]);

        ISoldier soldier = soldierFactory.CreateSoldier(soldierTypeName, name, age, experience, endurance);

        if (wareHouse.TryEquipSoldier(soldier))
        {
            this.army.AddSoldier(soldier);
        }
        else
        {
            return(string.Format(OutputMessages.NoWeapon, soldier.GetType().Name, soldier.Name));
        }

        return(null);
    }
    private void AddSoldierToArmy(string[] soldierParams)
    {
        string soldierType = soldierParams[0];
        string name        = soldierParams[1];
        int    age         = int.Parse(soldierParams[2]);
        double experience  = double.Parse(soldierParams[3]);
        double endurance   = double.Parse(soldierParams[4]);

        ISoldier soldier = this.soldierFactory.
                           CreateSoldier(soldierType, name, age, experience, endurance);

        if (!this.wareHouse.TryEquipSoldier(soldier))
        {
            throw new InvalidOperationException(
                      string.Format(
                          OutputMessages.NoWeaponForSoldier,
                          soldier.GetType().Name, soldier.Name));
        }

        this.army.AddSoldier(soldier);
    }
    ////Checks if all the ammunitions for this type of soldier are available
    private bool CheckIfSoldierCanJoinTeam(ISoldier soldier)
    {
        string exactSoldierTypeName = soldier.GetType().Name;

        Type typeOfSoldier = Assembly.GetExecutingAssembly().GetTypes()
                             .FirstOrDefault(t => t.Name.Equals(exactSoldierTypeName));

        object instance = this.soldierFactory.CreateSoldier(exactSoldierTypeName, soldier.Name, soldier.Age,
                                                            soldier.Experience, soldier.Endurance);

        FieldInfo weaponsAllowedField = typeOfSoldier
                                        .GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
                                        .FirstOrDefault(x => x.GetCustomAttributes(typeof(ItemAttribute), true).Length != 0);

        var weaponsAllowedData = (List <string>)weaponsAllowedField.GetValue(instance);

        bool possibleToJoin = true;

        foreach (var weapon in weaponsAllowedData)
        {
            if (!this.WareHouse.Ammunitions.ContainsKey(weapon))
            {
                possibleToJoin = false;
                continue;
            }
            if (soldier.Weapons[weapon] == null && this.WareHouse.Ammunitions[weapon].Count > 0)
            {
                soldier.Weapons[weapon] = this.WareHouse.Ammunitions[weapon][0];
                this.WareHouse.Ammunitions[weapon].RemoveAt(0);
            }
            else
            {
                possibleToJoin = false;
            }
        }

        return(possibleToJoin);
    }
    public void GiveInputToGameController(string input)
    {
        string[] data = input.Split();

        if (data[0].Equals("Soldier"))
        {
            if (data[1] == "Regenerate")
            {
                army.RegenerateTeam(data[2]);
            }
            else
            {
                string soldierType = data[1];
                string name        = data[2];
                int    age         = int.Parse(data[3]);
                double experience  = double.Parse(data[4]);
                double endurance   = double.Parse(data[5]);

                ISoldier soldier = this.soldierFactory.CreateSoldier(soldierType, name, age, experience, endurance);

                if (this.wareHouse.TryEquipSoldier(soldier))
                {
                    this.army.AddSoldier(soldier);
                }
                else
                {
                    throw new ArgumentException(string.Format(OutputMessages.SoldierNotAdded, soldier.GetType().Name, soldier.Name));
                }
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            string name  = data[1];
            int    count = int.Parse(data[2]);

            this.wareHouse.AddAmmunition(name, count);
        }
        else if (data[0].Equals("Mission"))
        {
            string missionType  = data[1];
            double neededPoints = double.Parse(data[2]);

            IMission mission = this.missionFactory.CreateMission(missionType, neededPoints);

            this.writer.AppendLine(this.missionController.PerformMission(mission).Trim());
        }
    }
Example #8
0
    public void AddSoldier(ISoldier soldier)
    {
        if (!SoldierCanJoinTeam(soldier))
        {
            throw new InvalidOperationException(string.Format(OutputMessages.UnableToRegisterSoldier, soldier.GetType().Name, soldier.Name));
        }

        else
        {
            this.soldiers.Add(soldier);
            this.wareHouse.EquipArmy(this);
        }
    }
    public void GiveInputToGameController(string input)
    {
        var data = input.Split();

        if (data[0] == "Soldier")
        {
            if (data.Length == 6)
            {
                SoldierFactory soldiersFactory = new SoldierFactory();

                string soldierType = data[1];
                string name        = data[2];
                int    age         = int.Parse(data[3]);
                double experience  = double.Parse(data[4]);
                double endurance   = double.Parse(data[5]);

                ISoldier soldier = soldiersFactory.CreateSoldier(soldierType, name, age, experience, endurance);

                if (weraHouse.TryEquipSoldier(soldier) == true)
                {
                    AddSoldierToArmy(soldier);
                }
                else
                {
                    string massage = string.Format(OutputMessages.SoldierCannotBeEquiped, soldier.GetType().Name, soldier.Name);
                    throw new System.ArgumentException(massage);
                }
            }
            else if (data[1] == "Regenerate")
            {
                string soldiersType = data[2];

                army.RegenerateTeam(soldiersType);
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            AmmunitionFactory ammunitionFactory = new AmmunitionFactory();

            string name   = data[1];
            int    number = int.Parse(data[2]);

            AddAmmunitions(ammunitionFactory.CreateAmmunition(name), number);
        }
        else if (data[0].Equals("Mission"))
        {
            IMissionFactory missionFactory = new MissionFactory();

            string type            = data[1];
            double scoreToComplete = double.Parse(data[2]);

            IMission mission = missionFactory.CreateMission(type, scoreToComplete);

            consoleWriter.AppendLine(missionController.PerformMission(mission).Trim());
        }
    }