Наряженная новогодняя ёлка на фоне падающего снега - Free Pascal

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

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

Как сделать наряженную ёлку на фоне падающего снега. Объединила две программы, но не то... Подскажите, как исправить, пожалуйста) Вот код:
uses Crt, Graph;
type mas=array[1..500] of Pointtype;
 
const
RStart = 40;
 
var x,y,R,gd,gm,i,j,k,n:integer;
a:mas;
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
 
setcolor(lightgreen);
 
for j := 2 to 6 do begin
y := (getmaxy div 10) * j;
R := RStart + 15*j;
 
for i := 1 to 5 do begin
arc((getmaxx div 2) - R, y, 350-(R div 5)-8*j, 359, R);
arc((getmaxx div 2) + R, y, 181, 190+(R div 5)+8*j, R);
inc(y, 7);
inc(R, 5);
end;
end;
randomize;
gd:=0;
initgraph(gd,gm,'');
for i:=1 to 500 do
begin
a[i].x:=random(getmaxX);
a[i].y:=random(getmaxY);
circle(a[i].x,a[i].y,2);
end;
k:=0;n:=0;
repeat
k:=k+1;
delay(200);
setcolor(0);
for i:=1 to 500 do
circle(a[i].x,a[i].y,2);
for i:=1 to 500 do
begin
if a[i].y>getmaxY-n-10 then a[i].y:=1
else a[i].y:=a[i].y+3;
if a[i].x<0 then a[i].x:=getmaxX
else a[i].x:=a[i].x-1;
end;
setcolor(15);
for i:=1 to 500 do
circle(a[i].x,a[i].y,2);
if k mod 20=0 then
begin
n:=n+1;
line(0,getmaxY-n,getmaxX,getmaxY-n);
end;
until keypressed;
 
Readln;
CloseGraph;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Есть код, падающего снега:
uses crt,graph;
type mas=array[1..500] of Pointtype;
var gd,gm,i,j,k,n:integer;
    a:mas;
begin
randomize;
gd:=0;
initgraph(gd,gm,'');
for i:=1 to 500 do
 begin
  a[i].x:=random(getmaxX);
  a[i].y:=random(getmaxY);
  circle(a[i].x,a[i].y,2);
 end;
k:=0;n:=0;
repeat
k:=k+1;
delay(200);
setcolor(0);
for i:=1 to 500 do
circle(a[i].x,a[i].y,2);
for i:=1 to 500 do
 begin
  if a[i].y>getmaxY-n-10 then a[i].y:=1
  else a[i].y:=a[i].y+3;
  if a[i].x<0 then a[i].x:=getmaxX
  else a[i].x:=a[i].x-1;
 end;
setcolor(15);
for i:=1 to 500 do
circle(a[i].x,a[i].y,2);
if k mod 20=0 then
 begin
  n:=n+1;
  line(0,getmaxY-n,getmaxX,getmaxY-n);
 end;
until keypressed;
readln
end.
Помогите пожалуйста вставить туда нарядную ёлочку)))
Код ёлочки:
uses Crt, Graph;
 
const
  RStart = 40;
 
var
  grDriver: Integer;
  grMode: Integer;
  ErrCode: Integer;
 
  x, y, R: integer;
  i, j: integer;
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode = grOk then
  begin  { Do graphics }
 
    setcolor(lightgreen);
 
    for j := 2 to 6 do begin
      y := (getmaxy div 10) * j;
      R := RStart + 15*j;
 
      for i := 1 to 5 do begin
        arc((getmaxx div 2) - R, y, 350-(R div 5)-8*j, 359, R);
        arc((getmaxx div 2) + R, y, 181, 190+(R div 5)+8*j, R);
        inc(y, 7);
        inc(R, 5);
      end;
    end;
 
    Readln;
    CloseGraph;
  end
  else
    Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
необходимо объединить, и разукрасить саму ёлочку...

Решение задачи: «Наряженная новогодняя ёлка на фоне падающего снега»

textual
Листинг программы
uses wincrt,graph;
const rstart=40;
type mas=array[1..500] of Pointtype;
procedure snezinki(a:mas;c:integer);
var i:integer;
begin
setcolor(c);
for i:=1 to 500 do
circle(a[i].x,a[i].y,2);
end;
procedure elka;
var y,r,i,j:integer;
begin
setcolor(green);
for j:=2 to 6 do
 begin
  y:=(getmaxy div 10)*j+120;
  r:=rstart+15*j;
  for i:=1 to 5 do
   begin
    arc((getmaxx div 2)-r,y,350-(r div 5)-8*j,359,r);
    arc((getmaxx div 2)+r,y,181,190+(r div 5)+8*j,r);
    inc(y,7);
    inc(r,5);
   end;
 end;
end;
procedure sneg(n:integer);
begin
setcolor(white);
setfillstyle(1,white);
bar(0,getmaxY-n,getmaxX,getmaxY);
end;
var gd,gm,i,k,n:integer;
    a:mas;
begin
randomize;
gd:=0;
initgraph(gd,gm,'');
for i:=1 to 500 do
 begin
  a[i].x:=random(getmaxX);
  a[i].y:=random(getmaxY);
 end;
setcolor(blue);
setfillstyle(1,blue);
bar(0,0,getmaxX,getmaxY);{делаем синий фон}
snezinki(a,white);{рисуем снежинки}
k:=0;{количество шагов}
repeat
k:=k+1;
delay(10);
snezinki(a,blue);{рисуем снежинки цветом фона, стираем}
for i:=1 to 500 do
 begin
  if a[i].y>getmaxY-n-10 then a[i].y:=1
  else a[i].y:=a[i].y+3;
  if a[i].x<0 then a[i].x:=getmaxX
  else a[i].x:=a[i].x-1;
 end;
snezinki(a,white);{рисуем снежинки белым}
elka; {рисуем елку}
n:=k div 10;{на каждом 10-м шаге увеличиваем толщину снега на земле}
sneg(n);{рисуем снег на земле}
if n>50 then{если толщина снега 50}
 begin
  snezinki(a,blue);{стираем снежинки}
  setcolor(lightred);{выводим надписи}
  settextstyle(0,0,3);
  outtextXY(250,50,'Snegopad konchilsa');
  setcolor(yellow);
  settextstyle(0,0,2);
  outtextXY(340,80,'Press any key');
 end;
until keypressed or(n>50);{если нажали клавишу или снег>50 конец}
readkey{ждем нажатия клавиши для выхода}
end.

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


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

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

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