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