IPB
ЛогинПароль:

> Создать град(отскакивающий от объекта), Графика в Паскале
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Вот, попросили сделать задачу на Паскале..
Я взялся, даже не посмотрев... Оказалось, там требуется знание графических приемов программирования в Паскале... А я тогда вообще ничего не шарил... Ладно, большинство задач сделал, осталась одна - последняя:

Нарисовать на Паскале град, падающий и отскакивающий от объекта.

Так как я за такие вещи раньше никогда не брался, то с непревычки оказалось трудно... Дальше последует код, а пока 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.





Вообщем, помогите, кто чем может - исходниками, советами.... Выручайте... unsure.gif
ЗЫ: Может, удобней будет посмотреть мою ошибку - выложил этот исходник...

Сообщение отредактировано: Shpion -


Прикрепленные файлы
Прикрепленный файл  LAB5_GRA.zip ( 701 байт ) Кол-во скачиваний: 255
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 5:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name