Смекни!
smekni.com

Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x (стр. 18 из 24)

' ':OutTextXY(20,10*N+10,St);

'*':begin

SetColor(4);

OutTextXY(20,10*N+10,St);

SetColor(1);

end;

'1':begin

For Nn:=0 to 3 do

begin

GetMem(pt,ImageSize(0,200,50,250));

GetImage(0,200,50,250,pt^);

u:=0;

while u<(GetMaxX) do

begin

PutImage(u-1,150,pt^,1);

u:=u+8;

PutImage(u-1,150,pt^,1);

end;

Dispose(pt);

end;

end;

'2':begin

SetViewPort(10,50,630,330,true);

SetBKColor(0);

SetViewPort(20,60,620,320,true);

ClearViewPort;

SetBKColor(14); Sound(880); Delay(200); NoSound;

SetBKColor(12); Sound(698); Delay(200); NoSound;

SetBKColor(14); Sound(880); Delay(200); NoSound;

SetBKColor(12); Sound(698); Delay(200); NoSound;

SetBKColor(10); Sound(934); Delay(200); NoSound;

SetBKColor(14); Sound(880); Delay(200); NoSound;

SetBKColor(13); Sound(784); Delay(400); NoSound;

SetBKColor(1); Sound(523); Delay(200); NoSound;

SetBKColor(9); Sound(523); Delay(200); NoSound;

SetBKColor(1); Sound(523); Delay(200); NoSound;

SetBKColor(2); Sound(587); Delay(100); NoSound;

SetBKColor(5); Sound(659); Delay(100); NoSound;

SetBKColor(4); Sound(699); Delay(200); NoSound;

SetBKColor(3); Sound(699); Delay(200); NoSound;

SetBKColor(4); Sound(699); Delay(200); NoSound;

Delay(600);

SetViewPort(5,5,635,335,true);

SetBKColor(14);

ClearDevice;

OKNO;

End;

'#':GoTo 0;

'0':GoTo 0;

end;

end;

0:readkey;

until A.P1='0' ;

Close(F7);

Assign(F72,'Jos.pas'); {связь с файлом вопросов}

{SI-}

Reset(F72);

{SI+}

If IOResult<>0 then Writeln('Нет файла Jos.pas');

Assign(F73,'Ios.pas');

{SI-}

Reset(F73); {связь с файлом справок}

{SI+}

If IOResult<>0 then Writeln('Нет файла Ios.pas');

OKNO1; {"Контрольные вопросы"}

readkey;

ClearDevice;

Randomize; {Выбор четырех номеров вопросов}

For J:=0 to 3 do

begin

1:I:=Random(7);

If I=0 then GOTO 1;

For K:=0 to J-1 do

begin

If M[k]=I then GOTO 1;

end;

M[J]:=I;

end;

repeat

OKNO;

begin

Read(F72,At);

R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в

строку типа string}

Val(R1,Z1,Code); {Преобразование символьного представления

номера вопроса в двоичную форму}

Y:=20;

If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then

begin

repeat

S:=StrPas(At.P3); {Преобразование ASCIIZ-строки At.P3 в

строку типа string}

OutTextXY(20,Y,S); {Вывод текста вопроса}

case At.P1 of

' ':begin

end;

end;

Y:=Y+10;

Read(F72,At);

until At.P1='*';

OutTextXY(50,320,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');

2:CH:=ReadKey;

SetColor(4);

OutTextXY(320,310,CH);

SetColor(1);

readkey;

If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then

begin

SetFillStyle(1,11);

Bar(318,290,327,320);

GoTo 2;

end

else

repeat

Read(F73,Atr);

R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в

строку типа string}

Val(R2,Z2,Code); {Преобразование символьного представления

номера вопроса в двоичную форму}

If Z2=Z1 then

begin

repeat

If Atr.P3=CH then

begin

Y:=100;

OKNO;

repeat

Stt:=StrPas(Atr.P4); {Преобразование ASCIIZ-строки Atr.P4 в

строку типа string}

R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5 в

строку типа string}

Val(R5,Z5,Code); {Преобразование символьного представления

оценки в двоичную форму}

REZ7:=Round((REZ7+Z5)/2); {Формирование оценки }

OutTextXY(20,Y,Stt);

Y:=Y+10;

case Atr.P1 of

' ':begin

end;

end;

Read(F73,Atr);

until Atr.P3='*';

readkey;

GOTO 3;

end

else Read(F73,Atr);

until Atr.P1='*';

end

until Atr.P1='0';

end

else

3:end;

until At.P1='0';

Close(F72);

Close(F73);

CloseGraph;

end;

begin

end.

unit MYBOOK;

interface

uses Graph,Crt,Strings,Dos;

Type Dlina=string[10];

var Ch:char;

Regime:byte;

c,Gd,Gm,i,x1,x2,y1,y2:integer;

ArcCoords:ArcCoordsType;

StAngle,dAngle,KRadius:word;

const OK:array[1..11] of PointType= ((X:0;Y:0),(X:640;Y:0),

(X:640;Y:350), (X:0;Y:350),(X:0;Y:8),(X:5;Y:8),

(X:5;Y:345),(X:635;Y:345),(X:635;Y:5),(X:0;Y:5),

(X:0;Y:0));

procedure Diogramma;

procedure OKNO;

procedure OKNO1;

procedure GraphRegim;

implementation

procedure OKNO;

begin

SetColor(14);

DrawPoly(11,OK);

SetFillStyle(1,14);

FloodFill(635,2,14);

SetFillStyle(1,11);

Bar(6,6,634,344);

SetColor(1);

end;

procedure OKNO1;

const OK:array[1..11] of PointType= ((X:0;Y:0),(X:640;Y:0),

(X:640;Y:350), (X:0;Y:350),(X:0;Y:8),(X:5;Y:8),

(X:5;Y:345), (X:635;Y:345),(X:635;Y:5),(X:0;Y:5),

(X:0;Y:0));

begin

SetColor(14);

DrawPoly(11,OK);

SetFillStyle(1,14);

FloodFill(635,2,14);

SetFillStyle(1,11);

Bar(6,6,634,344);

SetColor(4);

SetTextStyle(0,0,6);

OutTextXY(50,100,'Контрольные');

OutTextXY(140,150,'вопросы');

SetTextStyle(0,0,1);

SetColor(1);

end;

procedure Diogramma;

begin

SetViewPort(0,0,GetMaxX,GetMaxY,true);

SetColor(11);

SetLineStyle(0,0,3);

SetFillStyle(1,13);

PieSlice(170,210,0,359,120);

SetFillStyle(9,2);

PieSlice(170,210,0,30,120);

SetFillStyle(1,3);

Sector(170,210,0,359,80,120);

SetFillStyle(11,5);

Sector(170,210,0,270,80,120);

SetFillStyle(1,15);

Circle(480,210,120);

FloodFill(480,210,11);

StAngle:=0;

dAngle:=360 Div 16;

while(StAngle+dAngle)<360 do

begin

c:=random(14);

SetColor(c);

Arc(535,210,StAngle,StAngle+dAngle,40);

GetArcCoords(ArcCoords);

with ArcCoords do

begin

KRadius:=Round(SQRT(SQR(Xend-600)+SQR(Yend-210)));

Circle(Xend,Yend,KRadius);

setfillstyle(1,c);

floodfill(xend-kradius+5,yend,c);

end;

StAngle:=StAngle+dAngle;

end;

end;

procedure GraphRegim;

var Gd,Gm:integer;

begin

Gd:=Detect;

InitGraph(Gd,Gm,'');

If GraphResult<>grOK then Halt(1);

end;

begin

end.

Приложение 2

База данных

Для работы с настоящей программой Вам необходимо знание языка

TURBO-PASCAL 7.0, интегрированной среды, персонального компьютера

IBM PC.

Расширенный алгоритмический язык TURBO-PASCAL7.0 в качестве гра-

фических средств соддержит в арсенале два стандартных модуля:

Grt и Graph.

Модуль Grt содержит процедуры и функции следующего назначения:

1.Процедуры задания режимов работы.

2.Полцедуры управления цветом.

3.Процедуры и функции работы с экраном.

4.Функции работы с клавиатурой.

5.Процедуры управления звуком и др.

Процедуры и функции модуля Graph имеют назначение:

1.Управление графическим режимом.

2.Управление экраном, окном, страницей.

3.Управление цветом и палитрой.

4.Работа с точками и линиями.

5.Построение различных фигур.

6.Работа с текстом.

7.Обмен с памятью.

В настоящей программе они скомпанованы для изучения в следующие

разделы:

1.Программирование графических режимов.

2.Управление курсором и полем рисования.

3.Формирование прямолинейных монохромных изображений

4.Управление цветом и стилем изображений.

5.Программирование цветных криволинейных изображений

6.Формирование графических текстов.

7.Программирование озвученных динамических сцен.

Первые два раздела являются справочными, а остальные разделы

содержат теоретическую часть и контрольные вопросы.

0

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

Состав, назначение и взаимное положение операторов управления

графическими режимами в языке TURBO-PASCAL удобно рассматривать в

контексте структуры характерной графической программы:

---------- program <идентификатор> - заголовок программы.

I uses Graph - используемые модули.

I {Действия в текстовом режиме}.

I ------ InitGraph - инициализация графических средств

I I {Действия в графическом режиме " по умолчанию".

I I SetGraphMode - изменение графического режима.

I I {Действия в новом графическом режиме}.

I I I-- RestoreCrtMode - временный переход в текстовому режиму.

I I I {Действия в текстовом режиме}.

I I I-> SetGraphMode - возврат в графический режим.

I I {Действия в графическом режиме}.

I I-----> CloseGraph

I {Действия в текстовом режиме}.

I--------> end. - завершение программы.

* proсedure InitGraph(var GraphDriver:integer;

* var GraphMode:integer;

* DriverPath:string);

Инициализирует графическую систему, устанавливает графический

режим, устанавливает исходные значения текущего указателя, палитры,

цвета и т.д..

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

GraphDriver - переменная, в которую необходимо записать код

требуемого графического драйвера или нуль, если

требуется автоматическое определение драйвера.

GraphMode - переменная, в которую процедура помещает код

графического режима.

DriverPath - строка, содержащая путь к драйверу (если строка

пустая, считается, что драйвер находится в текущем

каталоге).

В случае аварийной ситуации процедура устанавливает код ошибки:

-2 - нет графического адаптера;

-3 - нет драйвера устройства;

-4 - ошибка в драйвере;

-5 - нет памяти для загрузки драйвера;

-10 - недопустимый режим для выбранного драйвера.

* procedure CloseGraph(без параметров);

Восстанавливает текстовый режим работы дисплея,бывший до вызова

графической системы, и освобождает динамическую память компьютера,

отведенную под графический драйвер.

* procedure SetGraphMode(Mode:integer);

Mode - графический режим.Изменяет ранее используемый графи-

ческий режим либо возвращает систему в прежний графический режим

после временного перехода к текстовому режиму. Условием использо-

вания оператора является сохранение в динамической области ОЗУ ранее

загруженного графического драйвера.

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

* procedure RestoreCrtMode(без параметров);

Восстанавливает исходный текстовый режим дисплея без потери в

динамической области ОЗУ програмы графического драйвера.

Имеется ряд операторов для получения справок о текущем

графическом режиме:

* function GetDriverName:string; -

Возвращает строковое название

текущего графического адаптера.

* function GetModeName(ModeNumber:integer):string -

Возвращает строковое название

требуемого графического режима.

* function GetMaxMode:integer -

Возвращает максимальный номер

графического режима для текущего

адаптера.

* procedure GetModeRange(GraphDriver:integer;

* var LowMode,HighMode:integer); -

Выдает справку о диапазоне номеров графических режимов задан-

ного графического адаптера. Возвращаемые параметры LowMode и

HighMode означают минимальный и максимальный номера графических

режимов, соответственно.

* function GetGraphMode:integer; -

Возвращает номер текущего графического режима.

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

* procedure GetAspectRatio(var Xasp, Yasp:word); -

Возвращает в своих параметрах ввеличины

дискретов экрана по осям X и Y ,сооответственно.

0

УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМ РИСОВАНИЯ

В графическом режиме также как и в текстовом положение выво-

димых на экран данных в каждый момент времени определяется курcо-

ром. Однако, в этом случае курсор невидим. При вхождении в гра-

фический режим с помощью процедуры InitGraph курсор автоматически

помещается в левый верхний угол экрана, фон экрана принимает первый

(черный) цвет палитры. Для определения и изменения положения курсора

без рисования в TURBO-PASCAL предусмотрены операторы MoveTo,MoveRel,

GetX,GetY.

* procedure MoveTo(x,y:integer);

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