Анімація спрайтами
Сутність комп'ютерної анімації і спрайтів. Створення програмного засобу, що ілюструє рух об’єктів по екрану, створених різноманітними способами. Особливості руху об’єктів - спрайтів, реалізованих у вигляді bmp-файлів, а також створених програмним шляхом.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 27.12.2011 |
Размер файла | 165,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
17
40
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра автоматизованих систем управління
Курсова робота
з дисципліни
Програмування текстових та графічних зображень
на тему
Анімація спрайтами
Виконав:
Війтович Л.Р.
Львів - 2005
Зміст
анімація спрайт програмний комп'ютерний
Вступ
1. Огляд літератури
2. Формулювання задачі
3. Алгоритм розв'язання задачі
3.1 Загальний опис алгоритму
3.2 Блок-схема алгоритму програми анімації спрайтами
3.3 Блок-схема алгоритму руху спрайтів геометричних фігур
3.4 Блок-схема алгоритму руху спрайтів реалізованих в *.bmp
4. Програмна реалізація алгоритму
4.1 Загальна характеристика і призначення програми
4.2 Вхідна та вихідна інформація, таблиця ідентифікаторів
4.3 Структура програми, опис функцій
4.3.1 Структура програм
4.3.2 Опис функцій
4.3.3 Програмна реалізація інтерфейса користувача
5. Інструкція користувача
Список літератури
Додатки
Додаток 1. Тексти програмних файлів
ВСТУП
Протягом усієї історії людство створювало прилади й механізми, що допомагають у житті. Винайдення комп'ютера і його повсюдне входження в усі галузі людської діяльності докорінно змінило людську працю і стало справжньою революцією в розвитку суспільства. За допомогою комп'ютера вирішуються задачи техніки і науки, бізнесу, медицини й освіти, журналістики, мультимедіа, побуту і дозвілля, загального застосування.
Метою цієї курсової роботи є спроба створити програмний засіб, який ілюструє рух об'єктів по екрану, створених різноманітними способами. А саме це є рух об'єктів (спрайтів, реалізованих у вигляді bmp-файлів), а також створених програмним шляхом.
1. ОГЛЯД ЛІТЕРАТУРИ
Найбільш якісна комп'ютерна анімація зустрічається в ігрових телеприставках і спеціальних ігрових комп'ютерах. Це пояснюється тим, що в них є безліч апаратних засобів, призначених винятково для виводу спрайтів, прокручування фону і подібних операцій. Коли-небудь аналогічні функції з'являться й у комп'ютерних відеокартах загального призначення, поки ж ми обмежені тим, що маємо, і змушені робити все програмними методами.
Переважна більшість дисплеїв PC зберігає виведені на екран дані в спеціальній області пам'яті -- відеобуфері (відеопам'яті), і для того, щоб змінити картинку на екрані, програма повинна змінити вміст цієї області.
Програмісти, що пишуть програми для DOS, відмінно знають, що максимальної продуктивності можна досягти тільки в тому випадку, якщо звертатися до цієї пам'яті прямо. Замість того, щоб виводити зображення на екран стандартними засобами BIOS і операційної системи, вони одержують вказівник на область відеопам'яті і прямо копіюють у неї необхідні дані. Такий підхід гарантує швидкість і якість анімації, що є в більшості відеоігор, що працюють у середовищі DOS. Користуючись нічим не обмеженим доступом до відеопам'яті, DOS-програма може виконувати анімацію спрайтів з максимально можливою ефективністю.
Слово "sprite", дослівно переводитися як "двомірне зображення на екрані". Спрайти - двомірні файли анімації. Можуть являти собою як невеликий мульт з декількох кадрів, так і один статичний кадр.
Для розробки анімованих спрайтів можна використовувати функції графічної бібліотеки. Для навчальних цілей або створення статичної графіки це, можливо, і непоганий варіант, але от для анімованої він явно не підходить. Для анімації 16-кольорові режими не занадто підходять, тому що вимагають досить складної структури відеопам'яті, а також постійного звертання до регістрів відеоадаптера, що значно сповільнює роботу. Для роботи приймемо режим 256 кольорів і роздільчу здатність 320x200 точок. Цей стандартний відеорежим -- найпростіший з погляду організації відеопам'яті. У даному випадку вона являє собою великий байтовий масив розміром 320x200 точок, де кожен байт відповідає визначеній точці. Таким чином, точка з координатами (x, y) знаходиться у відеопам'яті зі зсувом x + 320y. Для зручності опишемо екран як двовимірний масив, будь-який байт якого може приймати 256 різних значень, так що на екрані одночасно може з'являтися до 256 кольорів, причому всякому значенню байта відповідає свій колір, обумовлений регістрами палітри. Виходить, записуючи байт у встановлене місце відеопам'яті, «запалюємо» крапку.
Зустрічаються і такі тексти програм, де малюнки спрайтів вводяться в масив числових констант прямо з клавіатури. Один курсор миші створити так, звичайно, можна, а от спрайт розміром, скажемо, 128x128 крапок -- досить проблематично. Таким чином, для виготовлення спрайтів варто користуватися не текстовим, а графічним редактором. Найпростіше -- вивчити формат BMP-файлів і «читати» спрайти з них. Перед тим як виводити спрайт, треба зберегти зображення, що знаходиться під ним, щоб фон не зіпсувався, коли спрайт «піде». Тому зчитаємо інформацію з того місця екрана, куди буде поміщений спрайт. Безпосередньо перед виводом спрайта відновимо зображення, а потім знову збережемо фон з нового місця, куди буде поміщений спрайт.
Відеопам'ять -- пам'ять, аналогічна оперативної, але тільки встановлена у відеоконтролері. У неї записується зображення, що є на моніторі. Доступ до даної пам'яті вимагає набагато більшого часу, ніж до ОЗУ. Є кілька режимів роботи відеоконтролера, що розрізняються способом відображення на екран вмісту відеопам'яті. Вони, у свою чергу, підрозділяються на текстові і графічні. При текстових екран розбивається на знакомісця (звичайно розміром 9x16 крапок), а у відеопам'ять вписуються коди символів. По коду відеоконтролер бере і виводить на екран готову «картинку» символу. Намалювати довільне зображення в текстовому режимі не можна, і тому приходиться задовольнятися лише заздалегідь визначеним набором символів. При графічних режимах можна керувати кожною крапкою екрана, але для цього потрібно набагато більший обсяг відеопам'яті, та й робота займе багато часу.
Графічні режими можуть розрізнятися роздільчою здатністю (320x200, 640x480, 800x600 крапок і ін.) і числом кольорів (2, 4, 16, 256, 65 тис., 16 млн.).
Спрайт (sprite) -- невелике зображення, що вільно переміщається по моніторі. У первісному змісті слова цей термін застосовувався тільки для апаратно виведених зображень. Власне, лише один дійсний спрайт можна зустріти на IBM PC -- апаратний курсор миші. При архітектурі х86 під спрайтом прийняте розуміти програмно виведене зображення, що може мати складну форму і пересуватися поверх тла, не затираючи його.
VideoBIOS. BIOS -- базова система введення-виводу, що забезпечує проведення елементарних операцій по обслуговуванню периферії ПК: дискових нагромаджувачів, клавіатури, монітора й ін. Вона являє собою мікросхему ПЗУ, що знаходиться на системній платі комп'ютера. VideoBIOS -- розташована на відеоконтролері частина BIOS, що виконує базові функції по роботі з монітором.
Зображення спрайта отримано з Bmp-файлу, з таких же файлів можна брати зображення фону, курсору миші й елементів інтерфейсу. За рішенням розробників формату Bmp-файлу не прив'язаний до конкретної апаратної платформи. Цей файл складається з чотирьох частин: заголовка, інформаційного заголовка, таблиці кольорів (палітри) і власне зображення. Якщо у файлі зберігається зображення з глибиною кольору 24 біти (16 млн. кольорів), то таблиця кольорів може не бути, однак у 256-кольоровому випадку вона є. Заголовок файлу починається із сигнатури «BM», а потім йде довжина файлу, виражена в байтах. Наступні 4 байти зарезервовані для подальших розширень формату, а закінчується цей заголовок зсувом від початку файлу до записаних у ньому дані зображення. При 256 кольорах цей зсув складає 1078. Інформаційний заголовок починається з власної довжини (вона може змінюватися, але для 256-кольорового файлу складає 40 байт) і містить розміри зображення, роздільчу здатність, характеристики представлення кольору й інших параметрів.Ширина і висота зображення задаються в точках растра. Кількість площин могло застосовуватися у файлах, що мають невелику глибину кольору. При числі кольорів 256 і більше воно завжди дорівнює 1, тому зараз це поле вже можна вважати застарілої, але для сумісності воно зберігається. Глибина кольору вважається найважливішою характеристикою способу представлення кольору у файлі і виміряється в бітах на точку. У даному випадку вона дорівнює 8. У Bmp-файлах звичайно не використовується компресія, але поле в заголовку для неї передбачено. Звичайно вона дорівнює 0, і це означає, що зображення не стиснуте. Розмір зображення -- кількість байт пам'яті, що вимагаються для збереження цього зображення, не вважаючи даної палітри. Число кольорів дозволяє скоротити розмір таблиці палітри, якщо в зображенні реально присутнє менше кольорів, ніж це допускає обрана глибина кольору. Однак на практиці такі файли майже не зустрічаються. Якщо число кольорів приймає значення, максимально припустиме глибиною кольору, наприклад 256 кольорів при 8 бітах, поля обнуляють. Число основних кольорів -- йде з початку палітри, і його бажано виводити без перекручувань. Дане поле буває важливо тоді, коли максимальне число кольорів дисплея було менше, ніж у палітрі Bmp-файлу. При розробці формату, мабуть, приймалося, що найбільше що часто зустрічаються кольори будуть розташовуватися на початку таблиці. Зараз цієї вимоги практично не дотримують, тобто кольори не упорядковуються по частоті, з яким вони зустрічаються у файлі. Це дуже важливо, оскільки палітри двох різних файлів, навіть складених з тих самих квітів, містили б їхній (кольору) у різному порядку, що могло істотно ускладнити одночасний вивід таких зображень на екран.За інформаційним заголовком іде таблиця кольорів, що представляє собою масив з 256 (по числу кольорів) 4-байтових полів. Кожне поле відповідає своєму кольорові в палітрі, а три байти з чотирьох -- компонентам синьої, зеленої і червоної складових для цього кольору. Останній, самий старший байт кожного зарезервований і дорівнює 0. Після таблиці кольорів знаходяться дані зображення, що по рядках растра записано знизу нагору, а усередині рядка -- ліворуч праворуч. Тому що на деяких платформах неможливо вважати одиницю даних, що менше 4 байт, довжина кожного рядка вирівняна на границю в 4 байти, тобто при довжині рядка, некратної чотирьом, вона доповнюється нулями. Це обставина обов'язкова треба враховувати при зчитуванні файлу, хоча, можливо, краще заздалегідь подбати, щоб горизонтальні розміри всіх зображень були кратні 4. Формат файлу був розроблений універсальним для різних платформ, тому немає нічого дивного в тім, що кольори палітри зберігаються в ньому інакше, ніж прийнято для VGA. Під час виконання процедури читання виробляється необхідне перекодування.
Структура Bmp-файлу
Ім'я |
Довжина |
Зсув |
Опис |
|
Заголовок файлу (BitMapFileHeader) |
||||
Type |
2 |
0 |
Сигнатура "BM" |
|
Size |
4 |
2 |
Розмір файлу |
|
Reserved 1 |
2 |
6 |
Зарезервовано |
|
Reserved 2 |
2 |
8 |
Зарезервовано |
|
OffsetBits |
4 |
10 |
Зсув зображення від початку файлу |
|
Інформаційний заголовок (BitMapInfoHeader) |
||||
Size |
4 |
14 |
Довжина заголовка |
|
Width |
4 |
18 |
Ширина зображення, точки |
|
Height |
4 |
22 |
Висота зображення, точки |
|
Planes |
2 |
26 |
Число площин |
|
BitCount |
2 |
28 |
Глибина кольору, біт на точку |
|
Compression |
4 |
30 |
Тип компресії (0 - нестиснуте зображення) |
|
SizeImage |
4 |
34 |
Розмір зображення, байт |
|
XpelsPerMeter |
4 |
38 |
Горизонтальна роздільча здатність, точок на метр |
|
YpelsPerMeter |
4 |
42 |
Вертикальна роздільча здатність, точок на метр |
|
ColorsUsed |
4 |
46 |
Число використовуваних кольорів (0 - максимально можливе для даної глибини кольору) |
|
ColorsImportant |
4 |
50 |
Число основних кольорів |
|
Таблиця кольорів (палітра) (ColorTable) |
||||
ColorTable |
1024 |
54 |
256 елементів по 4 байти |
|
Дані зображення (BitMap Array) |
||||
Image |
Size |
1078 |
Зображення, записане по рядках ліворуч праворуч і знизу нагору |
Останній стандарт відеоадаптера VGA істотно розширив діапазон припустимих кольорів. Тепер на будь-який номер кольору виділяється по трьох шестиразрядных регістра, по одному на колірну складову. Кожен компонент міг виводитися в 64 градаціях яскравості, а загальне число відображуваних кольорів досягло 262 144. Формат масиву, придатного для занесення складові кольори в регістри палітри VGA, істотно відрізняється від формату палітри Bmp-файлу. По-перше, тим, що порядок кольорів у цьому масиві інший: червоний, зелений, синій. По-друге, у нього немає резервного байта, так що довжина масиву складає всего 768 байт, у той час як у файлі Bmp було 1024 байт. По-третє, у регістрах використовуються тільки молодші шість розрядів, що відповідають старшим шести розрядам у байті палітри BMP. Тому байти, лічені з Bmp-файлу перед тим, як вони будуть поміщені в регістри палітри, треба зрушити на два розряди вправо. Це відповідає розподілові на чотири, що і потрібно для того, щоб увести діапазон значень 0--255 у діапазон 0--63.
У відеопам'яті знаходяться номери кольорів -- на точку приходиться по одному байті. Відеоадаптер читає байт із відеопам'яті і вибирає відповідному його номерові трійку регістрів палітри, а потім вміст цих регістрів через цифро-аналоговий перетворювач керує інтенсивністю червоного, зеленого і синього променів кінескопа.
При роботі в 256-кольоровому режимі потрібно пам'ятати, що всі малюнки, виведені на екран одночасно, повинні мати однакову палітру. Але тут зустрічаються виключення, які можна використовувати, наприклад, у грі. Для персонажів і основних елементів інтерфейсу вибирається одна частина палітри, для тла або ландшафту -- інша. Тоді протягом усієї гри палітра може змінюватися. У будь-якому випадку потрібні процедури, що дозволяють варіювати як цілком палітру, так і окремі її частини.
Якщо виводити на екран одночасно кілька спрайтів і домогтися при цьому швидкої і коректної роботи, однак якщо спрайти не будуть змінюватися в часі, то це не буде анімація. Так, у фігурок при переміщенні повинні рухатися хоча б ноги, у дерев -- ворушитися листя і т.п. Власне, у даному випадку під анімацією і розуміється «пожвавлення».
Щоб вдихнути життя в спрайти, потрібно підготувати для них нові файли з малюнками, причому містити вони повинні цілий ряд зображень -- набір кадрів, або фаз анімації. У найпростішому випадку досить чотирьох фаз, «які прокручуються » у циклі. Наприклад, при ходьбі можна виділити чотири фази на два кроки:
· ліва нога стоїть на землі, права піднята і зігнута в коліні;
· ліва нога залишилася позаду, права пішла вперед;
· права нога стоїть на землі, ліва піднята і зігнута в коліні;
· права нога залишилася позаду, ліва пішла вперед.
Окремі фази анімації можна помістити в різні файли, хоча це не зовсім правильно -- файлів вийде занадто багато. Для кожного персонажа або об'єкта краще зібрати зображення в один файл. Якщо розташувати їхній вертикально друг під другом, як кадри на кіноплівці, то буде зручніше зчитувати файли. Коли ж кадри розміщені горизонтально ліворуч праворуч або у виді матриці Мі, при читанні файлу прийдеться перекомпоновувати рядка, щоб вони правильно лягли в масиви.
Щоб надати спрайту необхідний обсяг пам'яті, а також запам'ятати потрібну фазу анімації, варто внести зміни в процедури створення, відображення і знищення спрайта. Номер останньої фази доцільно обчислювати одночасно з визначенням положення спрайта.
2. ФОРМУЛЮВАННЯ ЗАДАЧІ
Розробка програми з анімованими спрайтами, реалізованими у вигляді bmp-файлів, а також різних геометричних фігур.
3. АЛГОРИТМ РОЗВ'ЯЗАННЯ ЗАДАЧІ
анімація спрайт програмний комп'ютерний
3.1 Загальний опис алгоритму
Створена програма анімації спрайтами реалізує рух по екрану об'єктів- спрайтів, які створені за у вигляді bmp-файлів, а також спрайтів- геометричних фігур.
3.2 Блок-схема алгоритму програми анімації спрайтами
Блок-схема алгоритму програми анімації спрайтами наведена на рисунку 1.
Алгоритм складається з етапів:
- на екран виводиться меню, з якого можна обирати режим перегляду анімованих спрайтів;
- вибір режиму здійснюється натисканням на клавіатурі клавіш;
- якщо натиснута клавіша 1, то обрано спрайт- Circle;
- якщо натиснута клавіша 2, то обрано спрайт- Cube;
- якщо натиснута клавіша 3, то обрано спрайт- Nlo;
- якщо натиснута клавіша 4, то обрано спрайт- Lisa;
Рис. 1. Блок-схема алгоритму програми анімації спрайтами
3.3 Алгоритм руху спрайтів - геометричних фігур(коло, куб)
Блок-схема алгоритму руху спрайтів -геометричних фігур(коло, еліпс, куб)
У режимі руху спрайтів - геометричних фігур виконуються наступні дії:
- програмним шляхом створюється зображення спрайту;
- формування графічного інтерфейса користувача;
- реалізуюється рух спрайту по ерані з уразхуванням напрмку руху- натискування клавіш переміщення курсора;
- здійснюється контроль за рухом спрайту- вихід з межі екрану;
Блок-схема алгоритму руху спрайтів- геметричних фігур наведена на рисунку 2.
3.4.Блок-схема алгоритму руху спрайтів реалізованих у bmp-форматі
Рис.3 Блок-схема алгоритму руху спрайтів реалізованих у bmp-форматі.
4.ПРОГРАМНА РЕАЛІЗАЦІЯ АЛГОРИТМУ
4.1 Загальна характеристика і призначення програми
Анімація спрайтів реалізованих у bmp-форматі, а також у вигляді геометричних фігур.
4.2 Вхідна та вихідна інформація, таблиця ідентифікаторів
graph_driver- графічний драйвер,
graph_mode- графічний режим ,
graph_error_code- код помилки ініціалізації графічного режиму;
x,y- початкові координати виводу спрайта;
dx,dy- крок зміщення,
pl- вказівник на розміщення спрайта в відеопам'яті;
4.3 Структура програм, опис функцій
4.3.1 Структура програм
Програма анімації спрайтами складається з таких модулів:
- виконавчий модуль nov.exe;
- заголовочні файли run.cpp, cub.cpp, kolo.cpp, fnlo.cpp;
- відео драйвер Egavga.bgi, svga256.bgi;
- графічні файли fon.bmp, lisa1.bmp, lisa2.bmp, lisa3.bmp, lisa4.bmp;
4.3.2 Опис функцій
Програма складається з 3 заголовочних файлів котрі підключаються до головної програми, котра здійснює керування.У заголовочних файлах реалізовані такі функції:
void fNLO (int fx,int fy)- в графічному режимі здійснює переміщення спрайта -геометричної фігури(еліпса) по екрану:
void Kolo(void) - в графічному режимі здійснює переміщення спрайта -геометричної фігури(кола) по екрану:
void KYB (int fx,int fy)- в графічному режимі здійснює переміщення спрайта -геометричної фігури(куба) по екрану:
void Run( )-в графічному режимі здійснює переміщення спрайта htfkspjdfyjuj e bmp-форматі по екрану:
Програма написана на мові програмування С .
Середовище разробки Borland C++ Version 3.01.
Середа виконання - DOS.
4.3.3 Програмна реалізація інтерфейса користувача
Інтерфейс користувача має вигляд, наведений на рисунку 4.
Інтерфейс реалізовано програмноу графічному режимі за допомогою функційзаголовочного файлуgraphics.h.
Рис.4. Інтерфейс користувача
5. ІНСТРУКЦІЯ КОРИСТУВАЧА
1.Помістити в окрему папку файли:
- виконавчий модуль nov.exe;
- заголовочні файли run.cpp, cub.cpp, kolo.cpp, fnlo.cpp;
- відео драйвер Egavga.bgi, svga256.bgi;
- графічні файли fon.bmp, lisa1.bmp, lisa2.bmp, lisa3.bmp, lisa4.bmp;
2.Запустити на виконання файл nov.exe.
3.Ввести координати початку виводу спрайтів.
4.Рухаючись клавішами курсора вверх-вниз вибрати спрайт, рух якого потрібно переглянути.
Вихід з програми здійснюється клавішею Esc.
СПИСОК ЛІТЕРАТУРИ
1. Основы спрайтовой анимации Мир ПК, #07/2001.
2. Прата С. Язык программирования С.-К.: Диасофт, 2000/2002.
3. Програмування графічних зображень засобами мов Турбо С/C++: Методичні вказівки з курсу “Проблемно-орієнтовані мови програмування” / Укл.З.Я. Шпак. - Львів: Вид-во Держ. ун-ту “Львівська політехніка”. 2000.
4. Проблемно-орієнтовані мови програмування: Методичні вказівки до курсової роботи для студентів базового напряму 0804 “Комп'ютерні науки” / Укл.З.Я. Шпак. - Львів: Вид-во Держ. ун-ту “Львівська політехніка”. 2004.
5. ЕСПД ГОСТ 19.701-90 (ИСО 5807-85) - Схемы алгоритмов, программ, данных и систем.
ДОДАТКИ
Додаток 1
Тексти програмних файлів
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
#include<stdio.h>
#include"C:\Tc\BIN\Kolo.cpp"
#include"C:\Tc\BIN\fNLO.cpp"
#include"C:\Tc\BIN\KYB.cpp"
int Crd(char*);
void main (void)
{ int graph_driver,graph_mode,graph_error_code;
int mas[]={180,130,310,130,310,280,180,280};
int mas2[]={311,219,311,161,320,161,320,219};
int mas3[]={180,50,370,50,370,110,180,110};
int mas4[]={190,60,360,60,360,100,190,100};
int x[]={320,210,320,190,350,190,350,210};
int y[]={355,210,355,190,385,190,385,210};
int kol[]={200,140,280,140,280,160,200,160};
int kyb[]={200,170,280,170,280,190,200,190};
int nlo[]={200,200,280,200,280,220,200,220};
int lisa[]={200,230,280,230,280,250,200,250};
int y1,k,i,dx,pl,m,dx1,dy1,x2=20,y2=20;
char s[4];
graph_driver=DETECT;
initgraph(&graph_driver,&graph_mode,"C:\\Tc\\BGI");
setcolor(8);
setfillstyle(1,1);
fillpoly(4,mas);
fillpoly(4,mas3);
setfillstyle(1,15);
fillpoly(4,mas4);
fillpoly(4,kol);
fillpoly(4,kyb);
fillpoly(4,nlo);
fillpoly(4,lisa);
setcolor(0);
settextstyle(0,0,1);
outtextxy(205,145,"CIRCLE");
outtextxy(205,175,"CUBE");
outtextxy(205,205,"NLO");
outtextxy(205,235,"LISA");
settextstyle(0,0,1);
outtextxy(195,65,"Co-ordinates of ");
outtextxy(195,75,"beginning() or");
outtextxy(195,85,"Esc");
delay(3000);
m=getch();
setcolor(8);
setfillstyle(1,15);
fillpoly(4,mas4);
setcolor(0);
if (m==27) { outtextxy(195,65,"X - 20, Y - 20");
delay(2000);}
else
if(m==32) { outtextxy(195,65,"Put the co-ordinates");
dx=311;
setfillstyle(1,1);
for(i=0;i<8;i++){
setcolor(8);
line(dx,160,dx+10,160);
line(dx+10,160,dx+10,220);
line(dx+10,220,dx,220);
setcolor(1);
fillpoly(4,mas2);
delay(400);
dx+=10;
mas2[4]+=10;
mas2[6]+=10;
}
setcolor(8);
line(dx,160,dx,220);
setfillstyle(1,15);
fillpoly(4,x);
fillpoly(4,y);
setcolor(15);
settextstyle(0,0,2);
outtextxy(330,170,"X");
outtextxy(360,170,"Y");
setcolor(0);
settextstyle(0,0,1);
for(i=0;i<2;i++){ strcpy(s,"");
do{ m=getch();
if (m==32) break;
else switch (m){
case 48:strcat(s,"0");break;
case 49:strcat(s,"1");break;
case 50:strcat(s,"2");break;
case 51:strcat(s,"3");break;
case 52:strcat(s,"4");break;
case 53:strcat(s,"5");break;
case 54:strcat(s,"6");break;
case 55:strcat(s,"7");break;
case 56:strcat(s,"8");break;
case 57:strcat(s,"9");break;
}
} while(1);
if(i==0) { outtextxy(325,200,s);
x2=Crd(s);}
if(i==1){ outtextxy(360,200,s);
y2=Crd(s);}
if(i==1)break;
}
}
setcolor(8);
setfillstyle(1,15);
fillpoly(4,mas4);
setcolor(0);
outtextxy(195,65,"Select the figure ");
outtextxy(195,75,"and press Enter");
setfillstyle(1,4);
bar(272,150,275,155);
y1=150;
i=1;
do{
k=getch();
if(k==13) break;
m=getch();
if((m==72)&&(y1>160)) { setfillstyle(1,15);
bar(272,y1,275,y1+5);
y1-=30;
setfillstyle(1,4);
bar(272,y1,275,y1+5);
i--;
}
if((m==80)&&(y1<240)){ setfillstyle(1,15);
bar(272,y1,275,y1+5);
y1+=30;
setfillstyle(1,4);
bar(272,y1,275,y1+5);
i++;
}
}while(k!=13);
cleardevice();
if(i==3) fNLO(x2,y2);
if(i==1) Kolo();
if(i==2) KYB(x2,y2);
else { delay(1000);
closegraph();
}
}
#include<stdio.h>
int Crd (char st[4])
{ int sum=0,p=1,k;
char *p1=st;
while(*p1!='\0')p1++;
p1--;
do{ k=*p1-48;
sum+=k*p;
p=p*10;
if(p1==st)break;
p1--;
}while(1);
return sum;
}
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
void KYB (int fx,int fy)
{ int graph_driver,graph_mode,graph_error_code;
int k,m,pl,x=40,y=10,dx=20,dy=20,size,i,n;
void far*p;
int k1[]={40,30,80,30,80,70,40,70};
int k2[]={40,30,60,10,100,10,80,30};
int k3[]={80,30,100,10,100,50,80,70};
graph_driver=DETECT;
initgraph(&graph_driver,&graph_mode,"C:\\Tc\\BGI");
graph_error_code=graphresult();
if(graph_error_code!=0){
cprintf("Error in TurboC:%s\xd\xa",grapherrormsg(graph_error_code));
return ;
}
setbkcolor(8);
setcolor(15);
setfillstyle(4,11);
fillpoly(4,k1);
setfillstyle(9,10);
fillpoly(4,k2);
setfillstyle(11,6);
fillpoly(4,k3);
size=imagesize(40,10,100,70);
p=malloc(size);
if(!p) return;
x=fx;
y=fy;
getimage(40,10,100,70,p);
putimage(40,10,p,1);
do{ k=getch();
pl=0;
if(k==27) break;
putimage(x,y,p,1);
m=getch();
if((m==72)&&((y-40)>0)) { y-=dy;
putimage(x,y,p,1);pl=1;
}
if((m==77)&&((x+40)<600)) { x+=dx;
putimage(x,y,p,1);pl=1;
}
if((m==80)&&((y+40)<450)) { y+=dy;
putimage(x,y,p,1); pl=1;
}
if((m==75)&&((x-40)>0)) { x-=dx;
putimage(x,y,p,1);pl=1;
}
if(!pl)putimage(x,y,p,1);
}while(1);
putimage(x,y,p,1);
delay(100);
closegraph();
}
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
void Kolo(void)
{ int k,d,m,x=0,y=0,size,dx,dy,pl;
void far*p;
int graph_driver,graph_mode,graph_error_code;
graph_driver=DETECT;
initgraph(&graph_driver,&graph_mode,"C:\\Tc\\BGI");
graph_error_code=graphresult();
if(graph_error_code!=0){
cprintf("Error in TurboC:%s\xd\xa",grapherrormsg(graph_error_code));
return ;
}
dx=40; dy=40;
setcolor(12);
setfillstyle(1,12);
fillellipse(20,20,20,20);
size=imagesize(0,0,40,40);
p=malloc(size);
if(!p) return;
getimage(0,0,40,40,p);
do{ k=getch();
pl=0;
if(k==27) break;
putimage(x,y,p,1);
m=getch();
if((m==72)&&((y-40)>0)) { y-=dy;
putimage(x,y,p,1);pl=1;
}
if((m==77)&&((x+40)<600)) { x+=dx;
putimage(x,y,p,1);pl=1;
}
if((m==80)&&((y+40)<470)) { y+=dy;
putimage(x,y,p,1); pl=1;
}
if((m==75)&&((x-40)>0)) { x-=dx;
putimage(x,y,p,1);pl=1;
}
if(!pl)putimage(x,y,p,1);
}while(1);
putimage(x,y,p,1);
delay(100);
closegraph();
}
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#define r 20
#define pause 100
void fNLO (int fx,int fy)
{ int graph_driver,graph_mode,graph_error_code;
int d,m,e,x=15,y=15,lx,ly,rx,ry,size,i,dx,dy,k,pl;
void far*p;
graph_driver=DETECT;
initgraph(&graph_driver,&graph_mode,"C:\\Tc\\BGI");
graph_error_code=graphresult();
if(graph_error_code!=0){
cprintf("Error in TurboC:%s\xd\xa",grapherrormsg(graph_error_code));
return ;
}
x=r*5;
y=r*2;
setbkcolor(1);
ellipse(x,y,0,360,r,r/3+5);
ellipse(x,y-4,190,357,r,r/3);
setcolor(12);
line(x+7,y-6,x+10,y-12);
line(x-7,y-6,x-10,y-12);
setcolor(5);
circle(x+10,y-12,2);
circle(x-10,y-12,2);
floodfill(x+1,y+4,15);
delay(100);
lx=x-r-1;
ly=y-14;
rx=x+r+1;
ry=y+r/3+3;
size=imagesize(lx,ly,rx,ry+2);
p=malloc(size);
if(!p) return;
randomize();
getimage(lx,ly,rx,ry+2,p);
putimage(lx,ly,p,1);
for(k=1,i=0;i<200;k++,i++) { if(k==16)k=1;
setcolor(k);
putpixel(random(640),random(480),14);
}
x=fx;
y=fy;
putimage(x,y,p,1);
dx=10;
dy=10;
pl=0;
do{ k=getch();
if(!pl)putimage(x,y,p,1);
if(k==27) break;
if(pl==1)
putimage(x,y,p,1);
if(pl==2){ putimage(x,y,p,1);
pl=0; }
m=getch();
if((m==72)&&((y-60)>0)) do { putimage(x,y,p,1);pl=1;
delay(pause);
putimage(x,y,p,1);
y-=dy;
if(y<=5){ putimage(x,y,p,1);
pl++;
break;}
}while(!kbhit());
if((m==77)&&((x+60)<600)) do { putimage(x,y,p,1);pl=1;
delay(pause);
putimage(x,y,p,1);
x+=dx;
if(x>=580){ putimage(x,y,p,1); pl++;
break;}
}while(!kbhit());
if((m==80)&&((y+60)<460)) do{ putimage(x,y,p,1); pl=1;
delay(pause);
putimage(x,y,p,1);
y+=dy;
if(y>=440){ putimage(x,y,p,1); pl++;
break;}
}while(!kbhit());
if((m==75)&&((x-60)>0)) do { putimage(x,y,p,1);pl=1;
delay(pause);
putimage(x,y,p,1);
x-=dx;
if(x<=5){ putimage(x,y,p,1);pl++;
break;
}
}while(!kbhit());
if(pl==1)putimage(x,y,p,1);
}while(1);
putimage(x,y,p,1);
closegraph();
}
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct FileHead {
char Typf[2]; //Tup faula "BM" -bmp fail
long int Size; //Rozmir faily
short int Res1;
short int Res2;
long int Ofbm; //Zmiwchenja malunka vid pochatky faily
}fh;
struct FileInfo {
long int Sizehead; //Rozmir zaholovka faila
long int Width; //Wuruna malunka v pikseljah
long int Height; //Vusota malunka v pikseljah
short int Planes;
short int Bitpixel; //Chuslo bit na pixel
long int Comp; //Tup kompresii
long int Sizeimage; //Rozmir malunka v bautah
long int Xpels;
long int Ypels;
long int Colors; //Chuslo koloriv
long int Colorsimp; //Chuslo osnovnuh koloriv
}fi;
struct Pallet {
char pal[1024];
}fpal,fpal2;
int Initgr(int bit)
{
int gdriver, gmode, errorcode;
gmode=0;
gdriver=installuserdriver("SVGA256",NULL);
initgraph(&gdriver, &gmode,"") ;
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
return 1;
}
return 0;
}
int Ostacha(int i,int bit)
{
if (bit==8)
switch (i%4) {
case 0: return (fi.Width*fi.Height==fi.Sizeimage)?0:4;
default: return (4-i%4);
}
if (bit==4)
switch (i%8) {
case 0: return (fi.Width*fi.Height/2==fi.Sizeimage)?0:4;
default: return (8-i%8);
}
if (bit==1)
switch (i%32) {
case 0: return (fi.Width*fi.Height/8==fi.Sizeimage)?0:4;
default: return (32-i%32);
}
return 0;
}
int Ifbmp256(char *st)
{
FILE *fp;
fp=fopen(st,"r");
fread(&fh,sizeof(fh),1,fp);
fread(&fi,sizeof(fi),1,fp);
fclose(fp);
if ((fi.Comp==0)&&(fi.Bitpixel==8)&&(fh.Typf[0]=='B')&&(fh.Typf[1]=='M')) return 1;
return 0;
}
int Bmpwidth(char *st)
{
long int w;
FILE *fp;
fp=fopen(st,"r");
fseek(fp,18,SEEK_SET);
fread(&w,4,1,fp);
fclose(fp);
return w;
}
int Bmpheight(char *st)
{
long int w;
FILE *fp;
fp=fopen(st,"r");
fseek(fp,22,SEEK_SET);
fread(&w,4,1,fp);
fclose(fp);
return w;
}
int Loadbmp256(int x, int y, char *st, char flag)
{
unsigned int size;
long dx;
int i,j,r,g,b;
char kolir;
FILE *fp;
if (getmaxcolor()!=255) {
closegraph();
Initgr(8);
}
fp=fopen(st,"r");
fread(&fh,sizeof(fh),1,fp);
fread(&fi,sizeof(fi),1,fp);
if (!((fi.Bitpixel==8)&&(fh.Typf[0]=='B')&&(fh.Typf[1]=='M'))) {
fclose(fp);
setrgbpalette(4,255,0,0);
setcolor(4);
settextstyle(0,0,3);
outtextxy(100,380,"ERROR: This is not bmp 256 colors.");
outtextxy(100,380,"ERROR: This is not bmp 256 colors.");
return 1;
}
fread(&fpal,1024,1,fp);
if (flag)
for (i=0;i<1023;i+=4) {
r=(fpal.pal[i+2]>>2)&0xff;
g=(fpal.pal[i+1]>>2)&0xff;
b=(fpal.pal[i+0]>>2)&0xff;
setrgbpalette(i/4,r,g,b);
}
for (i=0;i<1023;i+=4) {
r=(fpal.pal[i+2]>>2)&0xff;
g=(fpal.pal[i+1]>>2)&0xff;
b=(fpal.pal[i+0]>>2)&0xff;
setrgbpalette(i/4,r,g,b);
}
for (i=fi.Height+y-1;i>=y;i--)
{
for (j=x;j<=fi.Width+x+Ostacha(fi.Width,8)-1;j++) {
fread(&kolir,1,1,fp);
if (j<fi.Width+x)
putpixel(j-1,i-1,kolir);
}
}
fclose(fp);
return 0;
}
int Loadbmp(int x, int y, char *st, char flag)
{
if (Ifbmp256(st)) {
Loadbmp256(x,y,st,flag);
return 0;
}
setrgbpalette(4,255,0,0);
setcolor(4);
settextstyle(0,0,3);
outtextxy(100,380,"ERROR: This is not suported bmp.");
outtextxy(100,380,"ERROR: This is not suported bmp.");
return 1;
}
void main(void)
{
char *s="fon.bmp";
char *s1[4]={"lisa1.bmp",
"lisa2.bmp",
"lisa3.bmp",
"lisa3.bmp"};
void *ptr, *ptrBMP[4];
int size,x,y,i,j,dx=1;
Initgr(8);
Loadbmp((getmaxx()-Bmpwidth(&s[0]))/2,(getmaxy()-Bmpheight(&s[0]))/2,s,1);
delay(1300);
x=0; dx=5;
y=145;j=0;
size=imagesize(x,y,x+51,y+51);
ptr=malloc(size);
getimage(x,y,x+51,y+51,ptr);
for(i=0;i<4;i++){
Loadbmp(x,y+1,s1[i],0);
size=imagesize(x,y,x+51,y+51);
ptrBMP[i]=malloc(size);
getimage(x,y,x+51,y+51,ptrBMP[i]);
}
for(x=0;x<320;){
for(j=0;j<4;j++){
putimage(x,y,ptr,COPY_PUT);
free(ptr);
x+=dx;
size=imagesize(x,y,x+51,y+51);
ptr=malloc(size);
getimage(x,y,x+51,y+51,ptr);
putimage(x,y,ptrBMP[j],COPY_PUT);
delay(100);
}//for
}//for
free(ptr);
for(i=0;i<4;i++)
free(ptrBMP[i]);
closegraph();
//return 0;
}
Размещено на Allbest
Подобные документы
Визначення основних математичних понять по роботі із 3D-графікою і операцій над векторами і матрицями. Алгоритм видалення невидимих ребер та граней при побудові непрозорих об'єктів за допомогою модуля Graph 3D. Методи програмування анімації і спрайтів.
курсовая работа [345,0 K], добавлен 16.09.2010Функції бібліотеки анімації. Створення 3D моделей деталей та складального механізму для трактора. Настроювання параметрів відтворення та руху. Основні кроки анімації, їх додавання й видалення, копіювання, коментарі. Робота з компонентами та їх "рухами".
отчет по практике [3,5 M], добавлен 20.07.2012Загальна характеристика мережі та мережевого обладнання, а також програмного забезпечення підприємства. Обґрунтування необхідності створення та налаштування комп’ютерної мережі, зміст відповідних заходів. Розрахунок затрат на матеріали і комплектуючі.
дипломная работа [2,4 M], добавлен 21.06.2014Основні поняття комп’ютерної графіки. Загальна характеристика програми CorelDRAW: інтерфейс, панель інструментів, контекстне та системне меню Windows. Створення векторних об'єктів. Основи роботи з текстом. Аспекти редагування зображень та форми об'єктів.
дипломная работа [1,2 M], добавлен 12.01.2011Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.
контрольная работа [2,3 M], добавлен 10.09.2009Програми векторної графіки: Corel Draw 8-9, Adobe Illustrator 6, Micrografx Designer 7, Macromedia FreeHand 7, Fractal Design Expression. Формати файлів комп'ютерної графіки. Основний принцип побудови графічних об'єктів. Векторна графіка в Інтернеті.
курсовая работа [62,4 K], добавлен 19.04.2013Нові методи та спеціалізовані обчислювальні пристрої зменшення обсягів даних тріангуляційного опису об’єктів комп’ютерної томографії. Розвиток методу розбиття тріангуляційних сіток на окремі елементи. VHDL-модель спеціалізованого апаратного прискорювача.
автореферат [135,2 K], добавлен 13.04.2009Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.
лабораторная работа [451,0 K], добавлен 25.01.2014Поняття та класифікація комп’ютерних ігор. Відтворення гри "Морський бій" у вигляді комп’ютерної програми. Компоненти програмного середовища Delphi, що були використані під час її створення. Алгоритм реалізації ігрового процесу та скріншоти з програми.
дипломная работа [418,2 K], добавлен 12.07.2013Розробка сайту інтернет-магазину комп’ютерної техніки. Структура об’єктів і зв’язків предметної області: головна, таблиці менеджерів, складу, інформація про товар, сторінки користувачів, покупців. Створення резервної копії бази даних, рhp програма.
курсовая работа [3,4 M], добавлен 06.08.2013