Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Если я захочу сделать ещё один дом 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]

слово "неуклюжий" пишется слитно...бросается в глаза ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо