![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте! У меня возникла проблема с реализацией одной программы "молекулами". Постоянно выдает ошибку связанную с памятью,а исправить не как не могу.
программа должна работать так:нажимаем на пуск и начинают двигаться 30 шейпов с рандомной скоростью,при соприкосновении друг с другом и стенок "сосуда" отталкиваться на v_x:=-V_x,v_у:=-V_у.Компоненты создавать я не хотел,а только присвоить к массиву шейпы. В программе shape:array[1..3] of TShape-массив шейпов a,V,V_x,V_y-скорость перемещения по горизонтали и вертикали x,y-новые координаты. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Shape3: TShape; Timer1: TTimer; Button1: TButton; Button2: TButton; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; shape:array[1..3] of TShape; var n:real; a,V,V_x,V_y,l:integer; x,y:real; FindShape: TComponent; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin for i:=1 to 3 do begin shape[i].Top:=round(y); shape[i].Left:=round(x); end; for i:=1 to 3 do begin FindShape:=FindComponent('Shape'+inttostr(i)); if shape[i].Left<(FindShape as TShape).Left then v_x:=-V_x; if shape[i].top<(FindShape as TShape).top then v_y:=-V_y; x:=(FindShape as TShape).Left+V_x; y:=(FindShape as TShape).top+V_y; end; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin timer1.Enabled:=true; for i:=1 to 3 do begin shape[i].Visible:=true; randomize; v:=random(5)+1; a:=random(360); V_x:=round(v*cos(a)); v_y:=round(v*sin(a)); shape[i].Top:=350+V_y; shape[i].Left:=350+V_x; x:=shape[i].Left+V_x; y:=shape[i].Top+V_y; end; end; end. ![]() Понять свою ошибку тоже не могу, объясните кто может? И если не трудно подскажите поподробнее как сделать? |
#2
|
||||
|
||||
![]() эм... чесно, я хз, но на первый взгляд надо бы для КАЖДОГО шейпа свои скорости (если я правильно понял задачу). так что думай...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
||||
|
||||
![]() Долго и вдумчиво искал Create хотя-бы для одно элемента Shape - не удалось, видимо вы это очень надежно скрыли от нас и Дельфи.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |