Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 52 стр.

UptoLike

103
begin
Init; {Вызов процедуры инициализации графического
режима}
SetBkColor(blue) ; {Установка синего цвета фона}
{Изображение движущегося круга}
for i:=1 to GetMaxX-100 do
begin
{Установка желтого цвета круга}
SetColor(Yellow);
SetFillStyle(1,Yellow);
{Вывод круга на экран}
FillEllipse (i+14, getMaxY div 2,50,50);
{Задержка}
Delay(50) ;
{Установка синего цвета круга}
SetColor (Blue);
SetFillStyle (1,blue);
{Стирание нарисованного круга}
FillEllipse (i+14,getMaxY div 2,50,50);
end;
CloseGraph;
end.
Однако непрерывная перерисовка приводит к мерцанию изображения.
Этого можно избежать, если
использовать третий способ изображения дви-
жущегося объекта.
Пример:
Uses Graph, CRT;
var Max, i:Integer;
p2:Pointer;
{Вставка описания процедуры инициализации}
{$1 D:/pas/init.pas}
begin
{Вызов процедуры инициализации графического
режима}
Init;
{Установка синего цвета фона и желтого цвета
круга}
SetColor(Yellow) ;
SetFillStyle(1,Yellow) ;
SetBkColor(blue) ;
Max: =getMaxY div 2;
{Вывод изображения круга}
FlllEllipse (80,80,50,50);
104
{Резервирование памяти для хранения изобра-
жения}
GetMem(p2, ImageSize(28,28,132,132));
{Запись изображения в оперативную память}
GetImage(28,28,132,132,p2^);
{Очистка экрана}
ClearViewPort;
{Изображение движущегося круга}
for i: =1 то GetMaxX-100 do
begin
{Вывод
изображения в видеопамять}
PutImage(28+i, Max, p2^, CopyPut);
Delay(50) ;
end;
CloseGraph;
end.
ImgeSize(X1,Y1,X2,Y2:Integer):Word- возвращает количество байтов,
необходимых для сохранения прямоугольной области экрана с координатами
X1,Y1,X2,Y2.
GetMem(Var p:Pointer; Size:Word )- выделяет Size байтов в динамиче-
ски распределяемой области памяти и возвращает в переменой р указатель на
выделенную область памяти.
Getlmage(X1,Y1,X2,Y2:lnteger;Var BitMap)- сохраняет изображение,
сформированное в прямоугольной области экрана с координатами
х1,у1,х2,у2, в области памяти, выделенной процедурой GetMem.
Putlmage(X,Y:lnteger;Var BitMap; Bitblt:Word)- преобразует и выводит
на экран изображение, записанное в двоичном коде. В параметрах X и Y ука-
зываются координаты левого верхнего угла прямоугольной области, в
которую будет выведено сохраненное в переменной BitMap изображение.
Параметр BitBIt, принимающий значения в диапазоне от 0 до 4, опре-
деляет способ наложения выводимого изображения на уже имеющееся
изображение. Если задана константа CopyPut=0, то
выводимое изображение
заменяет имеющееся.
Значения параметра BitBIt и соответствующие им логические операции
приведены в таблице.
     begin                                                                                                {Резервирование памяти для хранения изобра-
       Init;               {Вызов процедуры инициализации графического                                    жения}
                           режима}                                                     GetMem(p2, ImageSize(28,28,132,132));
    SetBkColor(blue) ; {Установка синего цвета фона}                                                      {Запись изображения в оперативную память}
                           {Изображение движущегося круга}                             GetImage(28,28,132,132,p2^);
    for i:=1 to GetMaxX-100 do                                                                             {Очистка экрана}
        begin                                                                          ClearViewPort;
                     {Установка желтого цвета круга}                                                       {Изображение движущегося круга}
        SetColor(Yellow);                                                              for i: =1 то GetMaxX-100 do
        SetFillStyle(1,Yellow);                                                            begin
                      {Вывод круга на экран}                                                               {Вывод изображения в видеопамять}
        FillEllipse (i+14, getMaxY div 2,50,50);                                              PutImage(28+i, Max, p2^, CopyPut);
                      {Задержка}                                                              Delay(50) ;
        Delay(50) ;                                                                        end;
                      {Установка синего цвета круга}                                  CloseGraph;
        SetColor (Blue);                                                            end.
        SetFillStyle (1,blue);
                      {Стирание нарисованного круга}                               ImgeSize(X1,Y1,X2,Y2:Integer):Word- возвращает количество байтов,
        FillEllipse (i+14,getMaxY div 2,50,50);                              необходимых для сохранения прямоугольной области экрана с координатами
                    end;                                                     X1,Y1,X2,Y2.
      CloseGraph;
      end.                                                                         GetMem(Var p:Pointer; Size:Word )- выделяет Size байтов в динамиче-
                                                                             ски распределяемой области памяти и возвращает в переменой р указатель на
     Однако непрерывная перерисовка приводит к мерцанию изображения.
                                                                             выделенную область памяти.
Этого можно избежать, если использовать третий способ изображения дви-
                                                                                   Getlmage(X1,Y1,X2,Y2:lnteger;Var BitMap)- сохраняет изображение,
жущегося объекта.
                                                                             сформированное в прямоугольной области экрана с координатами
     Пример:                                                                 х1,у1,х2,у2, в области памяти, выделенной процедурой GetMem.
         Uses Graph, CRT;                                                          Putlmage(X,Y:lnteger;Var BitMap; Bitblt:Word)- преобразует и выводит
         var Max, i:Integer;
                                                                             на экран изображение, записанное в двоичном коде. В параметрах X и Y ука-
                  p2:Pointer;
                                {Вставка описания процедуры инициализации}   зываются координаты левого верхнего угла прямоугольной области, в
                                {$1 D:/pas/init.pas}                         которую будет выведено сохраненное в переменной BitMap изображение.
         begin                                                                     Параметр BitBIt, принимающий значения в диапазоне от 0 до 4, опре-
                            {Вызов процедуры инициализации графического      деляет способ наложения выводимого изображения на уже имеющееся
                            режима}
                                                                             изображение. Если задана константа CopyPut=0, то выводимое изображение
         Init;
                              {Установка синего цвета фона и желтого цвета   заменяет имеющееся.
                              круга}                                               Значения параметра BitBIt и соответствующие им логические операции
           SetColor(Yellow) ;                                                приведены в таблице.
           SetFillStyle(1,Yellow) ;
           SetBkColor(blue) ;
           Max: =getMaxY div 2;
                               {Вывод изображения круга}
           FlllEllipse (80,80,50,50);
                                      103                                                                       104