Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Если я захочу сделать ещё один дом Dom2:TObj то как поступить? По   Найти похожие ветки 

 
Jus   (2004-09-08 22:23) [0]

Моя первая не уклюжая попытка в ООП:
Человек 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.


помогите хтонибудь!


 
wl   (2004-09-08 22:30) [1]

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


 
wl   (2004-09-08 22:33) [2]

сделай массив классов Dom[1..сколько нужно] и в процедурах перемещений ищи столкновения со всеми домами из массива


 
Jus   (2004-09-08 22:35) [3]


> сделай массив классов Dom[1..сколько нужно] и в процедурах
> перемещений ищи столкновения со всеми домами из массива


Это идея!
А как мне записать массив классов?


 
wl   (2004-09-08 22:43) [4]

может

var
doms: array[1..100] of TObj;
?
я сишник, паскаль плохо помню


 
Jus   (2004-09-09 18:02) [5]

СПАСИБО
ТАК И ПОПРОБУЕМ СДЕЛАТЬ...


 
Erik1   (2004-09-09 18:11) [6]

А может лучше масив Record сделать, а класса и одного достаточно.
Type
MyPoint = record
 wt:integer; //width
 ht:integer; //height
 lt:integer; //left
 tp:integer; //top
end;

Var
doms: array[1..100] of MyPoint;



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
1-1094813834
Antonmm
2004-09-10 14:57
2004.09.26
Свой курсор


14-1094307399
ArMellon
2004-09-04 18:16
2004.09.26
Как отловить запимь на диск?


6-1089786410
Xacker_x
2004-07-14 10:26
2004.09.26
Api-сокет


1-1094639011
Boris
2004-09-08 14:23
2004.09.26
Управление портами


4-1092583943
фантазер
2004-08-15 19:32
2004.09.26
hBitmap