' ':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 - координаты по горизонтали и вертикали соответственно