Анимация:кошка гонится за мышкой - PascalABC.NET

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

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

Сделал рисунок, но не знаю, как сделать к нему анимацию. Мышка и кошка просто должны двигаться вправо и уходить за кадр. Пожалуйста, помогите) Вот сам рисунок:

Решение задачи: «Анимация:кошка гонится за мышкой»

textual
Листинг программы
uses
  GraphABC;
 
var
  x, y: integer;
 
begin
  setwindowsize(800, 700);
  
  lockdrawing;
  x := 0;
  while x < 700 do 
  begin
    ClearWindow;
    SetBrushColor(clorange); 
    ellipse(x + 100, 500, x + 350, 600); //туловище кота
    ellipse(x + 300, 560, x + 370, 480); //голова кота
    //ноги
    ellipse(x + 120+round(5*sin(x/3)), 550, x + 140+round(5*sin(x/3)), 650); 
    ellipse(x + 280+round(5*sin(x/3)), 550, x + 300+round(5*sin(x/3)), 650); 
    ellipse(x + 140+round(5*sin(x/6)), 550, x + 160+round(5*sin(x/6)), 650); 
    ellipse(x + 300+round(5*sin(x/6)), 550, x + 320+round(5*sin(x/6)), 650); 
    //лапы
    ellipse(x + 305+round(5*sin(x/6)), 635, x + 335+round(5*sin(x/6)), 655); 
    ellipse(x + 285+round(5*sin(x/3)), 635, x + 315+round(5*sin(x/3)), 655); 
    ellipse(x + 145+round(5*sin(x/6)), 635, x + 175+round(5*sin(x/6)), 655); 
    ellipse(x + 125+round(5*sin(x/3)), 635, x + 155+round(5*sin(x/3)), 655); 
    //уши кота
    line(x + 310, 490, x + 325, 460); 
    line(x + 325, 460, x + 335, 480);
    line(x + 335, 480, x + 345, 460);
    line(x + 345, 460, x + 355, 488);
    //глаза кота
    SetBrushColor(clgreen); 
    ellipse(x + 320, 510, x + 330, 500);
    ellipse(x + 345, 510, x + 355, 500);
    line(x + 340, 535, x + 350, 525);
    line(x + 340, 535, x + 330, 525);
      //усы
    line(x + 335, 537, x + 303, 537+round(3*sin(x/3)));
    line(x + 335, 540, x + 313, 540+round(3*sin(x/3)));
    line(x + 335, 543, x + 323, 543+round(3*sin(x/3)));
    line(x + 350, 537, x + 383, 537+round(3*sin(x/3)));
    line(x + 350, 540, x + 373, 540+round(3*sin(x/3)));
    line(x + 350, 543, x + 363, 543+round(3*sin(x/3)));
                    //хвост кота
    line(x + 120, 543, x + 30, 573+round(15*sin(x/3)));
    line(x + 120, 543, x + 30, 583+round(15*sin(x/3)));
    line(x + 30, 573+round(15*sin(x/3)), x + 30, 583+round(15*sin(x/3)));
    SetBrushColor(clgray); 
    ellipse(x + 400, 590, x + 500, 640); //туловище мышки
    ellipse(x + 490, 590, x + 530, 620); //голова мышки
                    //ноги мышки
    ellipse(x + 420+round(5*sin(x/3)), 620, x + 430+round(5*sin(x/3)), 650);
    ellipse(x + 470+round(5*sin(x/3)), 620, x + 480+round(5*sin(x/3)), 650);
    ellipse(x + 432+round(5*sin(x/6)), 620, x + 442+round(5*sin(x/6)), 650);
    ellipse(x + 482+round(5*sin(x/6)), 620, x + 492+round(5*sin(x/6)), 650);
                      //лапы мышки
    ellipse(x + 422+round(5*sin(x/3)), 643, x + 435+round(5*sin(x/3)), 653);
    ellipse(x + 472+round(5*sin(x/3)), 643, x + 485+round(5*sin(x/3)), 653);
    ellipse(x + 434+round(5*sin(x/6)), 643, x + 448+round(5*sin(x/6)), 653);
    ellipse(x + 484+round(5*sin(x/6)), 643, x + 498+round(5*sin(x/6)), 653);
                    //ушко мышки
    ellipse(x + 495, 580, x + 510, 600);
    setbrushcolor(clblack);
    ellipse(x + 510, 597, x + 520, 605); //глаз мышки
    line(x + 400, 610, x + 360, 650-round(10*sin(x/3)));
    line(x + 520, 610, x + 510, 630);
    line(x + 520, 610, x + 525, 630);
    line(x + 520, 610, x + 518, 630);
    
    redraw;
    x += 3;
  end;
  
end.

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

  1. Объединение кода и ресурсов в одном файле может быть нежелательным, поскольку это усложняет поддержку и отладку программы.
  2. Название переменной x совпадает с именем координаты в графическом режиме. Это может вызвать конфликт и затруднить понимание кода.
  3. Переменная y не используется в коде.
  4. Ограничение размера окна до 700 пикселей может быть нежелательным, если в будущем потребуется изменить размер окна.
  5. Использование фиксированных значений для параметров функций sin и cos может привести к нежелательным результатам, если входные данные выходят за пределы ожидаемого диапазона.
  6. В строках с координатами для функций ellipse и line используется формат x + y, вместо более читаемого point(x, y).
  7. Функции ellipse и line используются для рисования как кота, так и мыши, что может быть неэффективным. Разделение этих функций на отдельные классы или процедуры для каждого объекта может улучшить структуру кода.
  8. Использование глобальной переменной x для отслеживания времени может быть неэффективным и привести к ошибкам. Вместо этого можно использовать функцию GetTime, которая возвращает текущее время в миллисекундах.
  9. Использование случайных чисел с функцией sin для определения позиции конечностей может привести к непредсказуемому поведению, если начальная позиция или скорость объекта не были определены.
  10. Использование функции round для округления координат может быть нежелательным, если точность не требуется. Вместо этого можно использовать функцию Trunc, которая округляет число в меньшую сторону.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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