![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
demon9999 |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Уважаемые господа!
Проблема такая - мне было задано за семестр изучить объектно ориентированное программирование и с его помощью написать какой-нибудь графический редактор. Что такое ООП я, в принципе, изучил (спасибо литературе на этом сайте и на borlpasc.narod.ru) и написал программу, демонстрирующую его особенности (текст прилагается). Но с редактором у меня возникли ряд вопросов, которыя я не могу решить самостоятельно. 1. Для рисования чего бы то ни было мне нужно получать координаты х,у с положения курсора. Теоретически я понимаю что это делается функцией GetX, GetY, но практически так и не въехал, как ее применять. Разъясните, пожалуйста, поподробнее. Если можно, то на примере приложенной программы. 2. Сохранение и откат. Опять таки, теоретически я предполагаю, что сохранение ведется в список (видимо односвязанный), но как? 3. Может быть кто-нибудь что то похожее делал? Если остались исходники каких-нибудь модулей (интерфейс, рисование фигур и вообще все что подходит по теме) скиньте, пожалуйста, мне на почтовый ящик. Только сложностей не надо - я еще не волшебник, я только учусь ![]() Вообще редактор, по моему разумению должен получиться простой, без мыши, на hot key's. Типа "ручки-ножки-огуречик". Заранее благодарен. Код Program OPP1; Uses Crt, Graph; Var gd,gm:integer; Ch: Char; S: Boolean; Const Instr = 'УПРАВЛЕНИЕ ДВИЖЕНИЕМ - СТРЕЛКИ, ПЕРЕХОД - END, ВЫХОД - ESC'; Type Tp=Object {объект - точка} X,y,c : integer; Constructor Init(ax,ay:integer;ac:word); Procedure Show; Virtual; Procedure Hide; Virtual; Procedure Moveto(dx: integer); End; Constructor Tp.Init; Begin X:=ax; y:=ay; c:=ac; End; Procedure Tp.Show; Begin Putpixel(x,y,c); End; Procedure Tp.Hide; Begin Putpixel(x,y,Getbkcolor) End; Procedure Tp.Moveto; Begin repeat s:=true; Ch := ReadKey; Case Ch of #27: begin CloseGraph; Halt end; { выход по клавише ESC } #75: begin Hide; X := X-dx end; {изменение координат x, y нажатием стрелок} #77: begin Hide; X := X+dx end; {"влево", "вправо", "вверх", "вниз" } #72: begin Hide; Y := Y-dx end; #80: begin Hide; Y := Y+dx end; #79: S := false; {переход кнопкой END} end; Show; until s = false; Hide; End; Type Tc=Object(Tp) {объект - круг (наследник)} r : integer; Constructor Init(ax,ay,ar:integer;ac:word); Procedure Show; Virtual; Procedure Hide; Virtual; End; Constructor Tc.Init; Begin Inherited Init(ax,ay,ac); {наследование инициализации} R:=ar End; Procedure Tc.Show; {рисование круга} Begin Setcolor( c ); Circle(x,y,r); SetFillStyle(solidfill, red); FloodFill(x,y, red); End; Procedure Tc.Hide; Begin Setcolor(GetBkColor); Circle(x,y,r); SetFillStyle(solidfill, GetBkColor); FloodFill(x,y, GetBkColor); End; Var T: Tp; C: Tc; Begin gd:=detect; initgraph(gd,gm,'c:tpbgi'); SetBkColor(White); SetColor(blue); Rectangle(50, 425, 600, 460); {рисование рамки} OutTextXY(90, 440, Instr); T.Init(125,125,Magenta); {инициализация 1 объекта} T.Show; {прорисовка объекта} T.MoveTo(15); {движение объекта} C.Init(125,125,15,red); {инициализация объекта 2} C.Show; {прорисовка объекта 2} While True do begin C.Moveto(15); {движение объекта 2 } end; end. -------------------- Все у нас получится!
|
![]() ![]() |
___ALex___ |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 282 Репутация: ![]() ![]() ![]() |
сначала надо выбрать путь решения потом кодить
так какой путь ты выбрал? |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 11:13 |