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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.036 c
14-1118242101
ДимаСпб
2005-06-08 18:48
2005.07.11
Восстановление файлов


8-1110382443
CJ Astral
2005-03-09 18:34
2005.07.11
Delphi и потоковое аудио


1-1118902502
Магнум
2005-06-16 10:15
2005.07.11
TListView and "Array index out of bounds"


14-1118042509
Кирилл
2005-06-06 11:21
2005.07.11
Скачать звуки


3-1117522893
galexis
2005-05-31 11:01
2005.07.11
Ошибка "Разрушительный сбой"





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