Главная страница
    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.034 c
14-1094475774
GRAND25
2004-09-06 17:02
2004.09.26
Реализация БД-приложений


14-1094237837
Soft
2004-09-03 22:57
2004.09.26
Microsoft запантетовала человеческое тело.


6-1090414883
DukeDEE
2004-07-21 17:01
2004.09.26
Инетграция в Internet Explorer


1-1095142853
Miralex
2004-09-14 10:20
2004.09.26
Потоки.


14-1094465614
matt
2004-09-06 14:13
2004.09.26
USB разъемы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский