/// <summary> /// Найти все свободные авто попадающие под определенные параметры. Только Таксишки! /// Работает методом исключения: сначала ищет все свободные авто /// соответствующие заданному классу комфорта; /// потом из полученного списка удаляет авто не совпадающие с заданными /// параметрами(по одному параметру за раз). /// </summary> /// <param name="smoke"></param> /// <param name="childPositions"></param> /// <param name="animals"></param> /// <param name="carClass"></param> /// <returns></returns> public List <Car> GetFreeTaxi(bool smoke, byte childPositions, bool animals, Taxi.CarClases carClass = Taxi.CarClases.Base) { LoggerMaster.LoggerM.Debug("In class: " + nameof(TaxiStation) + " : " + "Try call: " + MethodBase.GetCurrentMethod()); //List<Car> freeCars = new List<Car>(); //foreach (Car c in AllCars) // if ((c is Taxi) && !(c as Taxi).IsRun && (c as Taxi).CarClass == carClass) // freeCars.Add(c); //if (smoke) // foreach (Car c in freeCars.ToArray()) // if (!c.Smoke) // freeCars.Remove(c); //if (childPositions > 0) // foreach (Car c in freeCars.ToArray()) // if (c.ChildPositions < childPositions) // freeCars.Remove(c); //if (animals) // foreach (Car c in freeCars.ToArray()) // if (!c.Animals) // freeCars.Remove(c); //return freeCars; return(AllCars.Select(it => it as Taxi).Where(c => c != null && !c.IsRun && c.CarClass == carClass && c.Smoke == smoke && c.ChildPositions >= childPositions && c.Animals == animals).ToList <Car>()); }
/// <summary> /// Функция для генерации автомобилек. /// </summary> /// <returns></returns> public static Taxi CarGenerator() { string RChar() { char[] chars = { 'a', 'b', 'c', 'e', 'h', 'k', 'm', 'n', 'o' }; return(Convert.ToString(chars[_r.Next(0, chars.Length)])); } bool RBool() { if (_r.Next(0, 2) == 1) { return(true); } return(false); } Taxi.CarClases Rtc() { int tmp = _r.Next(1, 4); if (tmp == 1) { return(Taxi.CarClases.Base); } if (tmp == 2) { return(Taxi.CarClases.Standard); } return(Taxi.CarClases.Premium); } string[] model = { "lifan", "bmw", "lada", "chevrolet", "fiat", "honda", "kia" }; ushort startAge = Convert.ToUInt16(_r.Next(1950, 2018)); string number = RChar() + _r.Next(100, 1000) + RChar() + RChar(); string numberBody = Convert.ToString(_r.Next(100, 1000)) + (RChar() + RChar() + RChar()) + Convert.ToString(_r.Next(100, 1000)) + (RChar() + RChar() + RChar()) + Convert.ToString(_r.Next(100, 1000)) + (RChar() + RChar() + RChar()); string[] driverSurname = { "иванов", "смирнов", "кузнецов", "попов", "васильев", "петров", "соколов", "михайлов", "новиков", "федоров", "морозов" }; string[] driverName = { "василий", "георгий", "геннадий", "юрий", "виктор", "дмитрий", "алексей" }; string[] driverName2 = { "иванович", "петрович", "васильевич", "георгиевич", "геннадьевич", "дмитриевич", "алексеевич" }; uint mileage = (uint)_r.Next(1, 800000); bool smoke = RBool(); byte childPositions = (byte)_r.Next(0, 6); Taxi.CarClases carCl = Rtc(); bool animals = RBool(); if (RBool()) { return(new Taxi(model[_r.Next(0, model.Length)], startAge, number, numberBody, driverSurname[_r.Next(0, driverSurname.Length)], driverName[_r.Next(0, driverName.Length)], driverName2[_r.Next(0, driverName2.Length)], mileage, smoke, childPositions, carCl, animals)); } else { return(new Taxi(model[_r.Next(0, model.Length)], startAge, number, numberBody, mileage, smoke, childPositions, carCl, animals)); } }