Снова я( я всем наверно надоел(со своими темами)
Есть код проги которая гоняет точку и окружность по экрану случайным образом...до нажатия какой-либо клавиши...не могли вы бы мне помочь ее как то усложнить? К примеру.. Можно изменить цвет окружности и точку(точку вобще хотелось поменять на другую фигуру на пример квадрат который крутится) Менять радиус окружности вообщем размеры фигур(любые действия над фигурами) или поворачивать фигуры против часовой стрелки и наоборот---- и это все может менять пользователь при помощи нажатия какой либо клавиши или меню Программа сделана на принципе модульного программирования!
Создадим модуль графических объектов 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.
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.
! | dron4ik, почему тема про Турбо Паскаль в разделе Другие Языки?? Ты забыл, на какой форум зашел?? В следующий раз буду штрафовать за такое издевательство.. Тема перенесена |
typeКроме всего прочего это позволит минимизировать количество вносимых изменений при добавлении объектов в иерархию наследования. Так что, прежде чем усложнять, надо сделать правильно, а то потом эту "усложненную" версию придется переписывать с нуля, чтоб она заработала.
TFigure = object
{ ... }
end;
TPoint = object(TFigure)
{ ... }
end;
TCircle = object(TFigure)
{ ... }
end;
{ Ну, и остальное, что тебе может понадобиться }
Извините а куда перенесена тема?( В какой раздел?(
Добавлено через 4 мин.
А что мне теерь делать? Как ее изменить?(я профан по ООП)
Я иммею ввиду задачу.
Добавлено через 4 мин.
От какой фигуры они могут наследоваться(квадрат, окружность, и точка) По сути мне можно сделать тему курсовой любую можно взять, кроме программ написанных по принципу процедурного программирования(
У меня есть другая программа написанная на СИ++ . Она находит кратчайший путь между двумя любымми вершинамми графа.т.е пользователь вводит количество вершин потом вводит вес ребер(их длину между раз-ными вершинами)потом пользователь вводит две вершины между которыми он должен найти кратчайшиий путь... потом прога выводит длинну кратчайшего пути. Может она прапвильно выполнена с использованием ООП?т.е. абстрактной фигурой является граф.. на графе вершины(точки) и ребра т.е. точки и ребра являются подвидами графа.
У меня есть другая программа написанная на СИ++ . Она находит кратчайший путь между двумя любымми вершинамми графа.т.е пользователь вводит количество вершин потом вводит вес ребер(их длину между раз-ными вершинами)потом пользователь вводит две вершины между которыми он должен найти кратчайшиий путь... потом прога выводит длинну кратчайшего пути. Может она прапвильно выполнена с использованием ООП?т.е. абстрактной фигурой является граф.. на графе вершины(точки) и ребра т.е. точки и ребра являются подвидами графа.
Извините( Мне просто не с кем посоветоваться(
Добавлено через 3 мин.
Является ли вершины и ребра подклассами или подвидами графа?
Т.е есть программа написанная по такому принципу не является Обьектно Ориентированной?
Программа написанная по КАКОМУ принципу? Где
Мне вообщем нужно чтобы прога была написана по ООП. Главное чтобы она не была написана процедурным программированием. Прога готова могу выложить код.