Рисунок оставляет за собой черный след - PascalABC.NET
Формулировка задачи:
Привет всем, как сделать, чтобы рисунок перемещался но не оставлял за собой черный след?
Слышал про такую команду как ClearWindow, но если ее поставить в код то все становится черным и мерцает.
Вот сам код.
Решение задачи: «Рисунок оставляет за собой черный след»
textual
Листинг программы
uses graphABC; procedure OutBug(x, y : Integer); begin setBrushColor(clblack); setpenwidth(2); var u : array of Point; SetLength(u, 5); u[0] := New Point(130+x, 170+y); u[1] := New Point(115+x, 170+y); u[2] := New Point(121+x, 160+y); u[3] := New Point(123+x, 170+y); u[4] := New Point(115+x, 170+y); DrawPolygon(u); FillPolygon(u); u[0] := New Point(130+x, 180+y); u[1] := New Point(115+x, 180+y); u[2] := New Point(121+x, 190+y); u[3] := New Point(123+x, 180+y); u[4] := New Point(115+x, 180+y); DrawPolygon(u); FillPolygon(u); setpenwidth(0); ellipse(300+x, 215+y, 130+x, 135+y); //голова 170 setBrushColor(clwhite); ellipse(320+x, 240+y, 160+x, 110+y); //тело line(160+x, 175+y, 319+x, 175+y); setBrushColor(clblack); ellipse(200+x, 145+y, 170+x, 165+y);//1-ая половина ellipse(235+x, 115+y, 205+x, 135+y); ellipse(250+x, 155+y, 220+x, 175+y); ellipse(280+x, 125+y, 250+x, 145+y); ellipse(317+x, 148+y, 287+x, 168+y); ellipse(210+x, 180+y, 180+x, 200+y);//2-ая половина ellipse(210+x, 180+y, 180+x, 200+y); SetPenColor(clwhite); setBrushColor(clBeige); ellipse(205+x, 210+y, 175+x, 230+y); // рисуем полную точку каким-нибудь малозаметным цветом SetPenColor(clblack); DrawEllipse(320+x, 240+y, 160+x, 110+y); // перерисовываем тело,чтобы прочертить линию по точке FloodFill(190+x, 228+y, clwhite); // и закрашиваем все,что снаружи от линии - белым FloodFill(190+x, 220+y, clBlack); // а все,что внутри - черным setBrushColor(clblack); ellipse(300+x, 180+y, 270+x, 200+y); ellipse(250+x, 210+y, 220+x, 230+y); SetPenColor(clwhite); setBrushColor(clBeige); ellipse(300+x, 210+y, 270+x, 230+y); SetPenColor(clblack); DrawEllipse(320+x, 240+y, 160+x, 110+y); // перерисовываем тело,чтобы прочертить линию по точке FloodFill(294+x, 224+y, clwhite); // и закрашиваем все,что снаружи от линии - белым FloodFill(280+x, 220+y, clBlack); // а все,что внутри - черным end; begin Randomize; var x := 0; var y := 0; LockDrawing; while True do begin Window.Clear; x += Random(-2, +2); y += Random(-2, +2); OutBug(x, y); Redraw; end; end.
Объяснение кода листинга программы
В данном коде используется язык программирования PascalABC.Net. Процедура OutBug(x, y:) используется для отрисовки следа от точки.
- Задаются координаты начальной точки следа (x, y) и вычисляются координаты следующих точек следа.
- Задается цвет и ширина линии для рисования следа.
- Создается массив u типа array of Point, и в него записываются координаты пяти последовательных точек следа.
- Рисуется многоугольник из этих пяти точек с помощью процедуры DrawPolygon(u).
- Заполняется пространство между точками следа с помощью процедуры FillPolygon(u).
- Координаты следующей группы точек следа вычисляются так, чтобы они были смещены относительно предыдущих точек.
- Рисуется вторая половина следа, которая является отражением первой половины относительно вертикальной оси.
- Рисуется тело следа с помощью процедуры DrawEllipse(320+x, 240+y, 160+x, 110+y).
- Закрашивается пространство внутри следа белым цветом с помощью процедуры FloodFill(190+x, 228+y, clwhite).
- Закрашивается пространство вне следа черным цветом с помощью процедуры FloodFill(190+x, 220+y, clBlack).
- Рисуется голова следа с помощью процедуры DrawEllipse(300+x, 180+y, 270+x, 200+y).
- Рисуется хвост следа с помощью процедуры DrawEllipse(250+x, 210+y, 220+x, 230+y).
- Перерисовывается тело следа с помощью процедуры DrawEllipse(320+x, 240+y, 160+x, 110+y).
- Закрашивается пространство внутри следа белым цветом с помощью процедуры FloodFill(294+x, 224+y, clwhite).
- Закрашивается пространство вне следа черным цветом с помощью процедуры FloodFill(280+x, 220+y, clBlack). В основной части программы используется цикл while True, который непрерывно запускает процедуру OutBug(x, y) с новыми случайными координатами (x, y) и обновляет окно с помощью Redraw.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д