// Method RidingOnAttractions use for riding emulation. // Method will call from ToRide() in separete thread based on logic from ThreadPool.QueueUserWorkItem private static void RidingOnAttractions(Kid kids, Attraction currentAttraction) { var rand = new Random(); // Set Action for kid with attraction name and durations kids.SetKidAction("I'm staring to ride on => " + currentAttraction.Name + " for " + currentAttraction.Duration + " sec"); kids.SetBusyStatus(true); // Adding money to Global cash box currentAttraction.AddMoneyToCashBox(); //Increase Kid satisfaction degree kids.ChangeSatisfactionDegree(rand.Next(10, 20)); //Attraction payment kids.ChangeMoneyAmount(currentAttraction.Price); // Riding emulation by sleepinn on attraction duration x1000 (as Seconds) Thread.Sleep(currentAttraction.Duration * 1000); // Then attraction finished - update status to Finished + free kids.SetKidAction("I've FINISHED to ride on => " + currentAttraction.Name); kids.SetBusyStatus(false); }
//Get random valid attraction for Kid based on Attraction conditions // return null or 1 Attraction private Attraction GetRandomValidAttractionForKid(Kid kid) { // using for store ALL available attraction ( based on rules/ condition ) related to current Kid. var rand = new Random(); kid.SetKidAction("Trying to get list of avaiable Attractions"); // Try to find available attractions var listOfAvailableAttractionForKid = ListOfOpenRandomAttractions.GetListOfGeneratedAttractions() .Where(attraction => attraction.DoValidation(kid, WeekDay)) .ToList(); // return null Or Random attraction. // null - if there no available attraction for Kid. // Random attraction calculated as Random LIST index for all available attractions for 1 kid. // List index started from 0, thats why total count of available attractions should be decreased on 1 for count > 1. return(listOfAvailableAttractionForKid.Count <= 0? null: listOfAvailableAttractionForKid[rand.Next(0, listOfAvailableAttractionForKid.Count > 1 ? listOfAvailableAttractionForKid.Count : listOfAvailableAttractionForKid.Count - 1)]); }