public async virtual Task <NascarEvent> SimulatePracticeAsync(NascarEvent raceEvent) { _lapTimeService = new LapTimeService(raceEvent.Track); NascarPracticeRun p1 = raceEvent.Runs.OfType <NascarPracticeRun>().FirstOrDefault(r => r.RunType == NascarRunType.Practice1); if (p1 != null) { p1.Vehicles = raceEvent.Vehicles; SimulatePracticeRun(p1); PopulateResults(p1); } NascarPracticeRun p2 = raceEvent.Runs.OfType <NascarPracticeRun>().FirstOrDefault(r => r.RunType == NascarRunType.Practice2); if (p2 != null) { p2.Vehicles.Clear(); p2.Vehicles = raceEvent.Vehicles; SimulatePracticeRun(p2); PopulateResults(p2); } NascarPracticeRun p3 = raceEvent.Runs.OfType <NascarPracticeRun>().FirstOrDefault(r => r.RunType == NascarRunType.FinalPractice); if (p3 != null) { p3.Vehicles.Clear();; p3.Vehicles = raceEvent.Vehicles; SimulatePracticeRun(p3); PopulateResults(p3); } return(await Task.FromResult(raceEvent)); }
private void PrintResults(NascarPracticeRun run) { Console.WriteLine($" Practice Round {run.Round} Results"); foreach (PracticeResult result in run.Results.OrderBy(r => r.Position)) { Console.WriteLine($"{result.Position} Car# {result.VehicleId} {result.LapTime} {result.LapSpeed}"); } Console.WriteLine(); }
protected virtual void SimulatePracticeRun(NascarPracticeRun run) { Console.WriteLine($"Simulating {run.RunType.ToString()} for series {run.SeriesId}"); var timesOnTrack = 3; foreach (NascarVehicle vehicle in run.Vehicles) { int lapNumber = 0; for (int i = 0; i < timesOnTrack; i++) { var laps = new NascarConsecutiveLaps() { VehicleId = vehicle.VehicleId, Laps = GetLaps(lapNumber + 1) }; run.ConsecutiveLaps.Add(laps); lapNumber = laps.Laps.Max(l => l.LapNumber); } } }