48055 (Побудова динамічної графіки), страница 4

2016-07-30СтудИзба

Описание файла

Документ из архива "Побудова динамічної графіки", который расположен в категории "". Всё это находится в предмете "информатика" из 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;

Ця функція розширює і без того достатньо обширний набір стандартних графічних драйверів і призначена в основному для розробників апаратних засобів.



  1. Блок-схема

Р ух установки вліво вздовж екрану

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));



  1. Текст програми

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.

  1. Результати роботи програми



Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4121
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее