48055 (Побудова динамічної графіки), страница 4
Описание файла
Документ из архива "Побудова динамічної графіки", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48055"
Текст 4 страницы из документа "48055"
Для завдання напряму видачі тексту можна використовувати константи:
const
HorizDir = 0;{Зліва направо}
VertDir = 1;{Від низу до верху}
Як бачимо, стандартні процедури OutText і OutTextXY здатні виводити повідомлення лише в двох можливих напрямах - зліва направо або від низу до верху. Знаючи структуру векторних шрифтів, неважко побудувати власні процедури, здатні виводити повідомлення в будь-якому напрямі.
Кожний шрифт здатний десятиразово змінювати свої розміри. Розмір символів, що виводяться, кодується параметром Size, який може мати значення в діапазоні від 1 до 10 (точковий шрифт - в діапазоні від 1 до 32). Якщо значення параметра рівно 0. встановлюється розмір 1, якщо більше 10 - розмір 10. Мінімальний розмір шрифту. при якому ще виразно розрізняються всі його деталі, рівний 4 (для точкового шрифту - 1).
Процедура SetTextJustify.
Задає вирівнювання тексту, що виводиться, по відношенню до поточного положення покажчика або до заданих координат.
Заголовок:
Procedure SetTextJustify(Horiz,Vert: Word);
Тут Horiz - горизонтальне вирівнювання; Vert - вертикальне вирівнювання. Вирівнювання визначає як розміщуватиметься текст - лівіше або правіше вказаного місця, вище, нижче або по центру. Тут можна використовувати такі константи:
const
LeftText = 0;{Покажчик зліва від тексту}
CenterText= 1;{Симетрично зліва і справа, верху і знизу}
RightText = 2;{Покажчик праворуч від тексту}
BottomText= 0;{Покажчик знизу від тексту}
TopText = 2;{Покажчик зверху від тексту}
Зверніть увагу на невдалі, з моєї точки зору, імена мнемонічних констант: якщо, наприклад, Ви задасте LeftText, що в перекладі означає «Лівий Текст», повідомлення буде розташовано праворуч від поточного положення покажчика (при висновку процедурою OutTextXY - праворуч від заданих координат). Також «навпаки» потрактує і решта констант.
Процедура SetUserCharSize.
Змінює розмір символів, що виводяться, відповідно до заданих пропорцій.
Заголовок:
Procedure SetUserCharSize(XI,X2,Yl,Y2: Word);
Тут X1...Y2 - вирази типа Word, що визначають пропорції по горизонталі і вертикалі.
Процедура застосовується тільки по відношенню до векторних шрифтів. Пропорції задають масштабний коефіцієнт, що показує в скільки разів збільшиться ширина і висота символів, що виводяться, по відношенню до стандартно заданих значень. Коефіцієнт по горизонталі знаходиться як відношення X1 до Х2, по вертикалі - як відношення Y1 до Y2. Щоб, наприклад, подвоїти ширину символів, необхідно задати X1=2 і Х2=1. Стандартний розмір символів встановлюється процедурою SetTextStyle, яка відміняє попереднє їй звернення до SetUserCharSize.
Функція TextWidth.
Повертає довжину в пікселях текстового рядка, що виводиться.
Заголовок:
Function TextWidth (Txjt: String): Word;
Враховуються поточний стиль і коефіцієнти зміни розмірів символів, задані відповідно процедурами SetTextStyle і SetUserCharSize.
Функція TextHeight.
Повертає висоту шрифту в пікселях.
Заголовок:
Function TextHeight(Txt: String): Word;
Процедура GetTextSettings.
Повертає поточний стиль і вирівнювання тексту.
Заголовок:
Procedure GetTextSettins(var Textlnfo: TextSettingsType);
Тут Textlnfo - змінна типа TextSettingsType, який в модулі Graph визначений таким чином:
type
TextSettingsType = record
Font : Word; {Номер шрифту}
Direction: Word; {Напрям}
CharSize : Word; {Код розміру}
Horiz : Word; {Горизонтальне вирівнювання}
Vert : Word; {Вертикальне вирівнювання}
end;
-
Включення драйвера і шрифтів в тіло програми
Функція InstallUserFont.
Дозволяє програмі використовувати нестандартний векторний шрифт. Заголовок функції:
Function InstallUserFont(FileName: String): Integer;
Тут FileName - ім'я файлу, що містить векторний шрифт.
Як вже мовилося, в стандартну поставку Турбо Паскаля версій 4.0 - 6.0 включено три векторні шрифти, для версії 7.0 - 10. Функція InstallUserFont дозволяє розширити цей набір. Функція повертає ідентифікаційний номер нестандартного шрифту, який може використовуватися при зверненні до процедури SetTextStyle.
Функція InstallUserDriver.
Включає нестандартний графічний драйвер в систему BGI-драйверів. Заголовок функції:
Function InstallUserDriver(FileName: String; AutoDetectPtr: Pointer): Integer;
Ця функція розширює і без того достатньо обширний набір стандартних графічних драйверів і призначена в основному для розробників апаратних засобів.
-
Блок-схема
Р ух установки вліво вздовж екрану
Size:=ImageSize(1,380,270,479);
GetMem(p2,size);
GetImage(1,380,270,479,p2^);
i:=354;
b:=2;
i>=147
PutImage(i,380,p2^,1);
Delay(5000);
cleardevice;
i:=i-3;
PutImage(i,380,p1^,1);
Delay(5000);
cleardevice;
i :=i-3;
Підняття ракети на 45 x:=180
x<226
y:=x*pi/180;
i:=round(240*cos(y))+404;
j:=round(240*sin(y))+406;
i1:=round(242*cos(y+0.1111))+404;
j1:=round(242*sin(y+0.1111))+406;
i2:=round(26*cos(y+1.59))+404;
j2:=round(26*sin(y+1.59))+406;
i3:=round(260*cos(y+0.05555))+404;
j3:=round(260*sin(y+0.05555))+406;
Line(i,j,404,406);
Line(i1,j1,i2,j2);
line(404,406,i2,j2);
line(i,j,i3,j3);
line(i1,j1,i3,j3);
line(i,j,i1,j1);
x:=x+2;
SetFillStyle(6,9);
Floodfill(i+5,j-1,3);
SetFillStyle(6,4);
Floodfill(i1-5,j1+4,3);
PutImage(154,407,p2^,1);
sound(3000-x*10);
delay(10000);
nosound;
Стартовий вогонь
k:=1..300;1
i:=random(100)+400;
j:=random(179)+380;
putpixel(i,j,random(16));
-
Текст програми
Uses Graph,crt;
const vga=9;
var
p2,p1:pointer;
Driver, Mode:integer; x,j,i,i1,j1,i2,j2,j3,i3,k:integer;Size:word;m:char;
y:real;
procedure raket; {Процедура створення ракети}
begin
line(i+20,j+13,i+260,j+13); {Основа ракети}
line(i+20,j-13,i+260,j-13);
line(i+20,j-13,i+20,j+13);
line(i+260,j-13,i+260,j+13);
outtextxy(344,390,'CCCP'); {Напис на ракеті}
Line(i,j,i+20,j+13); {Кінець ракети}
Line(i,j,i+20,j-13);
end;
Begin
Driver := vga;
Mode:=2;
InitGraph(Driver, Mode,'d:\BP\BGI') ; {Ініціалізація графіки}
setColor(3);
Line(509,417,254,417); {Платформа}
Circle(479,449,30); {Створення шасі}
SetFillStyle(1,1);
Floodfill(479,440,3);
SetFillStyle(1,3);
Circle(479,449,3);
Floodfill(479,449,3);
SetFillStyle(7,12);
Circle(479,464,5);
Floodfill(479,464,3);
Circle(479,434,5);
Floodfill(479,434,3);
Circle(465,449,5);
Floodfill(465,449,3);
Circle(494,449,5);
Floodfill(494,449,3);
Size:=ImageSize(449,419,509,479);
GetMem(p1,size);
GetImage(449,419,509,479,p1^);
PutImage(384,419,p1^,1);
PutImage(319,419,p1^,1);
PutImage(254,419,p1^,1);
Line(300,417,300,407); {Тримачі ракети}
Line(320,417,320,407);
Line(462,417,462,407);
Line(442,417,442,407);
Circle(488,394,10);
PutPixel(488,394,2);
Line(478,417,478,394);
Line(498,417,498,394);
i:=240; {Прорисовка ракети}
j:=394;
SetFillStyle(6,9);
raket;
Floodfill(241,394,3); {Розфарбування ракети}
Floodfill(261,394,3);
SetFillStyle(6,10);
Floodfill(488,394,3);
SetFillStyle(6,9);
Floodfill(488,405,3);
Size:=ImageSize(240,380,509,479);
GetMem(p1,size);
GetImage(240,381,509,479,p1^);
ClearDevice;
PutImage(1,380,p1^,1);
Circle(50,50,30); {Створення нового колеса}
SetFillStyle(1,1);
Floodfill(55,50,3);
SetFillStyle(1,3);
Circle(50,50,3);
floodfill(50,50,3);
SetFillStyle(7,12);
Circle(40,40,5);
floodfill(40,40,3);
Circle(40,61,5);
floodfill(40,61,3);
Circle(60,40,5);
floodfill(60,40,3);
Circle(60,61,5);
floodfill(60,61,3);
Size:=ImageSize(20,20,80,80);
GetMem(p2,size);
GetImage(20,20,80,80,p2^); { Занесення нового колеса в пам’ять}
PutImage(15,418,p2^,0); {Створення нових шасі}
PutImage(80,418,p2^,0);
PutImage(145,418,p2^,0);
PutImage(210,418,p2^,0);
Size:=ImageSize(1,380,270,479);
GetMem(p2,size);
GetImage(1,380,270,479,p2^); {Занесення установки в пам’ять}
ClearDevice;
readkey; { Рух установки вліво вздовж екрану}
i:=354;
b:=2;
while (i>=147) do
begin
PutImage(i,380,p2^,1);
Delay(5000);
cleardevice;
i:=i-3;
PutImage(i,380,p1^,1);
Delay(5000);
cleardevice;
i:=i-3;
end;
PutImage(i,380,p1^,1);
i:=144;
j:=j-1;
SetColor(3);
raket;
Size:=ImageSize(154,407,509,479);
GetMem(p2,size);
GetImage(154,407,509,479,p2^);
x:=180;
while (x<226) do {Підняття ракети на 45 }
begin
cleardevice;
y:=x*pi/180;
i:=round(240*cos(y))+404;
j:=round(240*sin(y))+406;
i1:=round(242*cos(y+0.1111))+404;
j1:=round(242*sin(y+0.1111))+406;
i2:=round(26*cos(y+1.59))+404;
j2:=round(26*sin(y+1.59))+406;
i3:=round(260*cos(y+0.05555))+404;
j3:=round(260*sin(y+0.05555))+406;
Line(i,j,404,406);
Line(i1,j1,i2,j2);
line(404,406,i2,j2);
line(i,j,i3,j3);
line(i1,j1,i3,j3);
line(i,j,i1,j1);
x:=x+2;
SetFillStyle(6,9); {Розфарбування ракети}
Floodfill(i+5,j-1,3);
SetFillStyle(6,4);
Floodfill(i1-5,j1+4,3);
PutImage(154,407,p2^,1);
sound(3000-x*10);
delay(10000);
nosound;
end;
for k:=1 to 300 do {Стартовий вогонь}
begin
i:=random(100)+400;
j:=random(179)+380;
putpixel(i,j,random(16));
end;
delay(65000);
Size:=ImageSize(228,215,519,406);
GetMem(p1,size);
GetImage(228,215,519,406,p1^); {Занесення піднятої ракети в пам’ять}
cleardevice;
i:=228;
while (i>1) do {Рух ракети в лівий верхній кут}
begin
PutImage(154,407,p2^,1);
Putimage(i,i-13,p1^,1);
delay(1000);
cleardevice;
i:=i-5;
end;
readkey;
dispose(p1);
dispose(p2);
end.
-
Результати роботи програми