Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Если я захочу сделать ещё один дом 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1094819915
vigo
2004-09-10 16:38
2004.09.26
Формат времени DateTimePicker


1-1094803567
DesWind
2004-09-10 12:06
2004.09.26
Изменение состояня окна


3-1093958231
Manfred8
2004-08-31 17:17
2004.09.26
Проблемы с клиентом приложений


1-1094894316
zero-g
2004-09-11 13:18
2004.09.26
Как поймать курсор в RichEdit


1-1095032724
][ncognito
2004-09-13 03:45
2004.09.26
ТриВью опять





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