Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Та програмування

Та програмування




Сторінка4/11
Дата конвертації10.03.2017
Розмір2.35 Mb.
1   2   3   4   5   6   7   8   9   10   11
клавіша */

sx =sxmove;

Клавіату́ра (англ. keyboard) - сукупність розміщених у певному порядку клавіш пристрою, що використовується для введення і редагування даних, а також керування виконанням окремих операцій.

sy =symove;

} while (!kbhit());

free(p);// вивільнення пам’яті буфера

closegraph ();

}

void GrInit () {



int gdriver=DETECT, gmode, errorcode;

clrscr ();

initgraph(&gdriver, &gmode,"");

errorcode=graphresult();

if (errorcode!=grOk) {

printf ("Graphics error: %s\n", grapherrormsg(errorcode));

printf ("Press any key to halt...");

getch ();

exit (1);

}

}



Рисунок 1.15 – Зображення результату роботи виконуваного файлу для прикладу 1.18

1.7 Керування відеосторінками


1. Функція setvisualpage (int page), яка встановлює видимою на екрані відеосторінку номер page.

2. Функція setactivepage(int page) встановлює перенаправлення всіх графічних операцій на сторінку номер page.
Лістинг 1.19. Керування відеосторінками (тільки для адаптерів VGA і EGA)
#include

#include

#include

#include


int main()

{ /* вибір драйвера і режиму */

int gdriver = EGA, gmode = EGAHI, errorcode;

int x, y, ht;

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{ printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();


exit(1);

}

x = getmaxx() / 2;



y = getmaxy() / 2;

ht = textheight("W");


/* вибір невидимої сторінки для рисування*/

setactivepage(1);


/* рисування лінії на сторінці #1 */

line(0, 0, getmaxx(), getmaxy());


/* виведення повідомлення на сторінці #1 */

settextjustify(CENTER_TEXT, CENTER_TEXT);

outtextxy(x, y, "This is page #1:");

outtextxy(x, y ht, "Press any key to halt:");


/* вибір рисунка для сторінки #0 */

setactivepage(0);


/* виведення повідомлення на сторінці #0 */

outtextxy(x, y, "This is page #0.");

outtextxy(x, y ht, "Press any key to view page #1:");

getch();


/* вибір сторінки #1 як видимої */

setvisualpage(1);

getch();

closegraph();

return 0;

}
1.8 Вибір шрифта і стиля


В бібліотеці graphics.h є набір шрифтів, які можуть бути використані для виведення інформації:

DEFAULT_FONT= 0

TRIPLEX_FONT= 1

SMALL_FONT= 2

SANS_SERIF_FONT= 3

GOTHIC_FONT= 4

SCRIPT_FONT= 5

SIMPLEX_FONT= 6

TRIPLEX_SCR_FONT= 7

COMPLEX_FONT= 8

EUROPEAN_FONT = 9

BOLD_FONT= 10

Щоб обрати потрібний шрифт, потрібно використати функцію settextstyle(int font, int direction, int charsize).

Параметр font номер шрифта; direction – розташування тексту. Можливі лише дві орієнтації тексту; відзначені такими константами:

HORIZ_DIR = 0;

Константа (лат. constans - стала величина, інша назва - стала) - величина, що не змінює свого значення протягом певного процесу (на відміну від змінної, значення якої може змінюватись). Прикладами констант є число пі, коефіцієнти многочленів, температура під час ізотермічного процесу.

VERT_DIR = 1;

Charsize – розмір кожного символу.

Для виведення тексту використовують дві функції:

outtext(const char far *textstring); – виводить на графічний екран рядок textstring, орієнтований відносно позиції поточного вказівника;

outtextxy(int x, int y, const char far *textstring); – виводить рядок, орієнтований відносно координат х, у.

Шрифт попередньо може бути встановлений викликом функції settextstyle().

Розмір букв та рядків

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

Розді́льна - місто у західній частині Причорноморської низовини, районний центр Роздільнянського району Одеської області; 18015 меш. (2016). Відстань до облцентру становить близько 87 км і проходить автошляхами Т 1618 та E95.

Функції


textheight(const char far *textstring);

textwidth(const char far *textstring);

повертають ширину та довжину рядка textstring в пікселях.

1.9 Контрольні запитання


1. Яка бібліотека функції призначена для керування графічними режимами?

2. Які файли мають бути у робочому каталозі для роботи у графічному режимі?

3. Охарактеризуйте функціональні групи бібліотеки graphics.h?

4. Яким чином відбувається ініціалізація графічного режиму?

5. Які ви знаєте процедури для рисування графічних примітивів?

6. Для чого призначена функція drawpoly(), які її параметри?

7. Який діапазон кольорів BGI драйверів?

8. Як здійснити перехід від графічного режиму до текстового?

9. Які способи заливання зображення ви знаєте?

10. Що ви знаєте про логічні операції XOR_PUT і COPY_PUT?

11. Які функції використовуються для роботи з фрагментами зображення?

12. Дайте коротку характеристику функціям керування відеосторінками?

13. В якій бібліотеці міститься набір шрифтів для виведення інформації?

14. Які функції використовуються для виведення тексту?

15. Яким чином можна змінити розмір букв та рядків у графічному режимі?
1.10 Практикум з програмування
1. Напишіть функцію ініціалізації графічного режиму з урахуванням обробки помилок ініціалізації.

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

3. Напишіть функцію для рисування кола з заданими координатами.

4. Використовуючи генератор випадкових чисел, напишіть програму рисування прямокутників з різною товщиною ліній.

5. Напишіть програму для рисування дуг різними кольорами.

6. Напишіть функцію для рисування заповненого прямокутника заданого розміру.

7. Напишіть функцію для рисування паралелепіпеда, заповненого заданим кольором.

8. Напишіть функцію для рисування різнокольорових заповнених еліпсів.

9. Напишіть програму для рисування рухомого місяця вздовж лінії горизонту нічного неба.

10. Наведіть приклад заливання області.

2 ОСОБЛИВОСТІ РОЗРОБКИ ГРАФІЧНИХ ЗАСТАВОК
В ПРОФЕСІЙНИХ ПРОГРАМАХ

Однією з характерних рис сучасних програм є наявність яскравих анімацій, що виводяться на екран та приваблюють увагу користувача. В даному розділі розглядаються основні принципи створення графічних заставок на прикладі розробки заставки відомого у 2000-2003 роках комп’ютерного мультику “Musyanya”, розробленого російськими програмістами.


2.1 Загальні відомості
Робота в графічному режимі виконується за допомогою попередньо визначених констант, типів та функцій стандартної бібліотеки graphics.h. Для того щоб отримати складний рисунок необхідно подати його у вигляді сукупності найпростіших геометричних елементів.

Розглянемо особливості програмування рисунка, що представлений на рисунку 2.1.



Рисунок 2.1 – Приклад графічної заставки
Щоб спростити цю задачу, розіб’ємо рисунок на дві основи: напис слова “Musyanya” та зображення дівчинки. Ці основи розпадаються на більш прості об’єкти. Наприклад, напис складається з кожної окремо рисованої літери, а зображення дівчинки з таких основних складових людського тіла, як голова, тулуб та ноги. Кожен з цих простих об’єктів можна подати як сукупність ще простіших складових. Такий процес ділення елементів об‘єкту продовжується до тих пір, поки вони не являтимуть собою сукупністю найпростіших геометричних фігур, для виведення на екран яких існують готові функції в стандартній бібліотеці.

2.2 Особливості розробки статичної частини графічної заставки


Розглянемо програму для виведення на екран напису, що складається з 6 функцій, кожна з яких відповідає за рисування окремої літери.

Почнемо з функції, яка рисує літеру «М». Ця задача складається з виведення на екран таких найпростіших елементів, як лінія (1, 2), еліпс (3, 4), дуга (5, 6, 7, 8).


void S_M(int x1,int y1)

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

line(x1,y1,x1,y1-80); //Виведення лінії 1

fillellipse(x1-7,y1,7,5); //Виведення еліпса 3

line(x1 25,y1,x1 25,y1-60); //Виведення лінії 2

fillellipse(x1 18,y1,7,5); // Виведення еліпса 4

arc(x1,y1-45,313,0,25); //Виведення дуги 5

arc(x1-26,y1-25,360,50,40); //Виведення дуги 6

arc(x1 26,y1-75,180,230,25); //Виведення дуги 7

arc(x1-10,y1-40,340,50,25); //Виведення дуги 8

setfillstyle(1,8);

setfillstyle(1,8);

floodfill(x1 2,y1-59,8);

}

Рисунок 2.2 – Рисування літери «М»
За таким же принципом на екран виводяться всі інші літери: «U», «S», «Y», «A», «N».

Рисування дівчинки в даному випадку знаходиться в основній частині програми, в функції main(). Як вже було зазначено, задача виведення на екран дівчинки розпалася на 3 задачі: виведення голови, тулуба та ніг. Для того, щоб нарисувати голову, треба розуміти, що вона складається, зокрема, з контуру обличчя, очей, брів, рота, волосся та навушників.

Контур обличчя являє собою еліпс, центром якого є точка з координатами (170, 120), горизонтальний радіус 60, а вертикальний 30 точок.


Рисунок 2.3 – Рисування голови
setcolor(8);

setfillstyle(1,14);

setlinestyle(0,1,1);

fillellipse(170,120,60,30); //рисує зафарбований еліпс – голову


Навушники – це два еліпси, між якими дві дуги, а простір між дугами залитий темно-сірим кольором. Код, завдяки якому рисуються навушники, є таким:

setcolor(8);

setfillstyle(1,8);

setlinestyle(0,1,1);

fillellipse(110,120,10,20); //рисує еліпс – лівий навушник

fillellipse(230,120,10,20); //рисує еліпс – правий навушник

arc(170,165,40,140,85);

arc(170,170,40,140,85); //рисує дуги з’єднання двох навушників

floodfill(170,82,8); //зафарбовує відокремлену дугами область

Рисунок 2.4 – Рисування навушників
На даному рисунку очі являють собою еліпси. Для реалізації очей в даному випадку вибраний такий програмний код:

setfillstyle(1,15);

fillellipse(160,90,10,15);

//рисує зафарбований білий еліпс – ліве око

fillellipse(180,90,10,15);



//рисує зафарбований білий еліпс – праве око

setfillstyle(1,1);

fillellipse(165,95,4,6); );

//рисує зафарбований синій еліпс – ліве око

fillellipse(185,95,4,6); );



//рисує зафарбований синій еліпс – праве око
Рот, мабуть, найпростіший об’єкт обличчя, тому що це проста дуга кола, від початкового кута 220 до кінцевого кута 320 градусів з радіусом 60 точок. Точка з координатами (170, 75) використовується як центр кола.

setcolor(8);

setlinestyle(0,1,3);

arc(170,75,220,320,60); //рисує дугу – рот


//Волосся на голові у дівчинки виконано також за допомогою дуг.

setlinestyle(0,1,1);

arc(260,105,120,170,60);

arc(260,105,120,170,50);

arc(260,105,120,170,40);

arc(80,105,10,60,60);

arc(80,105,10,60,50);

arc(80,105,10,60,40); //дуги – волосся


Голова вже майже нарисована, не вистачає брів, але оскільки це рухома частина, то детальніше їх зображення буде описане нижче.

Розглянемо тулуб, який можна подати як сукупність деталей: контур тулуба, шия, руки, майка, спідниця та плеєр. Як і контур голови контур тулуба являє собою простий еліпс, який з’єднує з головою шия. Шия подана як маленький прямокутник. Спідничка теж зображена досить символічно, у вигляді прямокутника, але вже більшого. Для виведення на екран зафарбованих прямокутників використовується функція bar3d(), де параметр глибини паралелепіпеда приймає значення 0. Нижче наведений код для виведення на екран контура тулуба, шиї та спіднички.


setcolor(8);

setfillstyle(1,14);

setlinestyle(0,1,1);

fillellipse(170,205,35,50); //рисує еліпс – тулуб

bar3d(165,150,175,155,0,1); //рисує паралелепіпед – шия

setlinestyle(0,1,1);

setfillstyle(1,1);

bar3d(140,230,200,260,0,1); //рисує паралелепіпед – спідниця



Рисунок 2.5 – Рисування тулуба та спідниці
Для того, щоб нарисувати майку, використовуються вже існуючі лінії тулуба та додаються дві дуги – отвори для рук – та лінія низу. Отримані контури зафарбовуються червоним кольором за допомогою функції floodfill(). Це відбувається за допомоги таких програмних інструкцій:

arc(140,160,270,5,20);

arc(200,160,173,275,20);

line(135,200,205,200); //рисує 2 дуги та лінію – контури майки

setfillstyle(1,12);

floodfill(145,190,8); //зафарбовує відокремлену дугами область – майка(3)

Музичний CD-плеєр – це просто зафарбований еліпс з однаковими радіусами, що, насправді, є колом. А напис на плеєрі зроблено з використанням функції outtextxy(). Отже, все це можна подати у вигляді:

setcolor(8);

setfillstyle(1,7);

setlinestyle(0,1,1);

fillellipse(170,215,20,20); //рисує зафарбований еліпс – музичний CD-плеєр

setcolor(BLACK);

outtextxy(155,205,"SONY");
//виводить рядок тексту – напис на плеєрі

outtextxy(160,225,"MP3");


//руки показані як великі дуги, а пальці – як маленькі лінії.

setlinestyle(0,1,3);

arc(170,190,280,50,30);

arc(170,190,140,260,30); //дуги – руки

setcolor(8);

line(160,227,165,220);line(167,228,165,220);line(172,225,165,220);

line(165,216,175,220);line(175,210,175,220);line(170,213,175,220); //лінії – пальці

// ноги можна подати як зафарбовані сектори кола з малим кутом.

setfillstyle(1,14);

pieslice(155,340,83,90,80);

pieslice(195,340,101,95,81); //виводить на екран зафарбовані сектори // кола – ноги (4)



// нерухома ступня є зафарбованою областю, яка обмежена лінією та дугою.

line(155,340,125,340);

arc(140,360,52,120,25);

setfillstyle(1,8);

floodfill(145,339,8); //зафарбовується область, яка обмежена лінією та дугою – нерухома ступня (5)
2.3 Особливості розробки динамічної частини графічної заставки
Нерухома частина зображення вже виконана у вигляді програмного коду на мові С.

Початковий код (англ. source code; також перекладається українською як вихідний код, програмний код, джерельний код, первинний код, текст програми, у професійному середовищі також сирцевий код, у контексті код або сирці) - будь-який набір інструкцій або оголошень, написаних комп'ютерною мовою програмування у формі, що її може прочитати і модифікувати людина.
Залишилося лише відобразити на екрані рух лівої ступні, брів та нот. Для того, щоб створити рух рисунка необхідно прорисувати кожну фазу руху та, плавно заміщаючи їх одна одною, виводити на екран. Для цього рухома частина рисунку зберигається в пам’яті за допомогою функції getimage() та для виведення її на екран - функції putimage(). Отже, спочатку рисуємо та запам’ятовуємо фази різних рухомих предметів. Наприклад, для збереження вигляду ноти використовується такий програмний код:

line(20,5,20,25); //виводить лінію (частина ноти)



//виводить зафарбований еліпс (частина ноти)

fillellipse(17,26,3,2);



// sizecircle значення числа байтів, необхідних для зберігання прямокутної області екрана

sizecircle=imagesize(0,0,30,30);

Зберіга́ння - дія за значенням зберігати; технологічний процес.
//присвоєння змінній



//виділення пам’яті розміром sizecircle з динамічної області

map=malloc(sizecircle);



//зберігає в буфері прямокутну область екрана

getimage(0,0,30,30,map);




Рисунок 2.6 – Рисування ноти


Щоб рух відбувався неперервно до натиснення будь-якої клавіші, використовується цикл while(!kbhit()). В середині цього циклу виводиться на екран попередньо збережена фаза 1, відбувається затримка, перераховуються координати нот та виводиться фаза 2 різних рухливих елементів.

while (!kbhit()) //поки не натиснута будь-яка клавіша

{

putimage(140,40,fas1,1);



putimage(195,320,fas3,1);

putimage(140,40,fas2,1);

putimage(195,320,fas4,1);

delay(150);

for (i=0;i

{

if (currentx[i]>229)



putimage(currentx[i],currenty[i],map,1);

currentx[i] =3;

currenty[i]=50 20*sin((currentx[i] 40)*pi/100);

if (currentx[i]>620)



//розрахунок нових координат кожної з нот

{

currentx[i]=230;



currenty[i]=50 20*sin((currentx[i] 40)*pi/100);

}

if (currentx[i]>229)


//виводяться ноти з новими координатами

putimage(currentx[i],currenty[i],map,1);

}

putimage(140,40,fas1,1);



putimage(195,320,fas4,1);

putimage(140,40,fas2,1);

putimage(195,320,fas3,1);

delay(150);

}
Після закінчення руху вивільняється пам’ять, яка була виділена під збереження фаз руху, за допомоги операції free().
Лістинг програми рисування графічної заставки

#include

#include

#include

#include

#include

#include

#include

#define Y 180 //визначення константи «Y»

#define x 340 //визначення константи «x»

#define pi 3.1415926 //визначення константи «pi»

#define n 13 //визначення константи «n»

void initgr(); //прототип функції ініціалізації графіки

void S_M(int,int); //прототип функції, яка рисує літеру «М»

void S_U(int,int); //прототип функції, яка рисує літеру «U»

void S_S(int,int); //прототип функції, яка рисує літеру «S»

void S_Y(int,int); //прототип функції, яка рисує літеру «Y»

void S_A(int,int); //прототип функції, яка рисує літеру «A»

void S_N(int,int); //прототип функції, яка рисує літеру «N»
void main()

{

unsigned int sizecircle, sizeoffas1, sizeoffas2,



sizeoffas3,sizeoffas4;

void *map,*fas1,*fas2,*fas3,*fas4;

int currentx[n],currenty[n];

int i;
//виклик функції ініціалізації графіки

initgr();
//встановлює колір фону (15) - білий

setbkcolor(15);


//встановлює поточний колір рисунка (8) – темно-сірий

setcolor(8);


//встановлює тип лінії та її товщину

setlinestyle(0,1,1);


//встановлює тип зафарбовування та його колір

setfillstyle(1,8);


//виводить лінію (частина ноти)

line(20,5,20,25);


//виводить зафарбований еліпс(частина ноти)

fillellipse(17,26,3,2);


//присвоєння змінній sizecircle значення числа байтів,

//необхідних для зберігання прямокутної області екрана

sizecircle=imagesize(0,0,30,30);
//виділення пам’яті розміром sizecircle з динамічної області

map=malloc(sizecircle);


//зберігає в буфері прямокутну область екрана

getimage(0,0,30,30,map);


//скидає стан поточного графічного екрана

cleardevice();


S_M(x,Y); //виклик функції, яка рисує літеру «М»

S_U(x 30,Y-7); ); //виклик функції, яка рисує літеру «U»

S_S(x 60,Y-7); ); //виклик функції, яка рисує літеру «S»

S_Y(x 95,Y-7); ); //виклик функції, яка рисує літеру «Y»

S_A(x 123,Y-7); ); //виклик функції, яка рисує літеру «A»

S_N(x 165,Y-7); ); //виклик функції, яка рисує літеру «N»

S_Y(x 200,Y-7); ); //виклик функції, яка рисує літеру «Y»

S_A(x 228,Y-7); ); //виклик функції, яка рисує літеру «A»


setcolor(8);

setfillstyle(1,14);

setlinestyle(0,1,1);

fillellipse(170,120,60,30); //рисує зафарбований еліпс – голову


setcolor(8);

setfillstyle(1,8);

setlinestyle(0,1,1);

fillellipse(110,120,10,20); //рисує лівий навушник

fillellipse(230,120,10,20); //рисує правий навушник
//рисує дуги, які є границями

//з’єднання двох навушників

arc(170,165,40,140,85);

arc(170,170,40,140,85);

floodfill(170,82,8); //зафарбовує відокремлену дугами область

setfillstyle(1,15);


//рисує зафарбований білий еліпс – ліве око

fillellipse(160,90,10,15);


//рисує зафарбований білий еліпс – праве око

fillellipse(180,90,10,15);

setfillstyle(1,1);
//рисує зафарбований синій еліпс – ліве око

fillellipse(165,95,4,6); );


//рисує зафарбований синій еліпс – праве око

fillellipse(185,95,4,6); );

setcolor(8);

setlinestyle(0,1,3);

arc(170,75,220,320,60); //рисує дугу - рот

setlinestyle(0,1,1);

arc(260,105,120,170,60);

arc(260,105,120,170,50);

arc(260,105,120,170,40);

arc(80,105,10,60,60);

arc(80,105,10,60,50);

arc(80,105,10,60,40); //дуги – волосся


setcolor(8);

setfillstyle(1,14);

setlinestyle(0,1,1);

//рисує зафарбований еліпс – тулуб

fillellipse(170,205,35,50);

//рисує зафарбований паралелепіпед – шия

bar3d(165,150,175,155,0,1);

setlinestyle(0,1,1);

setfillstyle(1,1);

//рисує зафарбований паралелепіпед – спідниця

bar3d(140,230,200,260,0,1); );
//рисує 2 дуги та лінію – контури майки

arc(140,160,270,5,20);

arc(200,160,173,275,20);

line(135,200,205,200);

setfillstyle(1,12);
//зафарбовує відокремлену дугами область – майка

floodfill(145,190,8);

setcolor(8);

setfillstyle(1,7);

setlinestyle(0,1,1);
//рисує зафарбований еліпс – музичний CD-плеєр

fillellipse(170,215,20,20);

setcolor(BLACK);
//виводить рядок тексту – напис на плеєрі

outtextxy(155,205,"SONY");

outtextxy(160,225,"MP3");

setcolor(8);


//лінії – пальці

line(160,227,165,220);

line(167,228,165,220);

line(172,225,165,220);

line(165,216,175,220);

line(175,210,175,220);

line(170,213,175,220);
//дуги – руки

setlinestyle(0,1,3);

arc(170,190,280,50,30);

arc(170,190,140,260,30);


//виводить на екран зафарбовані сектори кола – ноги

setfillstyle(1,14);

pieslice(155,340,83,90,80);

pieslice(195,340,101,95,81);

//зафарбовується область, яка обмежена лінією

//та дугою – нерухома ступня

line(155,340,125,340);

arc(140,360,52,120,25);

setfillstyle(1,8);

floodfill(145,339,8);

setcolor(8);

setlinestyle(0,1,1);

arc(160,75,50,130,10);

arc(160,80,50,130,10);

arc(180,75,50,130,10);

arc(180,80,50,130,10); //дуги – брови (фаза 1)

sizeoffas1=imagesize(140,40,200,73);

fas1=malloc(sizeoffas1);


//зберігає в буфері прямокутну

//область екрана, в якій попередньо виведені брови (фаза 1)

getimage(140,40,200,73,fas1);

putimage(140,40,fas1,1);

line(195,340,225,340);

arc(210,360,52,120,25);

setfillstyle(1,8);
//зафарбовується область, яка обмежена лінією

//та дугою – рухома ступня (фаза 1)

floodfill(200,339,8);

sizeoffas3=imagesize(195,320,225,340);

fas3=malloc(sizeoffas3);
//зберігає в буфері прямокутну

//область екрана, в якій попередньо виведена ступня(фаза 1)

getimage(195,320,225,340,fas3);

putimage(195,320,fas3,1);

setcolor(8);

setlinestyle(0,1,1);

arc(160,55,50,130,10);

arc(160,60,50,130,10);

arc(180,55,50,130,10);

arc(180,60,50,130,10); //дуги – брови (фаза 2)

sizeoffas2=imagesize(140,40,200,60);

fas2=malloc(sizeoffas2);


//зберігає в буфері прямокутну

//область екрана, в якій попередньо виведені брови (фаза 2)

getimage(140,40,200,60,fas2);

putimage(140,40,fas2,1);

line(195,340,220,325);

arc(218,349,85,155,25);

setfillstyle(1,8);

floodfill(207,332,8);

sizeoffas4=imagesize(195,320,225,340);

fas4=malloc(sizeoffas4);

//зафарбовується область, яка

//обмежена лінією та дугою – рухома ступня (фаза 2)

getimage(195,320,225,340,fas4);

putimage(195,320,fas4,1);

for (i=0;i

{
//розрахунок початкових координат

//кожної з нот

currentx[i]=230-30*i;

currenty[i]=50 20*sin((currentx[i] 40)*pi/100);

}

putimage(currentx[0],currenty[0],map,1);


//виводяться брови в стані фаза1

putimage(140,40,fas1,1);

putimage(195,320,fas4,1); //виводиться ступня в стані фаза1
while (!kbhit()) //поки не натиснута будь-яка клавіша

{

putimage(140,40,fas1,1);



putimage(195,320,fas3,1);

putimage(140,40,fas2,1);

putimage(195,320,fas4,1);

delay(150);

for (i=0;i

{

if (currentx[i]>229)



putimage(currentx[i],currenty[i],map,1);

currentx[i] =3;

currenty[i]=50 20*sin((currentx[i] 40)*pi/100);

if (currentx[i]>620)


//розрахунок нових координат кожної з нот

{

currentx[i]=230;



currenty[i]=50 20*sin((currentx[i] 40)*pi/100);

}

if (currentx[i]>229)



putimage(currentx[i],currenty[i],map,1);
//виводяться ноти з новими координатами

}

putimage(140,40,fas1,1);



putimage(195,320,fas4,1);

putimage(140,40,fas2,1);

putimage(195,320,fas3,1);

delay(150);

}

getch();


free(map);

free(fas1);

free(fas2);

free(fas3);


//вивільнення пам’яті

free(fas4);

}
void initgr()

{

int grdriver=DETECT,grmode,errorcode,color;



initgraph(&grdriver,&grmode,"../bgi");

errorcode=graphresult();

if (errorcode != grOk)

{

printf("Error!");



getch();

exit(1);


}

setbkcolor(9);

}
void S_M(int x1,int y1) //функція, яка рисує літеру «М»

// за заданими координатами

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

line(x1,y1,x1,y1-80);

fillellipse(x1-7,y1,7,5);

line(x1 25,y1,x1 25,y1-60);

fillellipse(x1 18,y1,7,5);

arc(x1,y1-45,313,0,25);

arc(x1-26,y1-25,360,50,40);

arc(x1 26,y1-75,180,230,25);

arc(x1-10,y1-40,340,50,25);

setfillstyle(1,8);

setfillstyle(1,8);

floodfill(x1 2,y1-59,8);

}
//функція, яка рисує літеру «U» за заданими координатами

void S_U(int x2,int y2)

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

line(x2,y2,x2,y2-30);

fillellipse(x2 6,y2-30,5,3);

line(x2 20,y2,x2 20,y2-30);

fillellipse(x2 27,y2-30,5,3);

line(x2,y2,x2 20,y2);

}
//функція, яка рисує літеру «Y» за заданими координатами

void S_Y(int x4,int y4)

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

line(x4,y4,x4,y4-30);

fillellipse(x4-6,y4-30,5,3);

line(x4 20,y4 10,x4 20,y4-30);

line(x4,y4,x4 20,y4);

arc(x4 6,y4 10,260,360,15);

fillellipse(x4 5,y4 25,5,3);

}
//функція, яка рисує літеру «A» за заданими координатами

void S_A(int x5,int y5)

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

arc(x5 17,y5-17,325,270,18);

arc(x5 17,y5-17,0,360,10);

line(x5 26,y5-5,x5 26,y5-28);

line(x5 26,y5-5,x5 32,y5-5);

}
//функція, яка рисує літеру «N» за заданими координатами

void S_N(int x6,int y6) {

setcolor(8);

setfillstyle(1,8);

setlinestyle(0,1,3);

line(x6,y6,x6,y6-35);

line(x6 20,y6,x6 20,y6-30);

arc(x6 11,y6-25,0,180,10);

fillellipse(x6 25,y6 2,5,3);

}
//функція, яка рисує літеру «S» за заданими координатами

void S_S(int x7,int y7)

{

setcolor(8);



setfillstyle(1,8);

setlinestyle(0,1,3);

line(x7 10,y7-40,x7 10,y7 20);

arc(x7 10,y7-30,270,90,10);

arc(x7 10,y7-5,90,270,15);

arc(x7 10,y7,270,130,10);

arc(x7 3,y7 20,180,360,7);

}
2.4 Контрольні запитання


1. Яку бібліотеку необхідно підключити для роботи в графічному режимі?

2. Які функції використовуються для рисування найпростіших геометричних фігур?

3. Яким чином здійснюється заливання деякої області певним кольором?

4. За допомогою якої команди ми можемо змінювати стиль заливання?

5. Які параметри має функція arc?

6. Для чого використовується функція pieslice?

7. За допомогою яких функцій ми створюємо рухоме зображення?

8. Як здійснюється

1   2   3   4   5   6   7   8   9   10   11



  • дуги з’єднання двох навушників
  • сектори // кола – ноги (4)