Движение стикмана - 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.
Объяснение кода листинга программы
- Объявлены переменные i, j, size, x, y, p1, p2 типа Integer и Boolean.
- Вызвана функция initgraph для инициализации графического режима с указанием ширины и высоты окна, а также имени файла, который не используется.
- Задан размер области в переменную size с помощью функции imagesize.
- Нарисован первый образ, состоящий из головы (круг), тела (линия) и рук (две линии).
- Выделена память под первый образ с помощью функции getmem и получено изображение этого образа с помощью функции getimage.
- Нарисован второй образ, состоящий из головы (круг) и тела (линия).
- Выделена память под второй образ с помощью функции getmem и получено изображение этого образа с помощью функции getimage.
- Очищено окно с помощью функции cleardevice.
- Заданы начальные координаты x и y для линии и первого образа.
- Нарисована линия с помощью функции line.
- Позиция y уменьшена на 100 для создания эффекта движения.
- Начинается цикл, в котором чередуются первый и второй образы с задержкой в 200 миллисекунд между ними.
- При каждой итерации цикла позиция x увеличивается на 10.
- Когда позиция x достигает значения getmaxX-40, условие цикла меняется, и начинается рисование второго образа.
- После окончания цикла освобождается память, выделенная под первый и второй образы, с помощью функции freemem.
- Нарисован второй образ с помощью функций circle и line.
- Вызвана функция readkey для обработки нажатий клавиш.
- Конец программы.