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

Вниз

перемещение обектов   Найти похожие ветки 

 
Lenka ©   (2005-06-07 01:26) [0]

как можно создать в виде класса обект (например человеческая клетка), и обеспечить его перемещение?


 
ORMADA ©   (2005-06-07 07:44) [1]

1.
THumanCell=Class
 XChromosome:string;
 YChromosome:boolean;
 ZSomeThing:integer;
end;
:)
2.
DragDrop юзать


 
Skier ©   (2005-06-07 08:19) [2]

>Lenka ©   (07.06.05 01:26)  
Это перемещение уже сделано природой.


 
Digitman ©   (2005-06-07 08:26) [3]


> как можно создать в виде класса обект


никак.

в программе можно объявить класс и создать экземпляр(ы) этого класса (иначе говоря - "объект(ы) такого-то класса")


 
АлекейК   (2005-06-07 10:32) [4]

А куда перемещать собираемся?


 
REA   (2005-06-07 10:59) [5]

THumanCell=Class
XChromosome:string;
YChromosome:boolean;
ZSomeThing:integer;
Public
Function Clone: THumanCell;
Procedure Mutate;
Procedure Defence(Attack: TVirus);
Procedure Repair;
end;

:)


 
PVOzerski ©   (2005-06-07 11:48) [6]

Вопрос сформулирован совершенно непонятно. Описать через методы и свойства можно много что, хоть клетку, хоть экосистему, хоть Вселенную. А перемещение - это о чем? По экрану некое графическое отображение объекта двигать? Или моделировать движение клетки по моделируемому пространству (совершенно необязательно визуально отображаемое)?


 
TUser ©   (2005-06-07 12:10) [7]

> ORMADA ©   (07.06.05 07:44) [1]

Да вы что - надо делать базовый, а свойства XChromosome и YChromosome вводить в наследниках, в вопросе-то не уточнено, какую именно клетку моделируем :)


 
Ega23 ©   (2005-06-07 12:22) [8]

в вопросе-то не уточнено, какую именно клетку моделируем :)

Давайте Сперматозоида с Яйцеклеткой моделировать?


 
TUser ©   (2005-06-07 12:26) [9]

> Давайте Сперматозоида с Яйцеклеткой моделировать?

А что - вопрос про человеческую клетку, не указано какую именно.

Вот только жаль - нет в Delphi множественного наследования, не всякий процесс удастся смоделировать :)


 
Ega23 ©   (2005-06-07 12:27) [10]

Вот только жаль - нет в Delphi множественного наследования, не всякий процесс удастся смоделировать :)

Фигня, надо будет - через интерфейсы зафигачим!


 
Lenka ©   (2005-06-07 13:59) [11]

да задание-то в принципе очень глупое, создать родительский класс Органела, потом через потомков смоделировать клетку и показать как она перемещается, питается, делится...


 
Digitman ©   (2005-06-07 14:05) [12]


> Lenka ©   (07.06.05 13:59) [11]


> задание-то в принципе очень глупое


задание-то м.б. и "глупое", но вот решение ее в учебных целях оч даже не глупое, напротив - весьма эффективное и показательное, ибо задействует многие базовые принципы ООП, во многом облегчающие и делающие изящным решение такого рода задач


 
Lenka ©   (2005-06-07 14:13) [13]


> Digitman

хихихи! но не в данное время, когда надо еще синтаксический анализатор за два дня написать!


 
-=XP=- ©   (2005-06-07 14:21) [14]

надо еще синтаксический анализатор за два дня написать

А что, задание только сегодня выдали? Что-то мне не верится.
Вы что, предлагаете Вам тут написать код под Ваше задание?
Вы даже не определили, что значит "перемещение" в контексте Вашего задания, хоть Вас об этом и справшивали.
Есть конкретные вопросы - спрашивайте.


 
Ega23 ©   (2005-06-07 14:21) [15]

но не в данное время, когда надо еще синтаксический анализатор за два дня написать!

Рецепт-то прост: в течении семестра надо заниматься, а не балду гонять.


 
Digitman ©   (2005-06-07 14:25) [16]


> Lenka ©   (07.06.05 14:13) [13]


попрыгунья-стрекоза ?)


 
Digitman ©   (2005-06-07 14:29) [17]


> надо еще синтаксический анализатор за два дня написать


боюсь, банан в кондуит тебе светит со страшной силой)

imho, ООП со своими классами, объектами и прочими "глупостями" - это еще "цветочки" по сравнению с "синтаксическим анализатором" ..


 
TUser ©   (2005-06-07 14:47) [18]

От анализируемого языка зависит. Для очень простого языка (а в учебном задании он имеет права быть очень простым) анализатор писАть - два часа работы. А вот клетку смоделировать - это задача для реальных перцев.


 
Lenka ©   (2005-06-07 16:14) [19]


> -=XP=-

нет, код не нужен :) анализатор почти готов :)
а "перемещение" - чтоб по экрану ползала :)


> Ega23

хех) в течении семестра?.. остальное уже готово!


> Digitman

та ну, прорвемся! немного осталось :)


> TUser

это кому как.....делфи было дано на самостоятельное изучение недели две назад, и сразу такие проэкты. о каком учебном задании может идти речь?..а анализатор для восстановления таблицы истинности для 2-8 переменных для алебры Буля. с этим проблем уже нет :)


 
Digitman ©   (2005-06-07 16:23) [20]


> Lenka ©   (07.06.05 16:14) [19]


> немного осталось


судя по "фундаментальности" твоего вопроса - да, немного : начать и кончить)

так в чем, собссно, проблема ?


 
jack128 ©   (2005-06-07 16:36) [21]

Lenka ©   (07.06.05 16:14) [19]
а анализатор для восстановления таблицы истинности для 2-8 переменных для алебры Буля


А.. Приснопамятный калькулятор "Серолицего", только для логических выражений... Это и за один день можно наваять..

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Button1.Left := Button1.Left + 1;
 Button1.Top := Button1.Top + 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1.Caption := "Клетка";
 Button1.Top := 10;
 Button1.Left := 10;
 Timer1.Interval := 200;
end;


:-))


 
Lenka ©   (2005-06-07 16:47) [22]


> Digitman

проблема в том, каким способом можно задать в классе графический объект. то есть если его рисовать на Canvas с помощью стандартных процедур, то проблем нет. но в том-то и дело, что задать это все необходимо, используя классы


 
disider   (2005-06-07 17:00) [23]

Удалено модератором


 
Просто Джо ©   (2005-06-07 17:03) [24]


>  [22] Lenka ©   (07.06.05 16:47)
> то есть если его рисовать на Canvas с помощью стандартных
> процедур, то проблем нет. но в том-то и дело, что задать
> это все необходимо, используя классы

ну, так и сделай в этом классе метод Draw, который и будет рисовать объект "на канвасе". Например:



TCell = class
public
 procedure Draw (ACanvas: TCanvas);
end;

implementation

procedure TCell.Draw (ACanvas: TCanvas);
begin
 ACanvas.Ellipse (...);
 // etc
end;


 
Digitman ©   (2005-06-07 17:05) [25]


> то есть если его рисовать на Canvas с помощью стандартных
> процедур, то проблем нет


ну и рисуй на канве !
зачем изобретать велосипед, если есть готовые инструменты ?


> в том-то и дело, что задать это все необходимо, используя
> классы


в разделе interface опиши класс

THumanCell=Class(TControl)
....
public
 procedure Draw;
end;

в разделе implrmentation реализуй его методы

procedure THumanCell.Draw; //отрисовка "клетки"
begin
.. здесь на какой-либо канве отрисовываешь свою клетку ..
end;


 
-=XP=- ©   (2005-06-07 17:50) [26]

Button1.Left := Button1.Left + 1;
Button1.Top := Button1.Top + 1;


Посмею предложить свой вариант ;)

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 Randomize;
 for i := 0 to 20 do
   CreateCellButton(Random(10) + 100, Random(10) + 100);
 Timer1.Interval := 200;
end;

procedure TForm1.CreateCellButton(X, Y: integer);
begin
with TButton.Create(Self) do
begin
  Parent := Self;
  SetBounds(X, Y, 2, 2);
  OnClick := OnButtonClick;
end;
end;

procedure TForm1.OnButtonClick(Sender: TObject);
var
 Btn: TButton;
begin
 if Sender is TButton then
 begin
   Btn := TButton(Sender);
   CreateCellButton(Btn.Left, Btn.Top);
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
 Btn: TButton;
 L: integer;
 T: integer;

const
 SexAge = 18;
 DeathAge = 70;
 StepsPerYear = 10;
 ClimaxAge = 50;

const
 Step: integer = 0;

 function PartnerPresent(Btn: TButton): boolean;
 var
   i: integer;
   C: TControl;
 begin
   Result := false;
   for i := 0 to ControlCount - 1 do
   begin
     C := Controls[i];
     Result := (C <> Btn) and (C is TButton) and
        (C.Left = Btn.Left) and (C.Top = Btn.Top) and
        (C.Width >= SexAge);
     if Result then Exit;
   end;
 end;

begin
 for i := ControlCount - 1 downto 0 do
   if (Controls[i] is TButton) then
   begin
     Btn := TButton(Controls[i]);
     L := Btn.Left + Random(7) - 3;
     T := Btn.Top + Random(7) - 3;
     if L < 0 then L := 0;
     if L + Btn.Width > Width then
       L := Width - Btn.Width;
     if T < 0 then T := 0;
     if T + Btn.Height > Height then
       T := Height - Btn.Height;
     if Step mod StepsPerYear = 1 then
       Btn.SetBounds(L, T, Btn.Width + 1, Btn.Height + 1)
     else
       Btn.SetBounds(L, T, Btn.Width, Btn.Height);
     if (Btn.Width >= SexAge) and (Btn.Width < ClimaxAge) and PartnerPresent(Btn) then
       CreateCellButton(Btn.Left, Btn.Top);
     if (Btn.Width  + Random(20) > DeathAge) then
       Btn.Free;
   end;
 integer((@Step)^) := Step + 1;
end;


 
TUser ©   (2005-06-07 18:30) [27]

Проблема начинает проясняться. Я бы делал все эти классы наследниками от TGraphicControl. Ну а дальше - зависит от конкретной детализации задачи - что там должно двигаться как.


 
-=XP=- ©   (2005-06-07 18:35) [28]

Я бы делал все эти классы наследниками от TGraphicControl

И еще им "мир" нужен - от TWorld = class(TCustomControl) ;)


 
Lenka ©   (2005-06-08 19:00) [29]

всем огромнейшее спасибо, мне ваши советы действительно очень помогли! остался вопрос, каким образом можно сохранить изображение на канве в jpeg-файл?


 
MacroDenS ©   (2005-06-08 19:13) [30]

to Ega23 ©   (07.06.05 14:21) [15]
Рецепт-то прост: в течении семестра надо заниматься, а не балду гонять.


Так вот он по хлду и занимался етим вопросом весь семестр (в плане тепепатических догадок сперматозойд-яйцеклетка), а теперь вот модель нужно забацать... Еще погоди, месяцев церез 3-9 придется целую человеческую систему моделировать, учитывая при этом такие параметры, как: размер степендии, место жительство, одежка, еда и т.д и т.п.


 
MacroDenS ©   (2005-06-08 19:15) [31]

Сори не посмотрел на ник, тогда таже фраза но с обращением к девушке (плз без обид)


 
Lenka ©   (2005-06-09 00:18) [32]


> MacroDenS

хм......


 
ЮЮ ©   (2005-06-09 06:00) [33]

>каким образом можно сохранить изображение на канве в jpeg-файл?

Нарисовать всё тоже самое на TBitmap.Canvas
TJPEGImage.Assign(TBitmap)
TJPEGImage.SaveToFile


 
TUser ©   (2005-06-09 10:54) [34]

> каким образом можно сохранить изображение на канве в jpeg-файл?

> Нарисовать всё тоже самое на TBitmap.Canvas

Можно в этот битмап скопировать - BitMap.Canvas.CopyRect, только перед этим битмапу Height и Width выставить.


 
ORMADA ©   (2005-06-09 12:36) [35]

2 -=XP=- реально прикольна получилось :)


 
Antol   (2005-06-11 16:19) [36]

ORMADA
а можна увидеть, то прикольное, что у тебя получилось?



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

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

Наверх




Память: 0.56 MB
Время: 0.07 c
1-1119368947
aha
2005-06-21 19:49
2005.07.11
для хранения разных параметров программы пользуюсь компонентом


14-1118157101
D-S@nt
2005-06-07 19:11
2005.07.11
как раскрыть скобки?


5-1089734822
boband
2004-07-13 20:07
2005.07.11
Формула прозрачности


1-1119417521
kyn66
2005-06-22 09:18
2005.07.11
Параметр в строку SQL


14-1118227771
DmitMal
2005-06-08 14:49
2005.07.11
Delhi 6 и Delphi 2005