IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Турбо Паскаль и его объектно ориентированные средства, Объектно-ориентированные приложения
dron4ik
сообщение 9.05.2009 22:47
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Снова я( я всем наверно надоел(со своими темами)

Есть код проги которая гоняет точку и окружность по экрану случайным образом...до нажатия какой-либо клавиши...не могли вы бы мне помочь ее как то усложнить? К примеру.. Можно изменить цвет окружности и точку(точку вобще хотелось поменять на другую фигуру на пример квадрат который крутится) Менять радиус окружности вообщем размеры фигур(любые действия над фигурами) или поворачивать фигуры против часовой стрелки и наоборот---- и это все может менять пользователь при помощи нажатия какой либо клавиши или меню Программа сделана на принципе модульного программирования!

Создадим модуль графических объектов GraphObj.
 Unit GraphObj; {Модуль графических объектов}
INTERFACE {Интерфейсная часть}
Type
PLocation = ^TLocation;
TLocation = object
X,Y: Word; {Координаты позиции на экране}
Constructor Init(InitX, InitY: Word);
{Инициализация объекта}
Function GetX: Word; {Возвращает координату Х}
Function GetY: Word; {Возвращает координату Y}
Procedure GetCoords(Var CoordX, CoordY: Word);
{Возвращает обе координаты}
Destructor Done; virtual; {Уничтожает объект}
End;
PPoint = ^TPoint;
TPoint = object(TLocation)
Clr: Byte; {Цвет}
Visib: Boolean; {Видимость}
Constructor Init(InitX,InitY:Word; InitColor:Byte);
{Переопределяем метод инициализации-добавляем цвет}
Function GetColor: Byte; {Возвращает цвет}
Procedure Show; virtual;
Procedure Hide; virtual;
Function IsVisib: Boolean;
Procedure ChangeColor(NewColor:Byte);{Меняет цвет}
Procedure MoveTo(NewX, NewY: Word);
{Перемещает в новую позицию}
Destructor Done; virtual;
end;
PCircle = ^TCircle;
TCircle = object(TPoint)
R: Word; {Радиус}
Constructor Init(InitX,InitY,InitR:Word;InitC:Byte);
Procedure Show; virtual;
Procedure Hide; virtual;
Destructor Done; virtual;
end;
IMPLEMENTATION {Раздел реализации}
Uses Graph; {Подключаем графическую библиотеку}
Constructor TLocation.Init;
Begin
X := InitX;
Y := InitY
end;
Function TLocation.GetX: Word;
begin
GetX := X
end;
Function TLocation.GetY: Word;
begin
GetY := Y
end;
Procedure TLocation.GetCoords;
begin
CoordX := GetX;
CoordY := GetY
end;
Destructor TLocation.Done;
begin
end;
Constructor TPoint.Init;
begin
inherited Init(InitX, InitY);
Clr := InitColor;
Visib := False
end;
Function TPoint.GetColor: Byte;
begin
GetColor := Clr
end;
Procedure TPoint.Show;
begin
PutPixel(X, Y, Clr);
Visib := True
end;
Procedure TPoint.Hide;
begin
PutPixel(X, Y, GetBkColor);
Visib := False
end;
Function TPoint.IsVisib: Boolean;
begin
IsVisib := Visib
end;
Procedure TPoint.ChangeColor;
begin
Clr := NewColor;
If IsVisib then Show
end;
Procedure TPoint.MoveTo;
Var St: Boolean;
begin
St := IsVisib;
Hide;
X := NewX;
Y := NewY;
If St then Show
end;
Destructor TPoint.Done;
begin
Hide;
Clr := GetBkColor
end;
Constructor TCircle.Init;
begin
inherited Init(InitX, InitY, InitC);
R := InitR
end;
Procedure TCircle.Show;
begin
SetColor(Clr);
Circle(X, Y, R);
Visib := True
end;
Procedure TCircle.Hide;
begin
SetColor(GetBkColor);
Circle(X, Y, R);
Visib := False
end;
Destructor TCircle.Done;
begin
inherited Done;
R := 0
end;
{Пустая секция инициализации}
END.



Основной код проги к которому привязан графический модуль:

В приложении будут созданы экземпляры объектов TPoint и TCircle, причем экземпляр объекта TPoint мы разместим в области динамической памяти.
Program AppExample;
Uses Graph, CRT, GraphObj;
Type
TApplication = object
Procedure Init;
Procedure Run;
Procedure Done;
end;
Var
Application: TApplication;
p: PPoint;
c: TCircle;

Procedure TApplication.Init;
Var
D, R, MaxX, MaxY: Integer;
Begin
{Инициализация графического режима}
D := Detect;
InitGraph(D, R, 'C:\B\BGI');
SetBkColor(White);
ClearDevice;
{Создаем точку и окружность}
MaxX := GetMaxX;
MaxY := GetMaxY;
Randomize;
New(p,Init(Random(MaxX), Random(MaxY),Red));
p^.Show;
c.Init(Random(MaxX-40)+20,Random(MaxY-40)+20,20,Blue);
c.Show
End;
Procedure TApplication.Run;
Var
MaxX, MaxY: Integer;
Begin
MaxX := GetMaxX;
MaxY := GetMaxY;
Repeat
p^.MoveTo(Random(MaxX),Random(MaxY));
c.MoveTo(Random(MaxX-40)+20,Random(MaxY-40)+20);
Delay(4000)
Until KeyPressed
End;
Procedure TApplication.Done;
Begin
Dispose(p,Done);
c.Done;
CloseGraph
End;
BEGIN
Application.Init;
Application.Run;
Application.Done
END.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.05.2009 8:44
Сообщение #2


Гость






Цитата
Программа сделана на принципе модульного программирования!
Программа неправильно написана с использованием ООП, это все, что я могу тебе сказать. Окружность не является подвидом Точки, чтоб от нее наследоваться. А если тебе понадобится теперь ввести в иерархию еще и Квадрат, от чего ты его будешь наследовать, от Окружности что-ли? Скорее, и Точка и Окружность, и Квадрат являются подвидами какой-то абстрактной Фигуры, что могло бы быть описано так:

type
TFigure = object
{ ... }
end;

TPoint = object(TFigure)
{ ... }
end;
TCircle = object(TFigure)
{ ... }
end;
{ Ну, и остальное, что тебе может понадобиться }
Кроме всего прочего это позволит минимизировать количество вносимых изменений при добавлении объектов в иерархию наследования. Так что, прежде чем усложнять, надо сделать правильно, а то потом эту "усложненную" версию придется переписывать с нуля, чтоб она заработала.
 К началу страницы 
+ Ответить 

Сообщений в этой теме
dron4ik   Турбо Паскаль и его объектно ориентированные средства   9.05.2009 22:47
Lapp   [b]dron4ik, почему тема про Турбо Паскаль в раздел...   10.05.2009 6:31
volvo   Программа неправильно написана с использованием ОО...   10.05.2009 8:44
dron4ik   Извините а куда перенесена тема?( В какой раздел?(...   10.05.2009 8:47
Lapp   Извините а куда перенесена тема?( В какой раздел?(...   10.05.2009 8:52
dron4ik   Я иммею ввиду задачу. Добавлено через 4 мин. От...   10.05.2009 8:53
Lapp   От какой фигуры они могут наследоваться(квадрат, о...   10.05.2009 9:39
dron4ik   У меня есть другая программа написанная на СИ++ . ...   10.05.2009 9:36
dron4ik   У меня есть другая программа написанная на СИ++ . ...   10.05.2009 9:42
Lapp   У меня есть другая программа написанная на СИ++Ну ...   10.05.2009 9:59
dron4ik   Извините( Мне просто не с кем посоветоваться( Доб...   10.05.2009 10:05
volvo   Вершины и ребра - отдельные классы, не являющиеся ...   10.05.2009 10:25
dron4ik   Т.е есть программа написанная по такому принципу н...   10.05.2009 10:30
volvo   Программа написанная по КАКОМУ принципу? Где ? Объ...   10.05.2009 10:49
dron4ik   Мне вообщем нужно чтобы прога была написана по ООП...   10.05.2009 10:52


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 19:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"