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

Задания

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

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

  1. Создать проект, в котором один автомобиль едет за другим и обгоняет его.

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

  3. Разработать проект, в автомобиль неподвижен, а фон вокруг него перемещается.

  4. Создать проект, в котором по диагонали двигаются два мяча. При ударе о стенки мячи отскакивают от них. Если мячи столкнутся друг с другом, то они должны разлететься в разные стороны.

  5. Создать проект, в котором мячик движется по диагонали и отскакивает от стенок. Стенка, с которой столкнулся мячик, должна изменить свой цвет.

  6. Составить программу движения на экране точки, которая перемещается по орбите а) квадрата; б) увеличивающегося квадрата.

  7. Составить программу движения на экране точки, которая перемещается по орбите окружности.

  8. Составить программу имитации движения секундной стрелки.

2.2 Изменение форм и видов объектов

Следующим видом анимации является изменение объектов.

Для периодичного изменения формы и вида объектов обычно используется переменная-счетчик целого типа. Каждое значение этой переменной фиксирует определенное состояние объекта.

Пример. Создать проект, в котором демонстрируются различные фазы луны.

Для оформления графического интерфейса проекта поместим на форму таймер и три компонента TImage: в Image1 загрузим изображение круглой луны, в Image2 – половины луны и в Image3 – месяца (рис. 14). Все три компонента наложим друг на друга так, чтобы они практически совпадали (рис. 15) и установим свойство Visible равным False.

Рис. 14 Фазы луны

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

Введем переменную-индикатор n целого типа. Эта переменная будет соответствовать различным фазам луны. При n = 1 выводится изображение полной луны (Image1.Visible = true), при n = 2 – половины луны (Image2.Visible = true), при n = 3 – месяца (Image3.Visible = true). Если n = 4, то луна на небе вообще отсутствует. Переменная-счетчик может менять свои значения с помощью оператора n:= n+1.

Обработчик события OnTimer будет иметь вид:

procedure TForm1.Timer1Timer(Sender: TObject);

var n: integer;

Begin

n: = n+1;

if n = 1 then begin

Image1.Visible:=true;

Image2.Visible:=false;

Image3.Visible:=false;

end;

if n=2 then begin

Image1.Visible:= false;

Image2.Visible:= true;

Image3.Visible:=false;

end;

if n=3 then begin

Image1.Visible:= false;

Image2.Visible:= false;

Image3.Visible:= true;

end;

if n=4 then begin

Image1.Visible:=false;

Image2.Visible:=false;

Image3.Visible:=false;

end;

if n>4 then n:=0;

end;

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

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

При n = 1 в Image1 загружается файл с полной луной (1.bmp), при n = 2 – с половиной луны (2.bmp), при n = 3 – с месяцем (3.bmp).

Обработчик события OnTimer будет иметь следующий вид:

procedure TForm1.Timer1Timer(Sender: TObject);

var n: integer;

Begin

n: = n+1;

if n=1 then Image1.Picture.LoadFromFile('1.bmp')

if n=2 then Image1.Picture.LoadFromFile('2.bmp')

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

if n>3 then n:=0

end;

Движение объектов и изменение их форм можно совместить в одном проекте. Рассмотрим пример такой программы.

Пример. Создадим проект «Зарядка», в котором помещенный на форму человечек выполняет следующие упражнения:

    1. поднимает и опускает руки;

    2. приседает;

    3. играет с мячом.

В данном проекте будет использоваться и изменение вида объекта (человека), и движение объекта (мяча).

Для создания графического интерфейса проекта нарисуем в графическом редакторе Paint следующие изображения:

  1. изображение человечка с опущенными руками – 1.bmp (рис. 17, а);

  2. изображение человечка с поднятыми руками – 2.bmp (рис. 17, б);

  3. изображение приседающего человека – 3.bmp (рис. 17, в);

  4. изображение мяча – ball.bmp (рис. 17, г);

  5. изображение подставки – floor.bmp (рис. 17, д).

а) б) в) г) д)

Рис. 17 Изображения, используемые в проекте.

Начнем с программирования первого упражнения. Для этого поместим на форму 3 объекта TImage со следующими свойствами:

  • У объекта Image1 в свойство Picture загрузим рисунок 1.bmp; transparent = true; visible = true; stretch = true.

  • У объекта Image2 в свойство Picture загрузим рисунок 2.bmp; transparent = true; visible = false; stretch = true.

  • У объекта Image3 в свойство Picture загрузим рисунок floor.bmp; transparent = true; visible = true; stretch = true.

При этом изображения Image1 и Image 2 должны практически точно накладываться друг на друга.

Для организации повторения первого упражнения поместим на форму компонент Timer1 с интервалом 500. В результате получим графический интерфейс подобно тому, как изображено на рис. 18.

Рис. 18 Графический интерфейс проекта «Зарядка»

для выполнения первого упражнения

Далее поместим на форму еще один объект TImage – Image4, в который загрузим изображение приседающего человечка (3.bmp). Свойство Visible у этого объекта должно равняться false. Чтобы организовать повторение приседаний, разместим на форме еще один таймер Timer2 с интервалом 500.

Рис. 19 Графический интерфейс проекта «Зарядка»

для выполнения двух упражнений

Аналогично добавим на форму изображение мяча в компоненте Image5 и компонент Timer3 с интервалом 100 для работы с мячом (рис. 20).

Рис. 20 Графический интерфейс проекта «Зарядка»

Создадим обработчик события OnTimer для компонента Timer1. Чтобы получить эффект мультипликации нужно организовать чередование видимости изображений человека с опущенными и поднятыми руками. Для этого введем переменную-индикатор n, которая может принимать последовательно значения 1 и 2. Если n = 1, то виден человек с опущенными руками. Если n = 2, то виден человек с поднятыми руками.

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

Var

Form1: TForm1;

n:integer;

procedure TForm1.Timer1Timer(Sender: TObject);

Begin

n:=n+1;

if n>2 then n:=1;

if n = 1 then

Begin

Image1.Visible:=true;

Image2.Visible:=false;

end;

if n = 2 then

Begin

Image2.Visible:=true;

Image1.Visible:=false;

end;

end;

Зададим число повторов (15 раз) для первого упражнения и организуем переход ко второму упражнению. Для этого введем еще одну переменную-индикатор k. При k =15 первый таймер должен прекратить свою работу, а второй таймер – начать.

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

Var

Form1: TForm1;

n, k: integer;

procedure TForm1.Timer1Timer(Sender: Tobject);

Begin

n:=n+1;

k:=k+1;

if n>2 then n:=1;

if n = 1 then

Begin

Image1.Visible:=true;

Image2.Visible:=false;

end;

if n = 2 then

Begin

Image2.Visible:=true;

Image1.Visible:=false;

end;

if k =15 then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=true;

end;

end;

Аналогично составляется обработчик события для второго таймера. Только здесь при f = 15 должно исчезнуть изображение приседающего человека и появиться изображение мяча и человека с опущенными руками.

Var

Form1: TForm1;

n, k, g, f:integer;

procedure TForm1.Timer2Timer(Sender: TObject);

Begin

g:=g+1;

f:=f+1;

if g>2 then g:=1;

if g = 1 then

Begin

Image1.Visible:=true;

Image4.Visible:=false;

end;

if g = 2 then

Begin

Image4.Visible:=true;

Image1.Visible:=false;

end;

if f =15 then

Begin

Timer2.Enabled:=false;

Timer3.Enabled:=true;

Image4.Visible:= false;

Image5.Visible:= true;

Image1.Visible:=true;

end;

end;

Создадим обработчик для третьего таймера, который отвечает за движение мячика. Мяч должен лететь вниз, отскакивать от пола и возвращаться в исходное положение. Организовать движение мяча можно с помощью следующей конструкции: Image5.Top:=Image5.Top + 40. Если верхняя граница мяча плюс его высота будет больше, чем верхняя граница подставки, то свойство Image5.Top должно принять начальное значение. Число повторов упражнения с мячом задается аналогично.

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

Var

Form1: TForm1;

n, k, g, f, m:integer;

procedure TForm1.Timer3Timer(Sender: TObject);

Begin

m:=m+1;

Image5.Top:=Image5.Top+40;

if (Image5.Top+Image5.Height)>Image3.Top then Image5.Top:=130;

if m =15 then Timer3.Enabled:=false;

end;

Проект «Зарядка» можно усложнить, добавив новые упражнения.

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