Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основ Паскаль в примерах !!.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
226.74 Кб
Скачать

21.2. Программирование движущихся объектов

Выделим два подхода к решению задач моделирования движений средствами языка программирования:

1. «Нарисуй – сотри – и нарисуй в новом месте». Этот способ реализовать легко: нужно организовать цикл, задав координаты для перемещения объекта в требуемом направлении; в теле цикла предусмотреть: очистку экрана, изображение объекта в новом месте и приостановку выполнения программы.

2. «Нарисуй – закрась цветом фона – и нарисуй в новом месте». Здесь объект прорисовывается на старом месте дважды: вначале требуемым цветом, а затем цветом фона.

Примеры:

Пример 1. Перемещение красного объекта квадратной формы вдоль черного экрана слева направо.

Метод 1

Метод 2

Program DVIG_1;

Uses Crt, Graph ;

Var a, b, x : Integer ;

Begin

a:=detect; InitGraph (a, b, '');

For x:=0 to 639 do

Begin

SetFillStyle (1, Red);{красный}

Bar (x, 200, x+10, 210);

Delay (1000);

ClearDevice {очистка экрана}

End;

Readln;

CloseGraph

End.

Program DVIG_2;

Uses Crt, Graph ;

Var a, b, x : Integer ;

Begin

a:=Detect; InitGraph (a, b, '');

For x:=0 to 639 do

Begin

SetFillStyle (1,Red); {красный}

Bar (x, 200, x+10, 210);

Delay (1000);

SetFillStyle (1, Black); {черный}

Bar(x, 200, x+10, 210);

End;

Readln; CloseGraph

End.

* Если завершение перемещения объекта нужно связать с действиями пользователя (например, с нажатием на клавишу), удобно использовать функцию KeyPressed модуля CRT. Функция возвращает значение TRUE, если нажата какая-либо клавиша: While not KeyPressed Do …; (пока не нажата клавиша, делать …).

* Пример 2. Вертикальное перемещение шарика (от верхней границы экрана к нижней и обратно; и т. д.).

Пока не нажата какая-либо клавиша (not KeyPressed) будем многократно выполнять следующие действия: рисуем красный круг, который закрашиваем его на старом месте цветом фона (черным), ординату y (центра круга) увеличиваем на dy = 1, рисуем новый круг и т.д. Когда круг коснется нижней или верхней границы экрана, значение dy изменим на противоположное и круг изменит направление движения.

Program PADENIE;

Uses Crt, Graph ;

Const R=10; x=320;

Var a, b, y, dy : Integer ;

Begin

a:=Detect; InitGraph (a, b, '');

y:=R; dy:=1;

While not KeyPressed do

Begin

SetFillStyle (1, Red); {красный}

PieSlice (x, y, 0, 360, R) ;

Delay (100);

SetFillStyle (1,Black); {черный}

PieSlice (x, y, 0, 360, R) ;

y:=y + dy;

if (y=640-R) or (y=R) then dy:=-dy

End; CloseGraph

End.

1. Испытайте эти программы; выберите подходящие цвета, скорости перемещения. Обратите внимание, что программа PADENIE моделирует движение шарика в туннеле белого цвета. Измените программу для перемещения шарика в однородной среде (например, на синем фоне).

2. Примените наиболее понятный Вам метод для моделирования движения:

1) вертикального падения теннисного мячика; * 2) автомобиля;

3) неопознанного летающего объекта; 4) парусной лодки;

5) солнца по небу; 6) лопающегося воздушного шарика.

Выполните творческое задание после просмотра изображений на диске.