Составить графический алгоритм по коду:
unit unit1;
interface
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs, extctrls;
type
tform1 = class(tform)
timer1: ttimer;
image1: timage;
procedure timer1timer(sender: tobject);
procedure formcreate(sender: tobject);
private
{ private declarations }
public
{ public declarations }
cnt, oblakopos: integer;
raina: array [0..9] of integer; // массив дляд ождя
procedure drawsky(canvas: tcanvas; width, height, x, y: integer);
procedure drawrain(canvas: tcanvas; width, height, w, h, x, y: integer);
end;
var
form1: tform1;
implementation
{$r *.dfm}
procedure tform1.drawsky(canvas: tcanvas; width, height, x, y: integer);
begin
// рисуем небо
canvas.brush.color : = rgb( 0, 224, 255); //clblue;
canvas.rectangle(0, 0, width, height*3 div 5);
//рисуем землю
canvas.brush.color : = clgreen;
canvas.rectangle(0, height*3 div 5, width, height);
//рисуемо блако
canvas.pen.color : = clwhite;
canvas.brush.color : = clwhite;
canvas.ellipse(x , y-15, x+50, y+15);
canvas.ellipse(x-25, y-35, x+25, y+ 5);
canvas.ellipse(x-50, y-25, x, y+ 5);
end;
procedure tform1.drawrain(canvas: tcanvas; width, height, w, h, x, y: integer);
var
i: integer;
begin
for i : = low(raina) to high(raina) do begin
if raina[i] > 0 then begin // если больше 0 то рисуем каплю дождя
// в массиве содержится текущая высота капли. она смещается на x и y
canvas.moveto(x + i*w, y + h - raina[i]);
canvas.lineto(x + i*w, y + h - raina[i] + 20);
raina[i] : = raina[i] - 5;
end else begin // если 0, то случайным образом присваиваем высоту
if random(1000) < 100 then
raina[i] : = h;
end;
end;
end;
procedure tform1.timer1timer(sender: tobject);
begin
if (cnt < 300) or (cnt > 600) then
oblakopos : = oblakopos + 1;
drawsky(image1.canvas, image1.width , image1.height, oblakopos, 100);
if (cnt > 300) and (cnt < 600) then
drawrain(image1.canvas, image1.width , image1.height, 10, 200, oblakopos-50, 100);
cnt : = cnt + 1;
if cnt > 950 then //timer1.enabled : = false;
begin
cnt : = 0;
oblakopos : = cnt; // либо повтор цикла
end;
end;
procedure tform1.formcreate(sender: tobject);
begin
randomize;
cnt : = 0;
oblakopos : = cnt;
timer1.interval : = 20;
image1.width : = 660;
image1.height : = 500;
image1.picture.bitmap.width : = 640;
image1.picture.bitmap.height : = 480;
clientwidth : = 660;
clientheight : = 500;
fillchar(raina, sizeof(integer)*(high(raina)-low(raina)+1), 0);
form1.doublebuffered : = true;
end;
end.
133
287
Ответы на вопрос:
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Nikita924419.08.2022 01:34
-
layonel91117.04.2021 03:03
-
tat32114.10.2021 21:20
-
eldaryuldashev04.04.2021 16:59
-
Ybivashka1107.03.2022 10:04
-
skyblue107.12.2021 05:44
-
laralarisa30.11.2021 03:16
-
Арина253126.04.2020 16:28
-
Asandyana16.12.2022 00:55
-
Lakensssss05.09.2022 21:05
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.