Задание
Тема работы:Моделирование участка с дорожным движением и ремонтом дороги ( Моделирование транспортного потока)
Создание моделей - очень важно для вопрощения задач, связанных с движением транспорта на разных участках дороги. Именно моделирование позволяет оценить перспективность любой идеи. В безопасных условиях можно протестировать любую ситуацию, чтобы прийти к наилучшему решению задач.
Перед запуском моделирования можно задать настройки интервала появления автомобилей и периода переключения светофоров.
В программе отображаются:
- автомобили и их количество в пределах участка дороги
- светофоры на перекрестке
- светофоры на участке с ремонтом дороги
- разграничены полосы движения транспорта
Скриншот архива проекта
Фрагмент программного кода
private void Timer_Tick(object sender, EventArgs e)
{ int UpCarsCount = 0, DownCarsCount = 0; foreach (cCar Car in Road.Cars) { if (Car.rect.Y == cRoad.RenderSize / 2 - cRoad.RoadWidth / 2 + 2) UpCarsCount++; if (Car.rect.Y == cRoad.RenderSize / 2 + 2) DownCarsCount++; } if ((UpCarsCount == 0) && (DownCarsCount == 0) && (Road.CarsCount[0] == 0) && (Road.CarsCount[1] == 0) ) { Timer.Stop(); if (MessageBox.Show("Все машины проехали. Повторить моделирование?", "Повторить моделирование?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { this.Close(); } else Application.Exit(); } this.Text = "Верхняя полоса: " + UpCarsCount + " Нижняя полоса: " + DownCarsCount; for (int i = 0; i < 2; i++) Road.Lights[i].Update(Timer.Interval); for (int i=0;i<2;i++) if (Road.CarsCount[i]>0) { cCar newCar = new cCar(i+1); foreach (cCar Car in Road.Cars) if (CollChecker.RectInRect(newCar.rect,Car.rect)) return; if (newCar.rect.Y == cRoad.RenderSize / 2 - cRoad.RoadWidth / 2 + 2) Road.CarsCount[i]--; if (newCar.rect.Y == cRoad.RenderSize / 2 + 2) Road.CarsCount[i]--; Road.Cars.Add(newCar); } } }
Содержание архива
- Исходный код программы на C# для Visual studio
klausms