Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника? - Free Pascal

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

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

Как нарисовать прямоугольник, изменить его координаты и нарисовать заного уже без первого прямоугольника?

Решение задачи: «Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника?»

textual
Листинг программы
program MovingFlag;
 
uses graph, wincrt, math;
 
const Left = chr(97);
      Right = chr(100);
      Stop = ' ';
      
var x1, y1, x2, y2, x3, y3, x4, y4: real;
    rad: real;
    key: char;
    i: integer;
    
procedure initializeGraph;
var gd, gm: integer;
begin
    gd:=detect;
    initGraph(gd, gm, '');
    if graphresult<0 then
    begin
        writeln('Error.');
        halt;
    end;
end;
 
procedure drawFlag(x2:real; y2:real; x3:real; y3:real; x4:real; y4:real);
begin
    moveto(round(x1), round(y1));
    lineto(round(x2), round(y2));
    lineto(round(x3), round(y3));
    lineto(round(x4), round(y4));
end;
 
begin
    initializeGraph;
    setwritemode(XORPut);
    
    x1:=getmaxx div 2;
    y1:=getmaxy div 2;
    x2:=getmaxx div 2;
    y2:=y1 - 200;
    x3:=x2 + 50;
    y3:=y2 + 25;
    x4:=getmaxx div 2;
    y4:=y3 + 25;
    
    drawFlag(x2, y2, x3, y3, x4, y4);
    
    repeat
        if keypressed then
        begin
            key:=readkey;
            case key of
                Left:
                begin
                    inc(i);
                    rad:=((1*PI)/180)*(-1);
                    x2:=x2*(cos(rad))-y2*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y2:=y2*(cos(rad))+x2*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    x3:=x3*(cos(rad))-y3*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y3:=y3*(cos(rad))+x3*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    x4:=x4*(cos(rad))-y4*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y4:=y4*(cos(rad))+x4*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    drawFlag(x2, y2, x3, y3, x4, y4);
                end;
                Right:
                begin
                    inc(i);
                    rad:=(1*PI)/180;
                    x2:=x2*(cos(rad))-y2*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y2:=y2*(cos(rad))+x2*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    x3:=x3*(cos(rad))-y3*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y3:=y3*(cos(rad))+x3*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    x4:=x4*(cos(rad))-y4*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad));
                    y4:=y4*(cos(rad))+x4*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad));
                    drawFlag(x2, y2, x3, y3, x4, y4);
                    delay(100);
                    drawFlag(x2, y2, x3, y3, x4, y4);
                end;
                Stop:
                begin
                    delay(3000);
                    halt;
                end;
            end;
        end;
    until (1=0);
end.

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

Вот что делает программа:

  1. Вводит координаты прямоугольника и записывает их в переменные x1, y1, x2, y2, x3, y3, x4, y4.
  2. Рисует прямоугольник с помощью процедуры drawFlag, передавая ей координаты прямоугольника.
  3. Затем программа ожидает нажатия клавиш Left или Right и в зависимости от нажатой клавиши изменяет координаты прямоугольника и рисует его заново.
  4. Если нажата клавиша Left, то координаты прямоугольника изменяются так, чтобы он переместился влево.
  5. Если нажата клавиша Right, то координаты прямоугольника изменяются так, чтобы он переместился вправо.
  6. Если нажата клавиша Stop, то программа ждет 3 секунды и завершается.

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

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