Движение стикмана - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите с этим заданием.

Решение задачи: «Движение стикмана»

textual
Листинг программы
uses Graph,WinCrt;
var  i,j,size,x,y: Integer;
     p1,p2:pointer;  { тип указатель }
begin
initgraph(x,y,'');
size:=imagesize(0,0,40,100);  { размер области }
{ первый образ }
circle(20,20,15);{голова}
line(20,35,20,70);{тело}
line(20,35,0,60);{руки}
line(20,35,40,60);
Line(20,70,0,100);{ноги}
Line(20,70,40,100);
{ второй образ }
circle(80,20,15);{голова}
line(80,35,80,100);{тело}
getmem(p1,size);   {p1 - указатель адреса для хранения первого образа }
getimage(0,0,40,100,p1^);{p1^ - содержимое (двоичный код) образа }
getmem(p2,size);     { p2 - указатель адреса для хранения второго образа }
getimage(60,0,100,100,p2^);{p2^ - содержимое (двоичный код) образа }
cleardevice;{очищаем экран}
x:=0;  y:=getmaxY div 2;  { координаты начальной точки }
Line(0,y,getmaxX,y);  { "дорога" }
y:=y-100;
repeat  { имитация движения чередованием образов со смещением }
putimage(x,y,p1^,1);
delay(200);
putimage(x,y,P1^,1);
x:=x+10;    { смещаем позицию вправо }
putimage(x,y,p2^,1);
delay(200);
putimage(x,y,p2^,1);
x:=x+10 {еще раз}
until x>getmaxX-40;  { достижение края }
freemem(p1,size); {освобождаем память}
freemem(p2,size);
circle(x+15,y+20,15);{рисуем второй образ}
line(x+15,y+35,x+15,y+100);
readkey
end.

Объяснение кода листинга программы

  1. Объявлены переменные i, j, size, x, y, p1, p2 типа Integer и Boolean.
  2. Вызвана функция initgraph для инициализации графического режима с указанием ширины и высоты окна, а также имени файла, который не используется.
  3. Задан размер области в переменную size с помощью функции imagesize.
  4. Нарисован первый образ, состоящий из головы (круг), тела (линия) и рук (две линии).
  5. Выделена память под первый образ с помощью функции getmem и получено изображение этого образа с помощью функции getimage.
  6. Нарисован второй образ, состоящий из головы (круг) и тела (линия).
  7. Выделена память под второй образ с помощью функции getmem и получено изображение этого образа с помощью функции getimage.
  8. Очищено окно с помощью функции cleardevice.
  9. Заданы начальные координаты x и y для линии и первого образа.
  10. Нарисована линия с помощью функции line.
  11. Позиция y уменьшена на 100 для создания эффекта движения.
  12. Начинается цикл, в котором чередуются первый и второй образы с задержкой в 200 миллисекунд между ними.
  13. При каждой итерации цикла позиция x увеличивается на 10.
  14. Когда позиция x достигает значения getmaxX-40, условие цикла меняется, и начинается рисование второго образа.
  15. После окончания цикла освобождается память, выделенная под первый и второй образы, с помощью функции freemem.
  16. Нарисован второй образ с помощью функций circle и line.
  17. Вызвана функция readkey для обработки нажатий клавиш.
  18. Конец программы.

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы