Моделювання. Створення моделі роздоріжжя

Перед тим як створити виріб чи складну систему пристроїв дуже вигідно створити комп'ютерну віртуальну модель.

Сьогодні ми створимо модель роздоріжжя. 
Світлофори блимають кольорами. Автомобілі зупиняються на червоне світло і їдуть на зелене. Пішоходи ходять туди-сюди. Життя вирує.

На першому етапі ми створимо програму, яка імітує роботу світлофора.

Потім створимо проїжджу частину дороги і створимо автомобілі, які будуть зупинятися на червоне світло

(Закачати готові проекти можна в кінці цієї статті)
Хід роботи: створюємо новий проект. Знаходимо на вкладці Additional компонент Shape і кладемо на форму. Також нам потрібний компонент Timer, він знаходиться на палітрі System (це невидимий компонент, його ставимо в будь яке місце форми).
Властивість Shape компоненту Shape дає можливість відобразити світлофор з круглими, або квадратними ліхтарями. Властивість Brush Color змінює колір ліхтарів. Змінюючи колір, ми будемо вмикати і вимикати ліхтарі нашого світлофору.
Розмістимо три ліхтарі вертикально і надамо їм сірого кольору.
Тепер нам потрібно запрограмувати таймер.  Вибираємо мишкою на формі наш таймер і в інспекторі об’єктів встановлюємо такі параметри.
Enable – включає, або виключає наш таймер. В нашому випадку таймер включений весь час.
Inteval – проміжок часу, через який повинен спрацьовувати таймер. В нашій програмі це 2 секунди (2000 тіків).
Name – ім’я нашого таймера. Нічого не змінюємо.
Tag – комірка пам’яті для збереження одного числа. Там записано нуль.
Два рази клацаємо мишкою по таймеру. Відкриється програма. Між командами Begin i End; записуємо  текст програми, який буде виконуватися кожного разу, коли спрацьовує таймер (через кожні 2 секунди).
timer1.Tag:=timer1.Tag+1;
if timer1.Tag=1 then begin shape3.Brush.Color:=clsilver;                  shape1.Brush.Color:=clred; end;
if timer1.Tag=2 then begin shape1.Brush.Color:=clsilver;                  shape2.Brush.Color:=clyellow;end;
if timer1.Tag=3 then begin shape2.Brush.Color:=clsilver;                  shape3.Brush.Color:=clgreen;end;
if timer1.Tag=3 then timer1.Tag:=0;
Зберігаємо проект в окрему папку і запускаємо на виконання.
Для тих, хто хоче глибше зрозуміти як працює ця програма читаємо опис:
timer1.Tag:=timer1.Tag+1; – збільшуємо  число в комірці Tag на одиницю. Кожен ліхтар відповідає своїй цифрі.
Червоний(верхній) -1
Жовтий – 2
Зелений -3
if timer1.Tag=1 then begin shape3.Brush.Color:=clsilver;                  shape1.Brush.Color:=clred; end; – Якщо в комірці Tag знаходиться 1 то виключаємо зелений ліхтар і включаємо червоний.
if timer1.Tag=2 then begin shape1.Brush.Color:=clsilver;                  shape2.Brush.Color:=clyellow;end; – Аналогічно, коли в комірці 2 то вимикаємо червоний і вмикаємо жовтий
if timer1.Tag=3 then begin shape2.Brush.Color:=clsilver;                  shape3.Brush.Color:=clgreen;end; –Вмикаємо зелений колір.
if timer1.Tag=3 then timer1.Tag:=0 – В комірці змінюємо число на нуль і все починається спочатку.
 Закачати готовий проект можна тут.

Учасники гуртка розвинули цю тему, проявили фантазію і зобразили ціле роздоріжжя з світлофорами.
Для продовження роботи нам потрібно створити новий проект.
Сьогодні ми спробуємо змоделювати одне автомобільне роздоріжжя. Розмістимо світлофори для автомобілів та пішоходів, намалюємо і розмістимо машини, які будуть рухатися, дотримуючись правил дорожнього руху.
Кінецевий результат нашого моделювання виглядатиме так:
 

План.

1. Графічними засобами візуального середовища Delphi 7 створюємо зображення роздоріжжя з розміткою і світлофорами.
2. Програмуємо сітлофори.
3. За допомогою графічного редактора створюємо автомобілі.
4. Програмуємо всю динаміку руху та зупинки автомобілів на червоне світло.
Хід роботи.
1. Запускаємо Delphi7. Лівою кнопкою клацаємо по формі. Змінюємо розміри, заголовок і стиль форми так як показано на малюнку. Якщо Ваш монітор має більші розміри і Ви не збираєтеся демонструвати свою програму на старих машинах то виставляйте інші розміри форми (ClientHeight - висота і СlientWidth - ширина. Властивість Caption (заголовок) змінюємо на свій розсуд. Можна написати назву програми, або своє прізвище. Стиль вікна вибираємо - bsDialog.
2. Вибираємо на стандандартній палітрі компонентів Panel, розміщуємо її на фоормі і трохи змінюємо властивості. Властивість Align вибираємо AlClient. Наша панель розгорнеться на всю форму.
3. Panel1 після всіх операцій повинна займати всю форму і має бути темно-сірого кольору. Вона буде відігравати роль проїжджої частини. В палітрі Aditional знаходимо компонент Shape ставимо його на панель.
Фарбуємо його в зелений колір, копіюємо і вставляємо три рази. Це буде трава, яка росте біля дороги. Наша форма тепер має виглядати так.
4. Залишилося намалювати розмітку. Візьмемо вже знайомий нам компонент Shape і намалюємо на дорозі білий прямокутник. Його товщину і координати можна регулювати в інспекторі об’єктів. Параметри TopLeftHeightWidth не поребують пояснення. Поміняйте їхні значення і зразу побачите зміни на екрані.
Натискаючи Ctrl+c i Ctrl+v можна скопіювати і вставити необхідну кількість ліній для розмітки.
Якщо ви наберетеся терпіння, то через деякий час отримаєте прекрасну проїжджу частину з розміткою посередині і зеленою травичкою на обочині. Ви, звичайно, можете намалювати це все в графічному редакторі набагато швидше і красивіше. Але під час роботи програми ви будете сильно розчаровані. Нажаль компонент Panel не має канви і по ньому неможливо намалювати лінію використовуючи функцію LineTo. Можливо хтось знає інший спосіб малювання по панелі пишіть мені на пошту. Ті способи, що знаю я трохи заскладні для учнів.
5 Далі нам необхідно встановити світлофори для автомобілів та пішоходів. Для цього беремо той самий Shape і ставимо на потрібне місце декілька фігур.
Клацаємо по об’єкту Shape лівою мишкою. Властивість Shape змінюємо на Circlе і отримаємо круг. Для автомобілів будуть круглі світлофори, а для пішоходів - квадратні. Змінюючи кольори та форму об’єктів Shape ми отримаємо цілий набір світлофорів.
6. Якщо ви запустите програму на виконання то ваші світлофори будуть просто світити всіма кольорами. Настав час надати нашій програмі трохи динаміки. Світлофори повинні через певні проміжки часу включати ліхтарі потрібного кольору. Компонент, який може відраховувати час називається Timer. Знаходимо такий компонент і розміщуємо його в будь-якому місці форми. Для керування всіма світлофорами достатньо одного таймера. Властивість Interval змінюємо на 3000, що відповідає трьом секундам часу. Для тестування програми цього достатньо. В реальних світлофорів час інших.

7. В нашій маделі будуть рухатися дві машини вертикальною дорогою і дві горизонтальною. Програмуючи таймер потрібно врахувати всі можливі варіанти руху на роздоріжжі. Два рази лівою мишкою по таймеру і пишемо такий код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case t of // змінна t цілого типу оголошена в глобальних змінних
0: begin
//Вертикальні машини і пішоходи стоять
// Вертикальний верхній автомобільний світлофор
shape140.Brush.Color:= clsilver; // зелений ні
shape141.Brush.Color:= clsilver; // Жовтий ні
shape142.Brush.Color:= clred; // Червоний так
// Вертикальний автомобільний нижній світлофор
shape155.Brush.Color:= clred; // червоний так
shape156.Brush.Color:= clsilver; // жовтий ні
shape157.Brush.Color:= clsilver; // зелений ні
// Вертикальні пішохідні світлофори
shape158.Brush.Color:= clsilver;//зелений ні
shape159.Brush.Color:= clred;//червоний так
shape170.Brush.Color:= clsilver;// зелений ні
shape171.Brush.Color:= clred;//червоний так
shape172.Brush.Color:= clsilver;//зелений
shape173.Brush.Color:= clred;//червоний
shape164.Brush.Color:= clsilver;// зелений
shape165.Brush.Color:= clred;// червоний
// горизонтальний автомобільний правий світлофор
//світить зеленим
shape125.Brush.Color:= clsilver; // червоний ні
shape126.Brush.Color:= clsilver; // жовтий ні
shape127.Brush.Color:= clgreen; //зелений так
// горизонтальний автомобільний лівий сітлофор також світить зеленим кольором
shape119.Brush.Color:= clgreen; //зелений так
shape120.Brush.Color:= clsilver; //жовтий ні
shape121.Brush.Color:= clsilver; //червоний ні
// горизонтальні пішохідні світлофори
shape176.Brush.Color:= clsilver; //червоний ні
shape177.Brush.Color:= clgreen; //зелений так
shape175.Brush.Color:= clsilver; //червоний ні
shape174.Brush.Color:= clgreen; //зелений так
shape180.Brush.Color:= clsilver; //червоний ні
shape181.Brush.Color:= clgreen; //зелений так
shape182.Brush.Color:= clsilver; //сневоний ні
shape183.Brush.Color:= clgreen; //зелений так
end;
1: begin
//вертикальні машини і пішоходи готуються рухатися
// Весь текст програми можна знайти на www.Lidersite.com
//в розділі «Візуальне програмування для дітей»
end;
2: begin
//вертикальні машини і пішоходи рухаються
End;
3: begin
//вертикальні машини і пішоходи рухаються, а горизонтальні готуються
end;
end;
inc(t);
if t=4 then t:=0;
end;
Потрібно зауважити, що номера Shape у вашій програмі будуть зовсім інші. Щоб дізнатися ім’я і номер об’єкта, потрібно до нього підвести вказівник мишки.
8. Після запуску на виконання програми, ми побачимо як світлофори через кожні 3 секунди змінюють кольори. Залишилося тільки створити і запрограмувати автомобілі.
Беремо компонент Panel і розмістимо її на нашу дорогу десь внизу. Її властивість Caption змінюємо на пробіл. Зверху на неї поставимо компонент Image так як показано на малюнку.

Розгортаємо картинку на всю панель (властивість alClient), а властивість Stretch змінюємо на True. Малюємо в графічному редакторі машину (вид зверху) і зберігаємо в папку, де знаходиться наш дельфі-проект. Вибираємо об’єкт Image (нашу машину) в інспекторі об’єктів знаходимо властивість Picture натискаємо три крапки і завантажуємо (Load) свою намальовану картинку. Повинно бути щось таке:
9. Біля машини ставимо ще один Timer. Кожна машина повинна мати свій таймер. Він буде визначати її швидкість. Щоб автомобілі рухалися по екрану, потрібно змінювати їхні координати. В нашому випадку потрібно змінювати координату об’єкта Panel на якому розміщена картинка з машиною.
Клацаємо два рази по таймеру, що знаходиться біля нашої машини і пишемо програму
panel2.Top:=panel2.Top-3;// вертикальна координата (Тор)зменшується на 3
// пікселі. Машина рухається верх.
if (panel2.top < 504) and (panel2.top > 480) and (shape157.Brush.Color <> clGreen) then panel2.Top:=panel2.Top+3; //якщо координата між 504 і 480 (перед
//світлофором) і колір світлофора не зелений то стояти (Тор+3)
if panel2.Top<1 then panel2.Top:=700;//якщо виїхала за екран то з’явитися
// на початку екрану.
Горизонтальну координату не змінюємо. Інтервал таймера ставимо 10. Якщо інтервал зменшувати то швидкість збільшиться. Можна від координати Тор віднімати не 3, а 5 чи 6 тоді також збільшиться швидкість, але машина буде рухатися стрибками.
Аналогічним чином створюємо машину, яка рухається горизонтально зліва на право.
procedure TForm1.Timer4Timer(Sender: TObject);
begin
panel3.left:=panel3.left+3;
if (panel3.left > 320) and (panel3.left < 350) and (shape119.Brush.Color <> clGreen) then panel3.left:=panel3.left-3;
if panel3.left>1024 then panel3.left:=0;
end;
В горизонтальному випадку ми змінюємо координату Left (відстань від лівого краю форми).
Самостійно створіть автомобілі, що рухаються вліво і вниз. Після виконання всіх вище вказаних вказівок ви отримаєте таку картинку. Автомобілі рухаються роздоріжжям і зупиняються на червоне світло.
Вдосконалювати цю програму можна до нескінченності.
1. Добавити пішоходів
2. Машини сповільнюються і прискорюються
3. Машини обганяють одна одну
4. Машини блимають поворотами і повертають вправо або вліво.
Придумайте і Ви яке-небудь вдосконалення для цієї програми. Свої думки, пропозиції і зауваження надсилайте на SLKuty@meta.ua, або пишіть відгуки на www.Lidersite.com у розділі інформатика-візуальне програмування для дітей.

Весь проект качаємо тут 

Моя сторінка

Немає коментарів:

Дописати коментар