Примеры программ на движение - Объектно-ориентированное, визуальное программирование в Delphi на уроках

Первая программа - движение слева направо

Просмотрите код Unit1.pas для нашего примера:

Unit Unit1;

Interface

Uses

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

Dialogs, ExtCtrls, StdCtrls, Buttons;

Type

TForm1 = class(TForm)

Timer1: TTimer; { таймер }

Shape1: TShape; { первое }

Shape2: TShape; { колесо }

Shape3: TShape; { второе }

Shape4: TShape; { колесо }

Shape5: TShape; { прямоугольник }

BitBtn1: TBitBtn; { кнопка с цветным текстом,}

{ находится в закладке Additional}

Procedure BitBtn1Click(Sender: TObject);

Procedure Timer1Timer(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

End;

Var

Form1: TForm1;

Implementation

{$R *.dfm}

// Таймер активен, следовательно, через каждые

// 100 миллисекунд будет происходить вызов процедуры // Timer1Timer

Procedure TForm1.BitBtn1Click(Sender: TObject);

Begin

Timer1.Enabled := true;

End;

// Ориентируемся по Shape, у которого самая

// правая граница.

// В нашем примере это Shape3.

// Правая граница Shape3 = левый отступ + длина

// шейп, т. е. Shape3.Left + Shape3.Width

// Timer1 активен пока не достигли почти правой

Границы формы

Procedure TForm1.Timer1Timer(Sender: TObject);

Begin

// 30 пикселей не доходить до правой границы формы

If Shape3.Left + Shape3.Width <

Form1.Width - 30 then

Begin

// передвигаем вправо на 3 пикселя все части

// движущейся картинки

Shape1.Left := Shape1.Left + 3;

Shape2.Left := Shape2.Left + 3;

Shape3.Left := Shape3.Left + 3;

Shape4.Left := Shape4.Left + 3;

Shape5.Left := Shape5.Left + 3;

End

Else

// достигли правой границы движения -

// выключаем таймер

Timer1.Enabled := false;

End;

End.

При движении по вертикали будем использовать параметр Top - отступ от верхней границы формы. Значение высоты объекта находится в параметре Height.

Разберите пример использования нескольких таймеров, а так же применение "подкладки" (Panel) под картинкой для простоты кодирования движения. В примере есть рисунок, который был нарисован в Paint и вставлен как объект Image из вкладки Additional. Для связи картинки с Image в параметре Picture

рис. № 4

Вторая программа - движение ракет вверх с использованием Shape, картинки и панели

Задание: три ракеты стартуют по очереди (старт следующей при достижении верхней границы), с помощью кнопок можно заставить стартовать ракеты раньше.

Расположение объектов на форме можно рассмотреть на рисунке № 5:

    - первая ракета из Shape; - вторая из таких же шейпов на панели (Panel находится в Standard); - третья нарисована в Paint и вставлена через Image.

После нажатия на кнопку старт она становится недоступной - параметр Enabled становиться равным false.

№ 5

Рис. № 5

Просмотрите как работает программа с тремя ракетами.

Var

Form1: TForm1;

Step : byte = 3; { шаг смещения ракеты равен 3 пикселям }

Implementation

{$R *.dfm}

// Пример движения графических объектов: Shape, Panel, Image

// Вторая ракета стартует после выхода на орбиту первой,

// то же самое и со второй.

// Вторая и третья ракета могут стартовать и при нажатии

// кнопок "старт"

// Обращение к объекту Timer происходит каждый раз по

// прошествии милисекунд, указанных в параметрах таймера.

// Если таймер имеет начальное значение параметра Enabled

// равным true, то он стартует одновременно с активизацией

// формы, иначе (значение false) только тогда, когда

// параметр Enabled будет равен true.

// Процедура движения стандартных графических образов - // Shape

Procedure TForm1.Timer1Timer(Sender: TObject);

Begin

If Shape4.Top > 50 then { пока не долетели - сдвиг на шаг }

Begin

Shape1.Top := Shape1.Top - step;

Shape2.Top := Shape2.Top - step;

Shape3.Top := Shape3.Top - step;

Shape4.Top := Shape4.Top - step;

Shape5.Top := Shape5.Top - step;

Shape6.Top := Shape6.Top - step;

Shape7.Top := Shape7.Top - step;

Shape8.Top := Shape8.Top - step;

End

Else

Begin

Timer1.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button2

// для автоматического старта второй ракеты

Form1.Button2.Click; { старт второй ракеты }

End;

End;

// Кнопка старт для первой ракеты

Procedure TForm1.Button1Click(Sender: TObject);

Begin

Timer1.Enabled := true; { включить таймер - старт }

Button1.Enabled := false; { кнопка старт неактивна }

End;

// Процедура движения панели (Panel)

Procedure TForm1.Timer2Timer(Sender: TObject);

Begin

If Panel1.Top > 50 then { пока не долетели - сдвиг на шаг }

Panel1.Top := Panel1.Top - step

Else

Begin

Timer2.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button3

// для автоматического старта третьей ракеты

Form1.Button3.Click; { старт третьей ракеты }

End;

End;

// Кнопка старт для второй ракеты

Procedure TForm1.Button2Click(Sender: TObject);

Begin

Timer2.Enabled := true; { включить таймер - старт }

Button2.Enabled := false; { кнопка старт неактивна }

End;

// Процедура движения графического образа (Image)

Procedure TForm1.Timer3Timer(Sender: TObject);

Begin

If Image1.Top > 50 then { пока не долетели - сдвиг на шаг }

Image1.Top := Image1.Top - step

Else

Timer2.Enabled := false;

End;

// Кнопка старт для третьей ракеты

Procedure TForm1.Button3Click(Sender: TObject);

Begin

Timer3.Enabled := true; { включить таймер - старт }

Button3.Enabled := false; { кнопка старт неактивна }

End;

End.

Как выполнить движение по диагонали?

Для движения графического объекта по диагонали нужно в процедуре таймера одновременно выполнить смещение как влево (вправо), так и вниз (вверх).

Похожие статьи




Примеры программ на движение - Объектно-ориентированное, визуальное программирование в Delphi на уроках

Предыдущая | Следующая