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

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

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) лопающегося воздушного шарика.

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