Главная страница
    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.47 MB
Время: 0.049 c
3-1093847410
Artem123
2004-08-30 10:30
2004.09.26
Работа с TBookmark ?


8-1088949996
ilop
2004-07-04 18:06
2004.09.26
Помогите разобраться с DirectX.


4-1092800776
FastByte
2004-08-18 07:46
2004.09.26
Имя пользователя


1-1094634100
Sashkosoft
2004-09-08 13:01
2004.09.26
Создать файл наподобии архивного


6-1085386955
r9000
2004-05-24 12:22
2004.09.26
Определение ip-адреса компьютера с которого приходят сообщения.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский