Я взялся, даже не посмотрев... Оказалось, там требуется знание графических приемов программирования в Паскале... А я тогда вообще ничего не шарил... Ладно, большинство задач сделал, осталась одна - последняя:
Нарисовать на Паскале град, падающий и отскакивающий от объекта.
Так как я за такие вещи раньше никогда не брался, то с непревычки оказалось трудно... Дальше последует код, а пока 2 вопроса:
1)Как сделать так, чтобы при достижении градинок определенной границы, эти градинки продолжали движение, и создавались новые(т.е как бы создавался непрерывный поток)
2) Как "уловить" кривую" линию объекта(крыши дома, например)
Вот код(c пояснениями) моей так называемой программы. Это далеко не законченный вариант, ибо у меня уже опускаются руки(может, ночь просто?):
Код
program rain;
uses graph,crt;
type grad = object
{создается тип "град"}
x,y:integer;
radius:word;
dx,dy:shortint;
constructor initgrad(x0,y0:integer; radius0: word; dx0,dy0: shortint);
{Конструктор - создатель града }
procedure show;
procedure hide;
procedure move;
procedure checkborder;
end;
var gd,gm,i,x,Radius,dx,y,dy:integer;
grads:array[1..50] of grad;
{Массив градин}
procedure creategrad(k,x,y:integer);
{ k - если=0, то создается "кучка" градин, если k<>0(=i), то создается одна градина с
текущими кординатами }
begin
if k=0 then
for i:=1 to 10 do
begin
Radius:=3;
dy:=1;
y:=random(100);
grads[i].initgrad(random(Getmaxx),y,radius,0,dy);
end else
grads[k].initgrad(random(getmaxx),y,radius,0,dy);
end;
procedure grad.move;
begin
x:=x+dx;
y:=y+dy;
end;
procedure grad.show;
begin
SetFillStyle(1,8);
FillEllipse(x,y,radius,radius);
end;
procedure grad.hide;
begin
setcolor(black);
FillEllipse(x,y,radius,radius);
end;
procedure grad.checkborder;
{Это я на CheckBorder'е и запарился!!!!!!}
begin
if y=250 then creategrad(i,x,random(10));
end;
constructor grad.initgrad(x0,y0:integer; radius0: word; dx0,dy0: shortint);
begin
x:=x0;
y:=y0;
Radius:=Radius0;
dx:=dx0;
dy:=dy0;
end;
begin
initgraph(gd,gm,'');
if graphresult<> grOk then begin
writeln('No graphics');
readln;
halt;
end;
creategrad(0,x,y);
repeat
cleardevice;
for i:=1 to 10 do
begin
randomize;
grads[i].show;
end;
delay(500);
for i:=1 to 10 do
grads[i].hide;
for i:=1 to 10 do
begin
grads[i].move;
grads[i].checkborder;
end;
until keypressed;
readln;
closegraph;
end.
Вообщем, помогите, кто чем может - исходниками, советами.... Выручайте...
ЗЫ: Может, удобней будет посмотреть мою ошибку - выложил этот исходник...