Графические возможности языка PASCAL

ÄВВЕДЕНИЕ

ÄРождение Паскаля

ÄГрафические возможности языка Паскаль

ÄРабота в графическом видеорежиме. Общий обзор

ÄИнициализация графического режима

ÄУправление экраном и окнами

ÄУправление цветом и фоном

ÄПостроение простейших графических изображений

ÄУправление курсором

ÄВывод текстовой информации в графическом видеорежиме

ÄАлгоритм построения окон и статических объектов в них

ÄДеловая графика

ÄПостроение графиков  элементарных функций

ÄРеализация имитации движения графических объектов

ÄСПРАВОЧНЫЕ ТАБЛИЦЫ

ÄСправочные  материалы о языке Pascal

ÄТВОРЧЕСТВО УЧАЩИХСЯ

ÄЗадания для самостоятельного выполнения

ÄПостроение функций второго порядка

ÄЭТО ИНТЕРЕСНО

ÄЛИТЕРАТУРА

 

ÄКАРТА

Реализация имитации построения движения графических объектов

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

нарисовать — пауза — стереть рисунок (нарисовать его в том же месте цветом фона)— изменить координаты изображения.

Перед началом составления программы надо продумать описание «движущегося» объекта; характер изменения координат, определяющих текущее положение объекта; диапазон  изменения   и  шаг.

Задача 1.    Организовать имитацию движения   авто­мобиля   по экрану  компьютера.

Uses crt,Graph;
Var u,gm,gd: integer;
BEGIN
gd:= detect;
initgraph(gd,gm,'');
if graphresult<>0 then halt (1);
setviewport(1,1,600,450,true);
setbkcolor(lightgray);
setcolor( brown);
line(1,401,700,401); {нарисуем дорогу}
u:= 1;
while u<=600 do begin setcolor(darkgray);
rectangle(40 + u,315,90+u,350); {кабина машины}
setfillstyle(1,darkgray);
bar(5 + u,350,120+u,390); {кузов машины}
setfillstyle(1, yellow); setcolor(yellow);
line(121 + u,360,160 + u,400); {свет от}
line( 160 + u,400,200 + u,400);
line(200 + u,400,121 + u,360); {фар }
floodfill(180 + u,399,yellow);
pieslice(40 + u,385,0,360,15); { }
pieslice(90 + u,385,0,360,15); delay(5000);
setfillstyle(1,lightgray);
bar(5+u,300,210 + u,400); {очистка места расположения машины}
u:=u+3 end; readln; closegraph END.

 Скачать Двужищийся автомобиль

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

Для хранения фрагмента удобнее всего использовать динамическую область памяти. Получить размер памяти в байтах, необходимой для сохранения образа фрагмента, позволяет функция ImageSize(X1,Yl,X2,Y2:integer): word. Здесь (X1,YI) и (X2,Y2) — координаты верхнего левого и нижнего правого углов прямоугольника. Если полученный размер памяти больше 64Кб, то значение ImageSize = 0, a GraphResult=-1. Чтобы этого избежать, следует сохранять изображение по частям.

Полученный с помощью функции ImageSize размер памяти применяют в качестве входной информации для процедуры GetMem(p,Size), которая выделяет указанный объем памяти в динамической области. Здесь р — указатель на область памяти,  Size — ее размер.

Процедура GetImage(Xl,Yl,X2,Y2:integer; var BitMap: word); сохраняет образ фрагмента в памяти, где XI,Y1,X2,Y2 — координаты фрагмента, BitMap — пере­менная, которая указывает, где сохраняется образ изоб­ражения.

Процедура Putlmage(X,Y: integer; var BitMap, Mo-de:word); восстанавливает сохраненный в буфере Bit-Map прямоугольник, левый верхний угол которого задаётся координатами (X,Y). Параметр Mode задает режим вывода изображения.

Продемонстрируем имитацию движения с использованием выше описанных процедур при решении следующей задачи.

Задача 2. Построить на экране компьютера башню, имитируя  процесс ее построения снизу  вверх.

Uses crt, Graph;
Var P:pointer;{указатель на область}
Size:Word; {размер области}
X1,Y1:Word; {координаты начальной точки}
gd,gm: integer;
Begin gd:=detect;
InitGraph(gd,gm,'');
IF GraphResult<>0 THEN Halt(1);
SetViewPort(0,0,640,80,TRUE);
ClearViewPort;
SetBkColor(black);
SetColor(yellow);
SetLineStyle(0,1,Thickwidth);
Rectangle(120,400,200,440); {рисуем первый кирпич}
Size:=ImageSize(120,400,200,440); {определяем размер области}
GetMem(p,Size); {выделяем память для области}
GetImage(120,400,200,440,P^); {сохраняем область в памяти}
Y1:=440;
WHILE Y1>=40 DO begin X1:= 120;
begin PutImage(X1,Y1,p^,CopyPut); {строим башню}
Delay(59000);
X1:=X1+80
end;
Y1:=Y1-40 end; x1:=x1-160;WHILE X1<=280 DO {строим верх башни}
begin
PutImage(X1,Y1,p^,CopyPut);
{CopyPut = 0 - режим копирования изображений}
X1:=X1 +160
end;
setfillstyle(8,red);
Bar(200,40,280,500); {строим стены башни}
Bar(40,40,120,500);
{Добавляем надпись}
SetColor(11);SETTEXTSTYLE(6,7,6);
outtextxy(350,100,'BASHNYA!');
Readln;
CloseGraph

End.

 Скачать Строим башню

Copyright © 2007 Cредняя школа №2 им. Н.П. Массонова г.Свислочь © Ярута Анжелина, Алла Синица