USES Graph, CRT ; { используются Graph и CRT } {$I Initgraph.pas } { процедура инициализации } CONST r = 10; { радиус подвижного шарика } VAR X1,Y1,X2,Y2,sx,sy : Integer ; { переменные для ожив-} maxx,maxy,sxmove,symove:Integer;{ ления фрагмента } Size : Word; { размер фрагмента } P : Pointer; { указатель на буфер } BEGIN GrInit; { инициализация графики} maxx := GetMaxX; { максимальное поле экрана} maxy := GetMaxY; X1 := maxx div 2 - r; { Координаты области экрана,} Y1 := maxy div 2 - r; { в который будет нарисован } X2 := X1 + 2 * r; { шарик и которая и будет } Y2 := Y1 + 2 * r; { сохраненным фрагментом } sx := X1; sxmove :=3; { Начальная точка движения } sy := Y1; symove := -1; { и шаг перемещения шарика } SetFillStyle( SolidFill, Red); { выбор типа заливки } PieSlice( X1+r,Y1+r,0,360,r); { рисование шарика } Size := ImageSize(X1,Y1,X2,Y2); { фрагмент в байтах } GetMem( P, Size ); { размещение буфера } GetImage( X1,Y1,X2,Y2,P^ ); { фрагмент-> в буфер } SetFillStyle(CloseDotFill,Blue);{ тип заливки фона } Bar( 50,50, maxx-50,maxy-50); { фоновая картинка } repeat { Начинается движение шарика} PutImage( sx,sy,P^,XORPut ); { вывод шарика } Delay( 12 ); { пауза для АТ/12МГц } PutImage( sx,sy, P^ ,XORPut );{ стирание шарика } { ограничения на движение шарика в пределах поля фона: } if ( sx< 50)or( sx>maxx-50-2*r) then sxmove := -sxmove; if ( sy< 50)or( sy>maxy-50-2*r) then symove := -symove; Inc( sx, sxmove ); { Следующая точка появления } Inc( sy, symove ); { шарика на экране } until KeyPressed; { ...пока не нажата клавиша } FreeMem( P, Size ); { освобождение памяти буфера } CloseGraph { закрытие режима графики } END. |