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

> Правила раздела!

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> ООП и графический редактор
сообщение
Сообщение #21


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


файл EGAVGA.OBJ нужен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Четыре квадратика
****

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

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


Вот что вышло у меня (неделю не было то Интернета, то компьютера sad.gif )
Код

unit Image;
interface uses stack;
 const MaxStack = 100;
 type PImage = ^TImage;

 TImage = object(TStack)
   CurrColor : integer;

   {procedure WriteToFile (var filename : string);}
   procedure ReadFromFile(const filename : string);
   procedure draw;
   procedure DrawLast;
   procedure undo;
   constructor init;
 end;

implementation uses graph;

 constructor TImage.init;
 begin
   inherited init;
   CurrColor := white;
 end;

 procedure TImage.ReadFromFile(const filename: string);
 var f: file of Integer;
 begin
   assign(f, filename);
   reset(f);
   while not EOF(f) do
   begin
     inc(top);
     read(f, stk[top])
   end;
 end;

 procedure TImage.draw;
 var currOp: byte;
 begin
   currOp:=1;
   while CurrOp < top do
   begin
     if stk[CurrOp]= -1 then begin {-1 = PutPixel}
            PutPixel(stk[CurrOp+1], stk[CurrOp+2], CurrColor);
            CurrOp:=CurrOp+3
          end else
     if stk[CurrOp] = -2 then begin {-2 = Circle}
            Circle(stk[CurrOp+1], stk[CurrOp+2], stk[CurrOp+3]);
            CurrOp:=CurrOp+4
          end else
     if stk[CurrOp] = -3 then begin
            CurrColor:=stk[CurrOp+1];
            SetColor(CurrColor);
            CurrOp:=CurrOp+2
        end;
   end;
 end;

 procedure TImage.DrawLast;
 var CurrOp: integer;
 begin
   CurrOp:=top;
   while stk[CurrOp]>0 do dec(CurrOp);
   if stk[CurrOp]= -1
       then  {-1 = PutPixel}
            PutPixel(stk[CurrOp+1], stk[CurrOp+2], CurrColor)
       else if stk[CurrOp] = -2
               then  {-2 = Circle}
                    Circle(stk[CurrOp+1], stk[CurrOp+2], stk[CurrOp+3]);
 end;

 procedure TImage.undo;
 begin
   while stk[top]>0 do dec(top);
   dec(top);
 end;

end.

Только он вроде иногда путает координаты - x и y, когда достает их из стека.

ЗЫ: Интерфейс стека:

Код

unit Stack;

interface

type TStack = object
 stk : array[1..100] of Integer;
 top : integer;

 procedure push(x: integer);
 function pop : integer;
 function GetTopElem : integer;

 constructor init;
end;


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Четыре квадратика
****

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

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


А сама программа в простейшем случае выглядит примерно так:
Код

uses image, screen, crt, graph;
var img1   : PImage;
   scr    : PScreen;
   i, n   : integer;
   code   : string[20];
   tmpstr : string;
begin
 new(img1,init);
 new(scr, init);

 repeat
   ReadLn(code); gotoxy(1,1);
   if code = 'circle' then begin
                             img1^.push(-2);
                             for i:=1 to 3 do begin
                               Read(n); img1^.push(n);
                             end;
                             img1^.DrawLast;
                           end else
   if code = 'pixel'  then begin
                             img1^.push(-1);
                             for i:=1 to 2 do begin
                               Read(n); img1^.push(n);
                             end;
                             img1^.DrawLast;
                           end else
   if code = 'undo'   then begin
                             img1^.undo;
                             scr^.clear;
                             img1^.draw
                           end else
   if code = 'open'   then begin
                             Read(tmpstr);
                             img1^.ReadFromFile(tmpstr);
                           end else
   if code = 'color' then begin
                             img1^.push(-3);
                             Read(n); img1^.push(n);
                          end;


 until code = 'quit';

 dispose(scr, done);
end.

Пока это все рисует только точки и круги smile.gif


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Четыре квадратика
****

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

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


Ау! Есть тут кто живой? Куда делся автор этой темы ???


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

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

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


Прошу прощения за молчание - были проблемы с бесплатным интернетом.
Судя по потере и без того неважной активности, можно подводить итоги.
Спасибо всем принявшим участие, но на первые два вопроса я ответы так и не получил.
Что касается исходников, то для предложенного Sand'ом нужен некий файл egavga.obj (я даже разрешение такое вижу в первый раз), а произведение Trminator'а я не смог попробовать, так как не знаю как сделать файл *.tpu ???
Самостоятельно за это время я тоже ничего нового не изобрел sad.gif
А в сентябре сдавать :'(
Все это наводит на грустные мысли.
Модераторы, ... ... ..., кончайте свои разборки, примите посильное участие!!!


--------------------
Все у нас получится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


сначала надо выбрать путь решения потом кодить
так какой путь ты выбрал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Новичок
*

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

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


Alex'у
Все свои пожелания я уже высказал.
Твоя идея с квадратиками конечно хороща, но где ты здесь видишь ООП? А основная цель - как раз ООП.


--------------------
Все у нас получится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Пионер
**

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

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


tpu - это скомпиленный модуль
egavga.bgi стандартно подключай (bgi а не obj - так норм-но сойдёт)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


да объекты куда-нибудь засунули бы для галки если бы они так не потребовались...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Новичок
*

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

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


tpu - это скомпиленный модуль
egavga.bgi стандартно подключай (bgi а не obj - так норм-но сойдёт)
А поподробнее нельзя?
Я пытался скомпилировать модули, но он выдает ошибку (неправильное окончание).
А стандартно подключить - это как.

Alex! Ну что ты как дите! Препод у меня не лох, а стандартный программер - с нечесанными власами и полной неспособностью что-нибудь объяснить по-русски. Он такую фишку просечет сразу и заставит переделывать.


--------------------
Все у нас получится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


там будут объекты не бойся
хотя бы объект - стрелка  ;D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Четыре квадратика
****

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

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


По поводу подключения модулей:
Ругаться он должен только на stack - там же только интерфейс модуля, т.е. что там хоть такое есть, без его реализации. Я считал, что стек ты сделаешь сам, если будет проблема - обращайся, но ИМХО сделать ты его должен сам

И еще кидаю модуль screen - совсем про него забыл...
Код

unit Screen;
interface uses graph;
 type PScreen = ^TScreen;

 TScreen = object
   maxx, maxy : integer;

   constructor init;
   destructor done;
   procedure clear;
 end;

implementation
 constructor TScreen.init;
 var d, m:integer;
 begin
   d:=0;
   initgraph(d, m, 'c:bpbgi'); {Кстати, так подключается графика}
{тут я не указываю явно, каким именно bgi-шником пользоваться,
 но он автоматически подключит тот самый egavga.bgi, используется автоопределение найболее подходящего драйвера
(в строчке d:=0)}
   maxx:=GetMaxX; maxy:=GetMaxY
 end;

 destructor TScreen.done;
 begin
   CloseGraph
 end;

 procedure TScreen.clear;
 begin
   ClearDevice;
 end;

begin
end.


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


чё за бред объявлять конструкторы/деструкторы там где нет вирт-ых
и(или) дин-их методов? ;D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Четыре квадратика
****

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

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


Что значит - бред? Я это делал чтобы графика автоматом подключалась, когда я инициализирую scr в главной программе (new(scr, init)).

ЗЫ Извиняюсь если что не так - на Паскале в ООП я не супер.


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


Пионер
**

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

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


Хм. А я наверное и не в состоянии объяснить как я это написал. Давно это было.  :(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #36


Гость






Why Is Propecia So Expensive
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.04.2024 3:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name