Форум: "Основная";
Текущий архив: 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