![]() |
![]() |
Shpion |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Вот, попросили сделать задачу на Паскале..
Я взялся, даже не посмотрев... Оказалось, там требуется знание графических приемов программирования в Паскале... А я тогда вообще ничего не шарил... Ладно, большинство задач сделал, осталась одна - последняя: Нарисовать на Паскале град, падающий и отскакивающий от объекта. Так как я за такие вещи раньше никогда не брался, то с непревычки оказалось трудно... Дальше последует код, а пока 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. Вообщем, помогите, кто чем может - исходниками, советами.... Выручайте... ![]() ЗЫ: Может, удобней будет посмотреть мою ошибку - выложил этот исходник... Сообщение отредактировано: Shpion - 22.05.2006 1:15 Прикрепленные файлы ![]() |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 5:45 |