Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_2_chast.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
4.1 Mб
Скачать

Задания

  1. Создать проект моделирования движения человека:

    1. идущего;

    2. бегущего;

    3. танцующего;

    4. выполняющего сигнализацию флажками;

    5. играющего на гитаре.

  2. Создать проект, в котором распускается цветок.

  3. Создать проект, в котором два человека бросают друг другу мячик. Когда мячик подлетает к человечку, он должен поднять руки, чтобы отбить мяч. Затем человек опускает руки.

2.3 Изменение размеров объектов

Размеры объектов в Delphi определяются свойствами Width (Ширина) и Height (Высота). Чтобы задать другие размеры у компонентов, необходимо установить новые значения этих свойств. Например, команда Image1.Width:= Image1.Width + 5 увеличивает ширину объекта Image1 на 5 пикселей.

Пример. Создать проект, в котором эффект движения автомобиля достигается за счет постепенно увеличивающегося в размерах впереди стоящего дерева.

Оформите графический интерфейс проекта подобно тому, как показано на рис. 21. В компонент Image1 помещено изображение дороги, в Image2 – изображение автомобиля, в Image3 – изображение дерева. Чтобы дерево могло увеличивать свои размеры, у объекта Image3 следует обязательно установить свойство Stretch (Растяжение) равным True.

Текст процедуры обработчика события OnTimer будет следующим:

procedure TForm1.Timer1Timer(Sender: TObject);

Begin

Image3.Width:=Image3.Width+5;

Image3.Height:=Image3.Height+5;

Image3.left:=Image3.Left-3;

If (Image3.Top+Image3.Height)>(Image1.Top) then

Begin

Image3.Left:=30;

Image3.Width:=65;

Image3.Height:=90;

end;

end;

Рис. 21 Графический интерфейс окна

Чтобы эффект движения был более реалистичным можно добавить в проект увеличивающуюся разметку на дороге, а также различные объекты, стоящие вдоль дороги.

2.4 Пример программы движения объектов с элементами анимации и мультипликации типа «Тараканьи бега»

Рассмотрим пример проекта «Тараканьи бега», в котором одновременно используется движение объекта и изменение вида этого же объекта.

В этом проекте требуется организовать соревнование двух тараканов. Выигрывает бега тот, кто быстрее доберется до старта. Во время движения тараканов нужно показать различные виды расположения их ног при беге.

В графическом редакторе выполним изображения тараканов подобно тому, как изображено на рис. 22:

n1.bmp n2.bmp n3.bmp n4.bmp

m1.bmp m2.bmp m3.bmp m4.bmp

Рис. 22 Изображения тараканов

На форму в компоненты Image1 и Image2 загрузим рисунки тараканов перед стартом (рис. 23). Объекты Timer1 и Timer2 с интервалом 100 каждый будут отвечать за движение красного и желтого тараканов соответственно. Для отображения надписи с названием победителя забега будет служить помещенная на форму метка Label1.

Рис. 23 Графический интерфейс проекта «Тараканьи бега»

Сначала опишем бег красного таракана. Для задания его движения нужно изменять его координату по оси Ox или свойство Left на некоторое число. Чтобы скорость таракана могла меняться случайным образом, свойство Left следует увеличивать на случайное число:

Image1.Left:=Image1.Left + random(10).

В описанном операторе число может принимать любые случайные значения в диапазоне от 0 до 9.

При достижении красным тараканом правой границы бега должны прекратиться, и если он пришел первым, то в надпись Label1 следует вывести сообщение: «Победил красный». Эти действия можно описать с помощью следующего условного оператора:

If Image1.Left>(Form1.Width – Image1.Width) then

begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:=’Победил красный’;

end;

Чтобы у таракана при беге менялось расположение ног, используем переменную-счетчик n, которая может принимать четыре значения. В зависимости от значения n в компонент Image1 будет загружаться соответствующий рисунок:

n:=n+1;

if n>4 then n:=1;

if n=1 then image1.Picture.LoadFromFile('n1.bmp');

if n=2 then image1.Picture.LoadFromFile('n2.bmp');

if n=3 then image1.Picture.LoadFromFile('n3.bmp');

if n=4 then image1.Picture.LoadFromFile('n4.bmp');

Таким образом, текст обработчика события OnTimer, описывающего движение красного таракана будет следующим:

Var

Form1: TForm1;

n,m: integer;

procedure TForm1.Timer1Timer(Sender: Tobject);

Begin

randomize;

n:=n+1;

Image1.Left:=Image1.Left+random(10);

if Image1.left> (Form1.Width – Image1.Width) then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:='Победил красный';

end;

if n>4 then n:=1;

if n=1 then image1.Picture.LoadFromFile('n1.bmp');

if n=2 then image1.Picture.LoadFromFile('n2.bmp');

if n=3 then image1.Picture.LoadFromFile('n3.bmp')

if n=4 then image1.Picture.LoadFromFile('n4.bmp')

end;

Аналогично задается перемещение желтого таракана:

Var

Form1: TForm1;

n,m: integer;

procedure TForm1.Timer1Timer(Sender: Tobject);

Begin

randomize;

m:=m+1;

Image2.Left:=Image21.Left+random(10);

if Image2.left> (Form1.Width – Image2.Width) then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:='Победил желтый';

if m>4 then m:=1;

if m=1 then image2.Picture.LoadFromFile('m1.bmp');

if m=2 then image2.Picture.LoadFromFile('m2.bmp');

if m=3 then image2.Picture.LoadFromFile('m3.bmp')

if m=4 then image2.Picture.LoadFromFile('m4.bmp')

if m>4 then m:=1;

end;

Задание случайной скорости у тараканов возможно не только за счет изменения положения объектов относительно левой границы случайным образом. Скорость движения тараканов также можно изменять с помощью введения случайного интервала времени у таймеров.

Тогда возможен следующий текст программного кода:

Var

Form1: TForm1;

i,n,m,sc1,sc2,: integer;

procedure TForm1.Timer1Timer(Sender: Tobject);

Begin

randomize;

n:=n+1;

sc1:=sc1+1;

if sc1>5 then

Begin

sc1:=0;

Timer1.Interval:=10+random(100)+random(100);

end;

Image1.Left:=Image1.Left+10;

if Image1.left> Form1.Width then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:='Победил красный';

end;

if n>4 then n:=1;

if n=1 then image1.Picture.LoadFromFile('n1.bmp');

if n=2 then image1.Picture.LoadFromFile('n2.bmp');

if n=3 then image1.Picture.LoadFromFile('n3.bmp')

if n=4 then image1.Picture.LoadFromFile('n4.bmp')

end;

procedure TForm1.Timer2Timer(Sender: TObject);

Begin

randomize;

m:=m+1;

sc2:=sc2+1;

if sc2>5 then

Begin

sc2:=0;

Timer2.Interval:=10+random(100)+random(100);

end;

Image2.Left:=Image2.Left+10;

if Image2.left> Form1.Width then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:='Победил желтый';

end;

if m>4 then m:=1;

if m=1 then image2.Picture.LoadFromFile('m1.bmp');

if m=2 then image2.Picture.LoadFromFile('m2.bmp');

if m=3 then image2.Picture.LoadFromFile('m3.bmp')

if m=4 then image2.Picture.LoadFromFile('m4.bmp')

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]