Анимация в PascalABC.NET
1.76M
Категория: ПрограммированиеПрограммирование

лобароторная_№5b_Анимация_в_Паскале_ABC (1)

1. Анимация в PascalABC.NET

Лабораторная
работа№ 5
АНИМАЦИЯ В PASCALABC.NET
Дисциплина:
«Основы алгоритмизации и программирования.»
Преподаватель: Шадрин Валерий Георгиевич

2.

Порядок выполнения лабораторной работы.
1. Открыть рабочею папку Ваших работ на рабочем столе :
2. Скачать из папки преподавателя работу:
«лабораторная работа №5b»
с методическим материалом, с заданием и примерами для
выполнения лабораторной работы.
Sol_Pascal
группа
Фамилия
3. Изучить методический материал и задание для
выполнения Практической работы и Лабораторной
работы
4. Выполнить вначале практическое задание, а затем задание
для лабораторной работы
Сохранить все результаты в созданной Вами папке :
5. Выполнить программы:
1. Звездное небо,
2. Движение автомобиля,
3. Движение окружности
4. Движение прямоугольника.
5. Задание по варианту лабораторной работы.
Sol_Pascal
группа
Фамилия
2

3.

Алгоритм анимации
Для эффекта передвижения на экране в программе паскаль, необходимо
рисовать
графический объект после паузы стирать его и рисовать с новыми
координатами.
Общая структура программы для анимации:
for i:=1 to n do
begin
1. нарисовать объект,
2. подождать какое-то время с помощью команды sleep(время
паузы);
3. очистить экран
4. изменить координаты объекта согласно направлению
движения и его скорости
end;
5. рисуем конечное положение объекта
3

4.

Программа «Звездное небо»
uses graphABC;
var x,y,i:integer;
begin
randomize;
clearwindow(clBlack);
for i:=1 to 500 do
begin
x:=1+random(windowwidth-1);
y:=1+random(windowheight-1);
setpencolor(clWhite);
setbrushcolor(clWhite);
circle(x,y,3);
sleep(10);
end;
end.
4

5.

Program Zvez_Nebo1;
Program nebo1;
uses Graphabc;
Var x,y,z,k:integer;
begin putpixel(100,200,ClRed);
// рисуется созвездие большая медведица
putpixel(150,130,ClRed);
putpixel(230,130,ClRed);
putpixel(270,120,ClRed);
putpixel(360,80,ClRed);
putpixel(370,190,ClRed);
putpixel(320,200,ClRed);
Randomize;
For k:=1 to 400 do Begin // рисуем разноцветные случайные
точки
x:=random(640);
y:=random(480);
z:=random(15);
putpixel(x,y,ClRed);
end;
end.
Программа
«Звездное
небо и Большая
медведица»
5

6.

Program ZvezdnoeN2;
uses Graphabc;
Var x,y,z,k:integer;
begin // рисуется созвездие большая медведица —
7 красных звезд
setbrushcolor(clRed);Randomize;
circle(100,200,10);
circle (150,130,10);
circle(230,130,10);
circle(270,120,10);
circle(360,80,10);
circle(370,190,10);
circle(320,200,10);
sleep(10);
For k:=1 to 400 do Begin
x:=random(640);
y:=random(480);
z:=random(15);
circle(x,y,2);
sleep(10);
end;
Программа «Звездное
небо и Большая
медведица».
Звезды, входящие в
созвездие можно
сделать
крупнее, заменить
процедуру putpixel на
circle!
6

7.

Структура программы на паскаль для
движения сложного объекта:
Для перемещения более сложного объекта необходимо
создать
процедуру рисования объекта, в которую будут передаваться
координаты объекта:
for i:=1 to n do
begin
1. вызвать процедуру рисования объекта с координатами x и y
2. подождать какое-то время с помощью команды sleep
3. очистить экран
4. изменить координаты объекта согласно направлению движения
и его скорости
x=x+vx;
y=y+vy;
end;
5. вызвать процедуру рисования объекта с координатами x и y
7

8.

Программа для передвижения автомобиля по экрану
Процедура, которая рисует
изображение автомобиля по
координатам:
procedure car (x, y : integer);
begin
rectangle (x,y,x+100,y+40);
floodfill (x+1, y+1, clRed);
circle (x+20,y+40,15);
floodfill (x+20, y+40, clGray);
circle (x+60,y+40, 15);
floodfill (x+60, y+40, clGray);
rectangle (x+20, y-30, x+70, y);
floodfill(x+22,y-2, clRed);
end;
8

9.

В теле программы создаются начальные координаты и
скорость
x :=100;
y :=200;
v :=2;
В цикле for выполняем алгоритм анимации
for i:=1 To 50 do
begin
SetPenColor(clBlack);
car(x,y);
sleep(10);
clearwindow();
x := x+v;
end;
После цикла for отрисовываем конечное положение
автомобиля.
car(x,y);
9

10.

Полный текст программы для передвижения автомобиля по
экрану
Program Mash;
uses GraphABC;
var i,x,y, v : integer;
procedure car (x, y : integer);
begin
rectangle (x,y,x+100,y+40);
floodfill (x+1, y+1, clRed);
circle (x+20,y+40,15);
floodfill (x+20, y+40, clGray);
circle (x+60,y+40, 15);
floodfill (x+60, y+40, clGray);
rectangle (x+20, y-30, x+70, y);
floodfill(x+22,y-2, clRed);
end;
begin
setWindowSize(500, 500);
clearwindow(clBlack);
x :=100;
y :=200;
v :=2;
for i:=1 To 50 do begin
SetPenColor(clBlack);
car(x,y);
sleep(10);
clearwindow();
x := x+v;end;
car(x,y);
end.
10

11.

Практическая работа
Задание 1: Выполнить
анимацию движения квадрата
по следующей траектории:
Задание 2: Создать проезжающий
грузовик
11

12.

Пример программы для создания анимации по заданной траектории
program MovingVCircle;
begin
uses GraphABC;
SetWindowSize(800,600); //устанавливаем
размер окна
const
// Начальная позиция
//Рисуем круг изначально
startX=100;
x:=StartX;
startY=100;
y:=StartY;
v=1;
SetPenColor(clBlack);
var
Circle(x,y,20);
x,y,i,j,k:integer;
Движение окружности
по заданной траектории
//ожидаем нажатие клавиши перед началом
движения
Writeln ('Нажмите ENTER для начала
движения');
ReadLn ();
12

13.

// перемещение в право
for i:=startX to StartX+500 do begin
ClearWindow();
x:=i+v;
SetPenColor(clBlack);
Circle(x,y,20);
Line(StartX,StartY,StartX+300,StartY);
Движение окружности
по заданной траектории
Sleep(10); //Пауза для плавности анимации
end;
//Перемещение вниз
for j:=StartY to StartY+200 do begin
ClearWindow();
y:=j;
Circle(x,y,20);
Sleep(10);
end;
13

14.

//Перемещение в лево
Движение окружности
по заданной траектории
for k:=x downto startX do begin
ClearWindow();
x:=k;
Circle(x,y,20);
Sleep(10);
end;
//Возращение в исходное положение
вертикально
for i:=y downto StartY do begin
ClearWindow();
y:=i;
Circle(x,y,20);
Sleep(10);
end;
// Движение по диагонали
for i:=startX to StartX+200 do begin
ClearWindow();
y:=i;
x:=i;
Circle(x,y,20);
Sleep(10);
end;
end.
14

15.

Движение квадрата по заданной траектории
Program MovingSquare4;
//Начальная позиция квадрата
uses GraphABC;
x:=0;
const
y:=Height div 2;
//Размеры окна графики
repeat
Width=500;
Height=500;
var x,y:integer;
begin
SetWindowSize(Width,Height);
//Устанавливаем размер окна
ClearWindow(); //очищаем экран перед каждым
обновлением кадра
SetbrushColor(clGreen);
Rectangle(x,y,x+20,y+20); //рисуем
маленький заполненный квадрат
// размером 20*20 пикселей
15

16.

if x<=Width div 2 then begin
inc(x); //движение вправо вверх по
диагонали
Dec(y);
end else begin
Inc(x); //движимся дальше справа-вниз
по диагонали
Движение квадрата по заданной
траектории.
Inc(y);
end;
Sleep(10); //задерживаем выполнение
программы на 10 миллисекунд для плавности
движения
until (x>=Width-50 ) or ( y>=Height-50);
//продолжаем пока квадрат не достигнет края
экрана
Readln()
End.
16

17.

Задание для лабораторной
работы.
Создать код для траектории
движения объекта.
17

18.

Задание для
лабораторной
работы.
Создать код для
траектории движения
объекта.
18

19.

Задание для лабораторной
работы.
Создать код для траектории
движения объекта.
19

20.

20
English     Русский Правила