Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
9
Добавлен:
14.08.2019
Размер:
1.17 Mб
Скачать

1.1.3. Проект «Светофор»

П остановка задачи. Три шарика, перекрашиваясь поочередно, имити-руют работу светофора.

Реализация. Положите на форму компонент TPanel. Он является несущей конструкцией для компонентов, лежащих на нем. Расположите на нем три компонента типа TShape. Задайте для них свойство StCircle, чтобы они имели форму круга. Свойство Brush.Color компонента TShape используется для задания цвета круга. Расположите два компонента TButton – кнопки «Пуск» и «Стоп». Также положите компонент TTimer. Форма этого проекта приведена на рис. 6.

Рис. 6. Форма проекта «Светофор»

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Panel1: TPanel;

Shape1: TShape;

Shape2: TShape;

Shape3: TShape;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

down:boolean;

i:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

down:=true;

i:=1;

timer1.enabled:=false;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled:=true;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

timer1.Enabled:=false;

close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if i=2 then

begin

shape2.Brush.Color:=clyellow;

if down then

begin

shape1.Brush.Color:=clgray;

i:=3;

end

else

begin

shape3.Brush.Color:=clgray;

i:=1;

end;

end

else

begin

if i=1 then

begin

shape1.Brush.Color:=clred;

shape2.Brush.Color:=clgray;

i:=2;

down:=true;

end

else

begin

shape3.Brush.Color:=clgreen;

shape2.Brush.Color:=clgray;

i:=2;

down:=false;

end;

end;

end;

end.

Задание. Положите на форму регулятор TTrackBar для увеличения или уменьшения времени свечения светофора.

В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор

if (TrackBar1.Position=0) then

ShowMessage(‘Задайте интервал’);

В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор

Timer1.Interval:=TrackBar1.Position*100;

Множитель 100 не обязателен.

1.1.4. Проект «Движение шарика tShape с отражением»

Постановка задачи. Проект должен реализовать движение компонента TShape в виде раскрашенного шарика с отражением от краев формы. Шаги перемещения задавайте случайным образом.

Реализация. Положите на форму панель, на нее три кнопки TBitBtn со страницы Additional: Start, Retry, Close. На эти кнопки можно поместить готовые надписи с соответствующими рисунками.

Положите на форму TShape в виде не очень большого кружка и TTimer со страницы System. Вид формы приведен на рис. 7.

Рис. 7. Форма проекта «Движение шарика с отражением»

В разделе var опишем глобальные переменные:

var cw, ch, dx, dy, r : integer;

Переменные cw, ch хранят ширину и высоту рабочей (клиентской) области формы, т. е. без учета ее границ. Ниже приведен код.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Shape1: TShape;

Timer1: TTimer;

procedure BitBtn1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

dx,dy,cw,ch,r:integer;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin // Кнопка “Start”

timer1.Enabled:=true;

end;

// Зададим начальные данные

procedure TForm1.FormCreate(Sender: TObject);

begin

cw:=clientwidth;

ch:=clientheight;

randomize;

repeat

dx:=-10+random(21);

dy:=-10+random(21);

until (dx<>0)and(dy<>0);

r:=shape1.Width div 2; // Радиус шарика

shape1.Left:=cw div 2; // Начальное положение в центре

shape1.Top:=ch div 2; // формы

timer1.Enabled:=false;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

shape1.Left:=shape1.Left+dx;

shape1.Top:=shape1.Top+dy;

if (shape1.Left<0)or(shape1.Left+2*r>=cw) then

dx:=-dx;

if (shape1.top<0)or(shape1.top+2*r>=ch-panel1.Height) then

dy:=-dy;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin // Кнопка “Retry”

cw:=clientwidth;

ch:=clientheight;

repeat

dx:=-10+random(21);

dy:=-10+random(21);

until (dx<>0)and(dy<>0);

shape1.Left:=cw div 2;

shape1.Top:=ch div 2;

timer1.Enabled:=true;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

Timer1.Enabled:=false;

Close;

end;

end.

Задание. Усовершенствуйте проект так, чтобы цвет шарика задавался случайным образом, радиус тоже менялся случайно в заданном интервале.

Для задания цвета можно использовать функцию RGB:

Shape1.Brush.Color := RGB(random(256), random(256), random(256));