Луна движется по звездному небу

program LoRD;
uses crt,graph;
var dr,m:integer;             {графический драйвер и режим}
x,y,                          {координаты обьекта во время движения}
dx,dy:integer;                {прирост координат}
ptr:pointer;                  {указатель на область памяти
                               где сохраняется изображение}
size:integer;                 {размер памяти}
leftX, leftY,                 {координаты левого верхнего}
rightX,rightY:integer;        {правого нижнего углов прямоугольника, в
                              который вписано изображение}
i:integer;                    {параметр цикла}
{*************изображение звездного неба******************************}
procedure Sky;
begin
randomize;                    {инициализация генератора случайных чисел}
SetBkColor(i);                {цвет фона}
SetColor(14);                 {цвет звезд}
for i:=1 to 200 do            {изображение звезд}
Circle(random(640),random(480),1);
end;
{*****************изображение луны**************************************}
procedure Moon;
begin
SetColor(14);
Arc(450,100,270,90,50);
Arc(390,100,320,40,80);
SetFillStyle(1,14);
floodFill(480,100,14);
end;
{******************сохранение изображения в динамической памяти**********}
procedure SaveClip;
begin
leftX:=445;                   {координаты прямоугольника}
leftY:=45;                    {в который вписана луна}
rightX:=505;
rightY:=155;
size:=imagesize(leftX, leftY, rightX, rightY);   {выдиление памяти}
getmem(ptr,size);
getimage(leftX,leftY,rightX,rightY,ptr^);    {сохраняем изображение в памяти}
putimage(leftX,leftY,ptr^,xorput);           {спрятать изображение}
end;
{**************************движение луны**********************************}
procedure Move;
begin
x:=leftX; y:=leftY;           {стартовые координаты}
dx:=10; dy:=10;               {прирост координат}
repeat                        {сдвигизображения}
x:=x+dx;                      {смена координат луны}
y:=y+dy;
putimage(X,Y,ptr^,xorput);    {изобразить фигуру в новых координатах}
delay(2000);                  {задержка движения}
putimage(X,Y,ptr^,xorput);    {спрятать фигуру в старых координатах}
if (x>640) or (x<0)           {если фигура приблизилась к краю экрана}
then dx:=-dx                  {сменить ее направление}
else
if(y<0) or (y>480) then dy:=-dy;
until keypressed;
end;
{*********************основная программа***********************************}
BEGIN
dr:=Detect;
InitGraph(dr,m,'');
Sky;
Moon;
SaveClip;
Move;
readkey;
end.
 

Комментариев нет:

Отправить комментарий

Если у вас интересные исходники и вы не прочь поделиться, то присылайте daslex@yandex.ru с указанием Темы: Графика Паскаль
К вашей работе будет прикреплено ваше авторство и по желанию добавлена ссылка на ваш сайт.
На одну страницу - Одна работа. На одну работу - Одна ссылка + указание автора


Основное требование - это один файл .pas без сторонних модулей (только с родными. предпочтение Graph).
Можно использовать ассемблерные вставки.

Все что Запускается у меня и работает, я выкладываю. в этом блоге.
Яндекс.Метрика