Задание
Тема работы:Моделирование участка с дорожным движением и ремонтом дороги ( Моделирование транспортного потока)
Создание моделей - очень важно для вопрощения задач, связанных с движением транспорта на разных участках дороги. Именно моделирование позволяет оценить перспективность любой идеи. В безопасных условиях можно протестировать любую ситуацию, чтобы прийти к наилучшему решению задач.
Перед запуском моделирования можно задать настройки интервала появления автомобилей и периода переключения светофоров.
В программе отображаются:
- автомобили и их количество в пределах участка дороги
- светофоры на перекрестке
- светофоры на участке с ремонтом дороги
- разграничены полосы движения транспорта
Скриншот архива проекта

Фрагмент программного кода
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
Телеграм
-