Программа пишет, что выполняется, но ничего не выводит - PascalABC.NET
Формулировка задачи:
Нашёл код в интернете, решил полюбоваться. Данная программа должна выводить изображение сердца, но когда я её запускаю, пишет, что программа выполняется, хотя никакого вывода изображения нет. Может, код с двумя подключенными модулями как-то по особенному запускать надо? Подскажите пожалуйста, в чём проблема.
Листинг программы
- uses graphABC,crt;
- var dx,dy,xc,x1,y1:integer;
- begin
- hidecursor;
- setpencolor(clblue);
- setpenwidth(6);
- {1}line(300,300,150,150);
- {2}line(150,150,150,100);
- {3}line(150,100,180,80);
- {4}line(180,80,210,80);
- {5}line(210,80,300,130);
- {6}line(300,130,390,80);
- {7}line(390,80,420,80);
- {8}line(420,80,450,100);
- {9}line(450,100,450,150);
- {0}line(450,150,300,300);
- floodfill(190,130,clred);
- xc:=windowwidth div 2;
- repeat
- dy:=random(xc);
- y1:=dy;
- dx:=random(xc);
- x1:=dx;
- If GetPixel(x1,y1)=clRed then
- SetPixel(x1,y1,clblack);
- sleep(0);
- until keypressed;
- end.
Решение задачи: «Программа пишет, что выполняется, но ничего не выводит»
textual
Листинг программы
- uses graphABC;
- var theEnd : Boolean := False;
- procedure KeyPress(Key : Char);
- begin
- theEnd := True;
- end;
- procedure MouseUp(x,y,mb: integer);
- begin
- theEnd := True;
- end;
- procedure BlackPoint;
- begin
- var dy := random(WindowHeight);
- var dx := random(WindowWidth);
- var c := GetPixel(dx, dy);
- if GetGreen(c) < 128 then
- SetPixel(dx, dy, clblack)
- else
- SetPixel(dx, dy, clblue);
- end;
- begin
- setpencolor(clblue);
- setpenwidth(6);
- {1}line(300, 300, 150, 150);
- {2}line(150, 150, 150, 100);
- {3}line(150, 100, 180, 80);
- {4}line(180, 80, 210, 80);
- {5}line(210, 80, 300, 130);
- {6}line(300, 130, 390, 80);
- {7}line(390, 80, 420, 80);
- {8}line(420, 80, 450, 100);
- {9}line(450, 100, 450, 150);
- {0}line(450, 150, 300, 300);
- floodfill(190, 130, clred);
- OnKeyPress := KeyPress;
- OnMouseUp := MouseUp;
- var dt := System.DateTime.Now;
- repeat
- BlackPoint;
- if (system.datetime.Now-dt).TotalMilliseconds > 100 then
- begin
- dt := System.Datetime.Now;
- Redraw;
- end;
- until theEnd;
- Window.Close;
- end.
Объяснение кода листинга программы
- Объявлена переменная theEnd типа Boolean, которая инициализируется значением False.
- Создана процедура KeyPress, которая принимает в качестве параметра символ Key. В этой процедуре значение переменной theEnd устанавливается в True.
- Создана процедура MouseUp, которая принимает в качестве параметров координаты x, y и mb. В этой процедуре значение переменной theEnd устанавливается в True.
- Создана процедура BlackPoint, которая выбирает случайные координаты на экране и, если значение зелёного канала цвета пикселя меньше 128, закрашивает этот пиксель чёрным цветом, иначе закрашивает синим.
- Начальные координаты для линий и прямоугольника задаются с помощью функций line и floodfill соответственно. Значение переменной theEnd устанавливается в True.
- Задаются функции обратного вызова для обработчиков нажатия клавиш и отпускания кнопки мыши.
- Задаётся начальное время в миллисекундах с помощью функции System.DateTime.Now.
- В цикле repeat, который выполняется до тех пор, пока не будет выполнено условие, указанное в операторе until, вызывается функция BlackPoint. Если прошло больше 100 миллисекунд с момента последнего обновления экрана, то выполняется функция Redraw, которая обновляет экран. Значение переменной theEnd устанавливается в True.
- Закрывается окно программы с помощью функции Window.Close.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д