Пользовательский интерфейс
При запуске приложения открывается главная форма (Рисунок 3). После нажатия на кнопку «start», программа визуализирует движения автомобилей, а так же показывает сигналы светофора (Рисунок 4).
Рисунок 4. Движение транспортных средств.
После не продолжительного времени пользователь увидит, что автомобили останавливаются на запрещающий сигнал светофора, а остальные автомобили продолжают движение на разрешающий сигнал светофора.
Рисунок 5. Соблюдение сигнала светофора.
Тестирование
При первом тестировании программы возникла ошибка отображения сигналов 2 светофоров. Данные ошибки были связанны с неправильной расстановкой времени в таймере. Ошибку удалось устранить сделав таймеры тождественными.
При втором тестировании возникла ошибка с выездом на запрещающий сигнал светофора. Данная ошибка возникала в связи не правильным распознаванием сигнала светофора. Для удобства устранения ошибки был добавлен 2 светофора.
Заключение
В результате проведенной работы было создано приложение, моделирующую движение на перекрестке. Поставленные цель и задача были достигнуты.
Программа требует доработки. В дальнейшем, после доработки, возможно увеличение сложности приложения.
Библиографический список
1. Перекрёсток [Электронный ресурс] : Материал из Википедии — свободной энциклопедии : Версия 50319957, сохранённая в 17:46 UTC 1 декабря 2012 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2012. — Режим доступа: http://ru.wikipedia.org/?oldid=50319957
2. На перекрестке – Правила безопасного проезда перекрестков - электронный ресурс - Режим доступа: http://rutrassa.ru/drive/perekrestok.php
Приложение
Исходный код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Bevel5: TBevel;
Bevel6: TBevel;
Bevel7: TBevel;
Bevel8: TBevel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
car1: TShape;
car2: TShape;
Button1: TButton;
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;
Timer5: TTimer;
car3: TShape;
Car4: TShape;
Timer6: TTimer;
Timer7: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
procedure Timer5Timer(Sender: TObject);
procedure Timer6Timer(Sender: TObject);
procedure Timer7Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,y: Byte;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
i:= 1;
Shape1.Brush.Color:= clRed;
Shape2.Brush.Color:= clWhite;
Shape3.Brush.Color:= clWhite;
Shape4.Brush.Color:= clWhite;
Shape5.Brush.Color:= clWhite;
Shape6.Brush.Color:= clGreen;
Timer1.Enabled:= True;
Timer4.Enabled:= True;
Timer5.Enabled:= True;
Timer6.Enabled:= True;
Timer7.Enabled:= True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
car1.Brush.Color:= clBlack;
car2.Brush.Color:= clBlue;
car3.Brush.Color:= clRed;
car4.Brush.Color:= clGreen;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Case i of
0: begin
Shape1.Brush.Color:= clRed;
Shape2.Brush.Color:= clWhite;
Shape3.Brush.Color:= clWhite;
Shape4.Brush.Color:= clWhite;
Shape5.Brush.Color:= clWhite;
Shape6.Brush.Color:= clGreen;
Timer4.Enabled:= True;
Timer6.Enabled:=true;
end;
1: begin
Timer1.Enabled:= False;
y:= 0;
Timer3.Enabled:= True;
end;
2: begin
Shape1.Brush.Color:= clWhite ;
Shape2.Brush.Color:= clWhite;
Shape3.Brush.Color:= clGreen;
Shape4.Brush.Color:= clRed;
Shape5.Brush.Color:= clWhite;
Shape6.Brush.Color:= clWhite;
Timer5.Enabled:= True;
Timer7.Enabled:=True;
end;
3: begin
Timer1.Enabled:= False;
y:= 0;
Timer2.Enabled:= True;
end;
end;
inc(i);
If i = 4 then
i:= 0;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
If Shape3.Brush.Color= clGreen then
Shape3.Brush.Color:= clWhite
else
Shape3.Brush.Color:= clGreen;
inc(y);
If y = 9 then
begin
Timer2.Enabled:= False;
Shape1.Brush.Color:= clWhite;
Shape2.Brush.Color:= clYellow;
Shape3.Brush.Color:= clWhite;
Shape4.Brush.Color:= clWhite;
Shape5.Brush.Color:= clYellow;
Shape6.Brush.Color:= clWhite;
Timer1.Enabled:= True;
end;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
If Shape6.Brush.Color= clGreen then
Shape6.Brush.Color:= clWhite
else
Shape6.Brush.Color:= clGreen;
inc(y);
If y = 9 then
begin
Timer3.Enabled:= False;
Shape1.Brush.Color:= clWhite;
Shape2.Brush.Color:= clYellow;
Shape3.Brush.Color:= clWhite;
Shape4.Brush.Color:= clWhite;
Shape5.Brush.Color:= clYellow;
Shape6.Brush.Color:= clWhite;
Timer1.Enabled:= True;
end;
end;
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if car1.Top = - 50 then
begin
car1.Top:= 384;
end;
car1.Top:= car1.Top - 1;
If ((Shape5.Brush.Color = clYellow) OR (Shape6.Brush.Color = clRed) OR (Timer3.Enabled)) AND (car1.Top = 264) then
Timer4.Enabled:= False;
end;
procedure TForm1.Timer5Timer(Sender: TObject);
begin
if car2.Left = - 50 then
begin
car2.Left:= 700;
end;
car2.Left:= car2.Left - 1;
If ((Shape2.Brush.Color = clYellow) OR (Shape1.Brush.Color = clRed) OR(Timer2.Enabled)) AND (car2.Left = 415) then
Timer5.Enabled:= False;
end;
procedure TForm1.Timer6Timer(Sender: TObject);
begin
if car4.Top = 384 then
begin
car4.Top:= 0;
end;
car4.Top:= car4.Top +1;
If ((Shape5.Brush.Color = clYellow) OR (Shape4.Brush.Color = clRed) OR (Timer3.Enabled)) AND (car4.Top = 80) then
Timer6.Enabled:= False;
end;
procedure TForm1.Timer7Timer(Sender: TObject);
begin
if car3.Left = 700 then
begin
car3.Left:= 0;
end;
car3.Left:= car3.Left + 1;
If ((Shape2.Brush.Color = clYellow) OR (Shape1.Brush.Color = clRed) OR(Timer2.Enabled)) AND (car3.Left = 250) then
Timer7.Enabled:= False;
end;
end.
