Нарисовать движущийся квадрат - Turbo Pascal
Формулировка задачи:
Написать программу с применением динамических переменных движения квадрата параллельно оси Y,а зачем параллельно оси Х.С изменением направления движения изменять цвет закраски фигуры.
Если можно то с описанием.
Решение задачи: «Нарисовать движущийся квадрат»
textual
Листинг программы
uses crt,graph;
var x,y,c:integer;
size:word;
p:pointer;
begin
initgraph(x,y,'');
c:=1; //цвет 1=синий
repeat
x:=getmaxX div 2;//по вертикали
y:=15;
size:=ImageSize(x-15,y-15,x+15,y+15);//выделяем участок под квадрат
setcolor(c);//цвет линий
setfillstyle(1,c);//цвет заливки
bar(x-15,y-15,x+15,y+15); //закрашенный квадрат
getmem(p,size);//выделим память под рисунок
getimage(x-15,y-15,x+15,y+15,p^);//сохраним рисунок в буфер
cleardevice; //очистим экран
setcolor(14);//выведем сообщение желтым цветом
settextstyle(0,0,2);
outtextXY(10,10,'Exit any key');
while not keypressed and(y<getmaxY-30) do //пока не нажата клавиша и не низ экрана
begin
putimage(x,y,p^,1); //читайте HELP
delay(10);
putimage(x,y,p^,1);
y:=y+5;
end;
c:=c+1;//увеличим номер цвета
if c=16 then c:=1;//черный на синий
if c=8 then c:=9; //темно-серый на голубой
x:=15; //то же слева на право
y:=getmaxY div 2;
size:=ImageSize(x-15,y-15,x+15,y+15);{Єў*¤а*в 30е30}
setcolor(c);
setfillstyle(1,c);
bar(x-15,y-15,x+15,y+15);
getmem(p,size);
getimage(x-15,y-15,x+15,y+15,p^);
cleardevice;
setcolor(14);
settextstyle(0,0,2);
outtextXY(10,10,'Exit any key');
while not keypressed and(x<getmaxX-30) do
begin
putimage(x,y,p^,1);
delay(10);
putimage(x,y,p^,1);
x:=x+5;
end;
c:=c+1;
if c=16 then c:=1;
if c=8 then c:=9;
until keypressed;//нажатие любой клавиши=конец
freemem(p,size); //освободим память
end.
Объяснение кода листинга программы
- Используется библиотека crt и графический модуль graph.
- Задаются переменные x, y, c, size, p.
- Вызывается функция initgraph, передавая в нее координаты x, y и пустую строку. Это позволяет задать начальные параметры для работы с графикой.
- Переменная c инициализируется значением 1, что соответствует синему цвету.
- В цикле while выполняются следующие действия:
- x вычисляется как половина максимального значения по вертикали.
- y устанавливается равным 15.
- size вычисляется как размер участка под квадрат.
- Устанавливается цвет линий и заливки.
- Выводится закрашенный квадрат.
- Выделяется память под рисунок.
- Сохраняется рисунок в буфер.
- Экран очищается.
- Выводится сообщение желтым цветом.
- Устанавливается стиль текста.
- Выводится сообщение
Exit any keyдо тех пор, пока не будет нажата клавиша или пока не будет достигнут нижний край экрана. - Переменная c увеличивается на единицу. Если достигнуто максимальное значение цвета (16), то значение переменной c сбрасывается обратно на 1.
- Если значение переменной c равно 8, то значение переменной c сбрасывается на 9, что соответствует темно-серому цвету на голубом.
- Значение переменной x сбрасывается на 15.
- Значение переменной y вычисляется как половина максимального значения по вертикали.
- Цикл while повторяется до тех пор, пока не будет нажата клавиша или пока не будет достигнут верхний край экрана.
- Освобождается память, выделенная под рисунок.