![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Если я захочу сделать ещё один дом Dom2:TObj то как поступить? По [D6, WinXP]
Jus © (2004-09-08 22:23:00)Моя первая не уклюжаяпопытка в ООП:
Человек Chel:TObj ходит по экрану вверх, вниз, влево и вправо, и при столкновении с домом Dom:TObj он останавливается.
Если я захочу сделать ещё один дом Dom2:TObj то как поступить? Почти всё придётся переписывать ещё раз. процедуры столкновения с каждым домом. Как сделать это проще?
Весь код программы:
Tobj=class
wt:integer; //width
ht:integer; //height
lt:integer; //left
tp:integer; //top
public
constructor create;
destructor destroy;
end;
Procedure xChel_UD; //столкновение с домом RIGHT LEFT
Procedure xChel_LR; //столкновение с домом UP DOWN
Procedure DoGo; //left right up down />go:string<
var
Form1: TForm1;
i:integer=80; //>chel.lt:=i<
i1:integer=301; //>chel.tp:=i1<
dom:TObj; //дом
chel:TObj; //человек
go:string; //KEY>dogo
implementation
{$R *.dfm}
constructor tobj.create;
begin
inherited create;
end;
destructor tobj.destroy;
begin
end;
Procedure xChel_LR;
begin
IF (Chel.tp>Dom.tp) and (Chel.tp<Dom.tp+Dom.ht) Then Begin
IF (Chel.lt>Dom.lt) and (Chel.lt<Dom.lt+Dom.ht) Then begin Form1.Caption:='врезался в дом'; DoGo;
end;
end;
end;
Procedure xChel_UD;
begin
IF (Chel.lt>Dom.lt) and (Chel.lt<Dom.lt+Dom.wt) Then Begin
IF (Chel.tp<Dom.tp+Dom.ht) and (Chel.tp>Dom.tp) Then begin Form1.Caption:='врезался в дом'; DoGo;
end;
end;
end;
Procedure DoGo;
begin
if go='right' then i:=i-1;
if go='left' then i:=i+1;
if go='up' then i1:=i1+1;
if go='down' then i1:=i1-1;
end;
procedure TForm1.FormActivate(Sender: TObject);
//var
begin
DoubleBuffered:=true;
dom:=Tobj.create;
dom.wt:=216;
dom.ht:=65;
dom.lt:=100;
dom.tp:=265;
chel:=TObj.create;
Chel.lt:=80;
chel.tp:=301;
Image2.Left:=chel.lt;
Image2.Top:=chel.tp;
Label2.Caption:='дом'+IntToStr(Dom.tp)+' '+IntToStr(Dom.tp+Dom.ht);
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
IF Key='D' Then begin //идти в право
i:=i+1;
Chel.lt:=i;
go:='right';
xChel_LR;
end;
IF Key='A' Then begin //идти влево
i:=i-1;
Chel.lt:=i;
go:='left';
xChel_LR;
end;
IF Key='W' Then begin //идти вверх
i1:=i1-1;
Chel.tp:=i1;
go:='up';
xChel_UD;
end;
IF Key='S' Then begin //идти вниз
i1:=i1+1;
Chel.tp:=i1;
go:='down';
xChel_UD;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//отображение на экране
Label1.caption:='X:'+IntToStr(I)+' Y:'+IntToStr(I1);
Image2.Left:=Chel.lt;
Image2.Top:=Chel.tp;
end;
end.
помогите хтонибудь!
Erik1 (2004-09-09 18:11:00) [1]А может лучше масив Record сделать, а класса и одного достаточно.
Type
MyPoint = record
wt:integer; //width
ht:integer; //height
lt:integer; //left
tp:integer; //top
end;
Var
doms: array[1..100] of MyPoint;
Jus (2004-09-09 18:02:00) [2]СПАСИБО
ТАК И ПОПРОБУЕМ СДЕЛАТЬ...
wl (2004-09-08 22:43:00) [3]может
?
var
doms: array[1..100] of TObj;
я сишник, паскаль плохо помню
Jus (2004-09-08 22:35:00) [4]
> сделай массив классов Dom[1..сколько нужно] и в процедурах
> перемещений ищи столкновения со всеми домами из массива
Это идея!
А как мне записать массив классов?
wl (2004-09-08 22:33:00) [5]сделай массив классов Dom[1..сколько нужно] и в процедурах перемещений ищи столкновения со всеми домами из массива
wl (2004-09-08 22:30:00) [6]слово "неуклюжий" пишется слитно...бросается в глаза ...