"ГРА - вид непродуктивної діяльності, мотив якої полягає не в її результатах, а в самому процесі. В історії людського суспільства перепліталася з магією, культовим поведінкою та ін ... Властива також вищим тваринам". p> < p> Радянський енциклопедичний словник p>
ВСТУП p>
Всі, хто має справу з комп'ютером, так чи інакше стикалися зкомп'ютерними іграми, і переважна більшість може сходу назватикілька ігор, які їм особливо сподобалися. Ті, хто вже зовсімнагрався, майже награвся або ще не награвся, але в процесі спілкування зкомп'ютером вже почав поєднувати ігри з чим-небудь більш корисним, можливо,хотіли б придумати якісь свої, не схожі ні на які інші ігри
(1). P>
Багато що захоплює в такому творчості. І не сам процес гри, арозробка ігровий всесвіту, її проектування та реалізація. Коли можназлити воєдино сценарій, графіку, музику, майстерно задуманий і вмілозапрограмований алгоритм - створити єдиний фантастичний світ, що живеза законами, які ти ж для нього і придумав. p>
У цій роботі мова піде про створення нескладної ігровийпрограми «Морський бій», що і буде об'єктом дослідження. p>
У першому розділі даної курсової роботи розглядаються аспектипрограмування ігор з використанням візуальних компонентів, у пункті 1.1.наводиться аналітичний огляд ігрового програмного забезпечення,класифікація ігор. У пункті 1.2. наводиться опис компонентів,що використовуються при реалізації практичної частини курсової роботи. У пункті
1.3. показуються можливості використання візуальних компонентів. p>
У другому розділі наведені етапи розробки програми, такі якпостановка задачі, алгоритм реалізації та опис для користувачаінтерфейсу. p>
У висновку наведені висновки по курсовій роботі, гідності танедоліки візуальних методів програмування. p>
Список використаних джерел містить повний перелік технічноїлітератури, використаної для написання даної курсової роботи. p>
Додатки містять блок-схеми всіх процедур програми, і текст самоїпрограми. p>
1. ПРОГРАМУВАННЯ ІГОР З ВИКОРИСТАННЯМ Візуальні компоненти p>
1. Аналітичний огляд p>
Останнім часом продажу програмного забезпечення збільшуютьсянезначно, в той час як продажі ігрових програм зростаютьекспоненціально. Ігри для платформи Windows складають переважнубільшість. Ігрове програмне забезпечення - це третя за розмірамидоходів галузь індустрії програмного забезпечення після текстовихпроцесорів та електронних таблиць (1). p>
До недавнього часу середу Windows використовувалася в основному якплатформа для створення ігор, спочатку розроблених для Macintosh. Цездійснювалося на базі пакету QuickTime фірми Apple. Прикладами таких ігорможуть бути Mysl (Broderbund/Cyan), Wrath of the Gods (Maxis/Luminaria) ідеякі інші. У ряді випадків використовувався пакет Video for Windows,що дозволяє відображати оцифроване відео. Потім з'явилися бібліотеки WinGі WinToon, на базі яких фірма Sierra створила гру King's Quest VII. Цебули перші спроби використовувати Windows як платформу для створення ігровихпрограм. Переваги такого підходу досить очевидні - єдинийінтерфейс, наявність стандартних драйверів для більшості мультимедійнихпристроїв і можливість управління ними стандартними способами. Потімз'явилася нова версія - Windows 95, до складу якої було включенобібліотека WinG (як підсистема GDI), і перед розробниками відкрилисябільш широкі можливості. p>
Вказати точне число комп'ютерних ігор дуже важко. Можна тількиприблизно оцінити кількість різних найменувань ігор, що знаходяться на ринку вбудь-який час (2). p>
Класифікація комп'ютерних ігор може бути наступна:
1. Пригодницькі ігри. Ігри можуть бути чудовим засобом розповідіісторії. Ці ігри являють собою мультіпліцірованний оповідання, в якомуможна бачити і контролювати основний персонаж (а іноді і більше одного) вдуже детальному оповіданні. Це - комп'ютерні версії звичайнихоповідань, починаючи від душевних оповідань до технотріллеров,науково-фантастичних пригод, фантазій та оповідань, до межі набитихрізними обманами і шахрайствами. Пригодницькі ігри розвиваються навколорізних загадок і перешкод, які потрібно подолати у міру розвиткурозповіді.
2. Фантастичні ігри, в яких потрібно відігравати певну роль (рольовігри). Їх краще за все визначити як комп'ютеризованих версію розповіді
Dungeons and Dragons ( «Підземелля і дракони»), але дія не завждивідбувається в населеному варварами середньовічному світі. Часто воно відбуваєтьсяу відкритому космосі або в будь-яких областях майбутнього. У цих іграх зазвичайпотрібно управляти групою персонажів, які стають у міру розвиткуігри сильніше і розумніше, і робити деякі інші речі. Так само змінюються івороги. Самі оповідання в іграх цього типу звичайно менш детальні, ніж упригодницькі ігри, з великим акцентом на завдання побити чудовгщ, ніжвирішити загадки.
3. Імітатори повітряних і космічних битв. Це не військові ігри, вяких може виявитися необмежене число озброєнь і ворогів, ці ігринамагаються бути точними імітаторами польотів і битв на реальних бойовихлітаках. Ці ігри призначені для тих, хто хоче літати на великих ідуже потужних машинах. Кабіни пілотів виглядають як справжні, інструментипрацюють як у справжньому бою, зброя є імітацією реальноіснуючого, а літальні характеристики літака (і літака ворога)відповідають дійсним. Імітатори космічних битв вигадані,однак вони розроблені з метою точно повторити реальні маневри в космосі.
4. Імітатори наземних і морських битв. Ігри розроблені для військовогообладнання і військових машин. Ця категорія ігор включає в себе симуляторисправжніх підводних човнів, кораблів і танків, і дозволяє гравцям випробуватиреальні сценарії битв, і вижити для того, щоб зрозуміти, яквикористовувати правильну тактику в наступній грі.
5. Літаки, потяги та автомобілі. На відміну від цих імітаторів, всі іншіє імітаторами військового типу або мають дуже сильний акцент набій. Ці ж гри не відносяться до таких імітатора. Звичайно, можнапроїхати на автомобілі з берегової дорозі в Каліфорнії зі швидкістю, що вдвічіперевищує дозволену, і потанцювати на всіх чотирьох колесах. Але такожможна використовувати ці ігри, щоб навчитися безпечно літати середхмар, і отримувати задоволення від свободи польоту. Навіть можна робити такіречі, як будівля і управління власною залізницею.
6. Спортивні імітатори. Тут необхідно навчати професіоналів іуправляти ними. Ці ігри - щось більше, ніж просте зображеннябейсбольних ігор в картинках, у деяких з них можна навіть контролюватиреальна дія. Спортивні імітатори дають можливість вести ризикованугру в потрібний час, довести, що можна виграти за допомогою швидкості, матив команді Генрі Аарона і Теда Вільямса, або переграти Томмі Лазорду.
7. Аркадні ігри/ігри дії. Це класичні «ігри дії» - всезалежить від того, наскільки швидко руки можуть смикати джойстик. Зазвичай про нихговорять як про безглуздих, так часто і буває. З іншого боку, буваютьчаси, коли з'явиться потреба дати відпочити мізках. До багатьох зцих ігор можна грати за допомогою клавіатури або миші, і джойстики не завждинеобхідні. У чому є необхідність, так це в швидких рефлексах.
8. Настільні ігри, солітер і салонні ігри. Багато старі улюблені ігриз'явилися в комп'ютерному варіанті. Більше не потрібно займатися пошукамипартнера, щоб пограти в шахи, бекграммон і ризик. Деякі з цихігор навіть навчать шахраювати наодинці з монітором, і при цьому не доведетьсяповертатися додому з порожньою кишенею після невдалої ночі.
9. Імітатори реальності ( «гри в бога»). Це ігри, які дозволяютьстворювати реальний світ з нічого. Це ігри, які дозволять створитикомп'ютерний світ з начерків, керувати містом, країною або навіть світом.
10. Ігри, в яких робляться гроші. Вони копіюють ігрову діяльність івчать вищим формам азартних підприємств: фондова біржа, торгівлянерухомістю. Вони також дозволять спробувати управляти корпорацією. У ціігри можна грати для задоволення, або використовувати їх для того, щобнавчитися дертися нагору по сходам кар'єри.
11. Стратегічні і військові імітатори. Тут можна приймати участь увеликих історичних подіях, взяти на себе командування німецькою армією у
Ленінграда або армією Наполеона у Ватерлоо. Це військові стратегії минулого,теперішнього або майбутнього.
12. Ігри для дітей. Якщо є домашній комп'ютер, і щоб діти навчилисяйого використовувати, то ці ігри варті уваги. Реальність нашої культуритака, що, як тільки малюки стануть координовані настільки, щобправильно користуватися клавіатурою або мишею, вони хочуть відразу взятися затакі ігри, як Wing Commander, Populous або Eye of the Beholder. Однак жнавколо існує безліч ігор, в які діти можуть грати просто щоботримати задоволення, або ж навчитися чому-небудь.
13. Ігри «On-line». Було б помилкою вважати, що всі комп'ютерні ігри для
IBM PC приходять до нас на дискетах або CD-дисках, щільно упакованих вкрасиві пакети. Фактично, весь великий світ комп'ютерних ігор доступний іпо телефону. Ця категорія ігор відома як «он-лайн» і включає в себерізноманітні ігри, які є у великих комерційних «он-лайн» мережахі в багатьох локальних мережах типу «дошка оголошень» (bulletin board system
- BBS). Для ігор «он-лайн», крім особистого комп'ютера, необхідні модем ікредитна картка.
14. Ігри Shareware. Буде помилкою припустити, що всі комп'ютерні ігриприходять в красивих упаковках. Багато хороших ігор приходять зовсім безупаковок, і коштують від 10 до 30 доларів. Звичайно можна їх випробувати за дуженизьку плату або зовсім безкоштовно протягом декількох днів і, якщозахочеться отримати легальну копію, необхідно надіслати поштою чек компаніїабо особі, які створили гру.
15. Класичні гри. Світ PC-ігор багато в чому схожий на світ популярної музикиі фільмів: створюється багато ігор різних найменувань, деякі стаютьхітами і тримають популярність протягом деякого часу, іншіпропадають. Поступово ці хіти стає важко відшукати, і мало-помалувони замінюються іншими кращими іграми. Дуже мало PC-ігор живуть більше 2-3років. З тих, що дійсно залишаються, багато хто настільки гарні, щостають вічними, і вони заслуговують на те, щоб у них грали. Деякі,як Flight Simulator або King's Quest, оновлюються час від часу, такщо їх можна розглядати як практично нові ігри. Решта залишаютьсянезмінними, і рівень продажів у них такий, що вони залишаються в обігу, алевже не рекламуються активно їх виробниками. Це ігри, які некидаються в очі, «золоті» гри - класичні PC-гри. p>
Комп'ютерні ігри - аж ніяк не новий винахід. Їхня історія почаласяне з кінця 1970 років. Початок лежить набагато раніше, тоді, коли Джон
Кеннеді вже пробув президентом Сполучених Штатів усього кілька місяців
(2). P>
Насправді все почалося з моделі залізниці. Студенти
Технологічного інституту в Массачусетсі були дуже здивовані кількістюспособів, за допомогою яких можна було розмістити органи управліннямініатюрної залізницею. Пізніше, коли вони нарешті отрималиможливість працювати на великих комп'ютерах інституту, їх робота в бінарнихобчисленнях - адже саме такі обчислення імітуються вимикачамизалізниці - дозволили їм пройти хорошу підготовку в комп'ютерномусправі. p>
Стів Рассел був одним з членів Клубу Моделей Залізниць Високої
Технології в Технологічному інституті. Будучи хорошим програмістом, вінвлітку 1961 працював в Статистичної лабораторії, коли у нього і йогодрузів з'явилася ідея перенести «мильні» науково-фантастичні розповіді
Е. Е. Сміта на комп'ютери. У 1962 році Стів розробив програму для PDP-1.
Ця сама машина тепер виставлена в комп'ютерному музеї Бостона в
Массачусетському Технологічному інституті. P>
У "Космічної Війні», як називалася ця програма, двасинтезованих комп'ютером ракетних космічних корабля (один схожий натовсту сигару, а інший на довгу обтічну трубу) могли літати поекрану, на якому містилося зображення космосу. Гравці могли натискати накнопки, щоб змусити ракети змінювати напрямок руху майже так само,як пізніше в грі Asteroids власники гральних машин Atari управляли своїмикораблями. Кожна ракета несла на собі 31 торпеду, і, в той час як вонилетіли по екрану, гравець міг вистрілити цятку з носа своєї ракети внапрямку інший. Якщо точка справді перетинала обриси іншогокорабля, програма визначала, що торпеда успішно вразила інший корабельі інший корабель «вибухав». Підірваний корабель пропадав з екрану ізамінювався нагромадженням точок, які зображали його залишки. p>
Звичайно, суспільство програмістів і зломщиків програм не можезадовольнитися якістю будь-якої програми, незалежно від того, наскількивона легка або цікава. Зміни були неминучі. Один з друзівпрограміста, будучи незадоволеним випадковим чином побудованої картоюзоряного неба, яку Рассел спочатку помістив у гру, взяв зорянийатлас і примудрився запрограмувати нашу власну галактику, аж дозірок п'ятого величини. Інший додав гравітацію в гру, а третє ввівможливість втечі в гіперпростір, при цьому, щоб показати місце, декорабель залишив зоряну систему, на екрані залишався слід прискорення. p>
Навіть Рассел зробив деякі зміни. Знаючи, що у справжніх торпедймовірність ураження цілі не 100%, а менше, він вирішив додати зорянимторпеда можливість помилки, і додати випадковий елемент у траєкторіїракет і час вибуху. Його друзі терпіти не могли нову версію, оскількивони хотіли б мати в грі ту ж ступінь впевненості, яка існувалав програмуванні. p>
Рассел повернув програму до попередньої версії і, не встигли озирнутися, як
«Космічні війни» окупували комп'ютери коледжів по всій країні. P>
«Космічні війни» стали настільки популярними до середини шістдесятих,що Нолан Бушнелл, творець Atari, дуже причепився до гри під час навчанняв університеті штату Юти. До 1970 року Бушнелл побудував свою власнумашину, використавши 185 вбудованих ланцюгів для підключення до телевізора ідля виконання однієї єдиної функції. Ця функція була грою
«Комп'ютерний Космос», варіант «Космічних Воєн», в якому ракетаборолася з літаючими тарілками замість іншого корабля. p>
«Космічні Війни» були не єдиним попередником комерційнихкомп'ютерних ігор, що з'явилися на великих комп'ютерах в коледжах. Якийсьневідомий автор почав грати в гру Star Trek ( «Зоряний шлях») вшістдесятих роках. Ніхто не знає, хто першим створив таку гру - він абовона, ймовірно, подали б судовий позов, якщо б від гри був точновизначений - але ця гра також з'явилася на колледжскіх комп'ютерах по всійкраїні до 1969 року. p>
Гра «Зоряний шлях» сама по собі була не дуже гострою. У грібули лінії на зразок решіток, які дозволяли зоряним кораблямподорожувати від однієї точки до іншої, гра використовувала символи дляідентифікації кораблів, надавала чисельну інформацію у відсотках, ідозволяла літати швидше, ніж швидкість світла. До середини 70-х років майжена кожній домашній комп'ютерній системі була доступна та або інша формацієї гри. Існувала версія цієї ж ігри для IBM під назвою Star
Fleet ( «Зоряний Флот »). p>
Нарешті, варто згадати мабуть найбільш важливу гру, Adventure
( «Пригоди»). У грі використовувалися двухсловние команди, а ім'я їйрозробника Вілл Краудер. Це була перша пригодницька комп'ютернагра. p>
Крім того, в кінці 70-х була створена гра на ім'я Zork, якастала доступна для користувачів домашніх комп'ютерів в 1981 році. Цю грудо сих пір можна купити. Гра Zork грунтується на грі Adventure (2). P>
2. Опис компонентів, які використовуються при реалізації практичної частини курсової роботи p>
У практичній частині даної курсової роботи використовуються наступнівізуальні і невізуальних компоненти (3, 4, 5) середовища програмування
Borland Delphi 6.0. P>
1.2.1. Компонент TMainMenu p>
TMainMenu дозволяє помістити головне меню в програму. При приміщенні
TMainMenu на форму це виглядає, як просто іконка. Іконки даного типуназивають невидимим (невізуальних) компонентом, оскільки вони невидимі учас виконання програми. Створення меню включає три кроки:
1) п?? ня TMainMenu на форму,
2) виклик Дизайнера Меню через властивість Items в інспектор об'єктів,
3) визначення пунктів меню в дизайнери Меню. P>
Цей компонент доступний з модуля MENUS, і знаходиться на сторінці
Палітри компонентів Standard p>
Цей компонент являє головне меню форми і успадковує всі методиі властивості TMenu. Особливість його в тому, що в ньому реалізований складниймеханізм об'єднання меню. Це необхідно з наступних причин: p>
1. Якщо в програмі є кілька форм зі своїми меню, то для спрощення роботи доцільно об'єднати їх в один і управляти меню з головної форми. P>
2. Об'єднання меню потрібно при роботі з інтерфейсом MDI і його подокнамі. P>
3. Механізм об'єднання меню використовується серверами OLE, що запускаються за місцем розташування об'єкта OLE. Завантажені, сервер дописує здійснювані ним операції до меню іншої програми. P>
Для того щоб реалізувати об'єднання меню, у тих форм, меню якихбудуть приєднані до головного, необхідно встановити в True властивість: (Рb)property AutoMerge: Boolean. p>
При цьому у головного меню воно повинно залишатися рівним False, інакшеголовне меню буде взагалі невидимим. Об'єднання буде відбуватисяавтоматично при активізації нових форм або серверів OLE. Крімавтоматичного режиму, об'єднання меню можна виконати при виклику методу:procedure Merge (Menu: TMainMenu). p>
Приєднувані меню при необхідності може бути легко від'єднанівикликом методу: procedure Unmerge (Menu: TMainMenu). p>
При встановленому в True властивості AutoMerge посилання на приєднанеменю буде зберігатися в спеціальному полі компонента і від'єднуватися впотрібних випадках автоматично (наприклад, при закритті форми, якої вононалежить). p>
Об'єднання меню відбувається за спеціальними правилами, в основі якихлежить використання групового індексу (властивості Group Index) кожногооб'єкта TMenuItem. p>
У пунктів меню одного рівня, зокрема всіх підменю верхнього рівняв головному меню, властивість GroupIndex є неубивающім, тобто унаступного пункту груповий індекс більше або дорівнює індексом попереднього.
Ця вимога відстежується як на етапі розробки, так і на етапівиконання. Наприклад, хай пункти меню мають індекси 0, 3, 4, 5, 6. Якщовключити пункт меню з індексом 5 між пунктами з індексами 0 і 3, те 3 і 4буде змінено на 5. А ось змінити більше значення Х на менше Y, якщопопереду є пункти з індексом, великим Y, неможливо. Якщо в цьому прикладіспробувати змінити індекс 6 на 4, то це призведе до виникненнявиняткову ситуацію EMenuError. p>
Для звичайних форм об'єднання відбувається тільки на верхньому рівні вголовному меню під час їх активізації. В об'єднаному меню все підменю будутьрозташовуватися за зростанням номера групового індексу, при цьому: p>
1. якщо в приєднуваної меню є пункти з таким же груповим індексом, що і у вихідному, то всі їх безліч замінює все безліч таких пунктів в початковому меню; p>
2. всі пункти приєднуваної меню, груповий індекс яких не зустрічається у вихідному, додаються до нього і вставляються на відповідні їх індексу місця. p>
До вікон інтерфейсу MDI все сказане стосується тільки при запускудодатки. Якщо у формах програми зі стилем fsMDIChild є свої головніменю, то в цей момент вони автоматично зіллються з головним меню формиfsMDIForm незалежно від стану AutoMerge. p>
На рівні роботи з серверами OLE передбачені додатковіможливості щодо об'єднання меню. Якщо в компонент TOLEContainer завантаженийоб'єкт OLE, то в кінець підменю Edit зазвичай додається підменю, з якогоможна викликати функції відкриття і редагування цього об'єкта. Післяактивізації сервера він може не тільки вставляти свої підменю у головне, алеі додавати нові пункти до вже існуючих підменю. p>
Три методи TMainMenu використовуються для роботи з меню OLE: p>
1. procedure PopulateOle2Menu (SharedMenu: HMenu; Groups: array of p>
Integer; var Widths: array of Longint); p>
2. procedure GetOle2AcceleratorTable (var hAccel: THandle; var numAccels: p>
Word; Groups: array of Integer); p>
3. procedure Set01e2MenuHandle (Handle: HMENU);
1.2.2. Компонент TLabel p>
TLabel служить для відображення тексту на екрані. Можна змінити шрифт і колірмітки, якщо двічі клацнути на властивість Font в інспектор об'єктів. Видно,що це легко зробити і під час виконання програми, написав всього однурядок коду. p>
Цей компонент доступний з модуля STDCTRLS, і знаходиться на сторінці
Палітри компонентів Standard. P>
Компонент являє собою статичний текст. За допомогою цьогокомпонента на робочій поверхні форми можна відобразити інформацію,зробити пояснення і показати назви інших компонентів. Але він має ііншу важливу функцію - якщо у складі тексту TLabel є символи -акселератори, інформація про їх натисканні може передаватися від TLabel іншомуелементу керування. p>
Властивості компонента наведені в табл.1: p>
Таблиця 1 p>
Властивості компонента TLabel p>
| Властивість | Опис | < br>| (Pb) property Caption: TCaption; | Містить рядок з з'являються текстом. |
| TCaption = string [255]; | |
| (Pb) property Alignment: | Встановлює правило вирівнювання |
| TAlignment; | тексту - по правому, лівому краю або по |
| | Центру клієнтської області. |
| (Pb) property AutoSize: Boolean; | У разі True відбувається автоматичне |
| | Приведення розмірів компонента к |
| | Розмірами тексту і висоті шрифту. |
| | |
| | |
| | Продовження табл.1 |
| (Pb) property ShowAccelChar: | Показує, чи відображається в TLabel |
| Boolean; | акселератор (символ, перед яким |
| | Варто знак амперсанда -'&'). Якщо воно |
| | Одно False, амперсанд ніяк не |
| | Інтерпретується. У разі True |
| | Акселератор виділяється в рядку |
| | Підкресленням і натиснення клавіш |
| | + Призводить до передачі |
| | Фокусу вікна FocusControl (тому що TLabel |
| | Сам не є віконним компонентом). |
| (Pb) property FocusControl: | Визначає віконний компонент, якому |
| TWinControl; | надсилаються повідомлення про введення |
| | Акселератора. |
| (Pb) property Transparent: | Прозорість фону компонента. Якщо |
| Boolean; | властивість встановлено в True, то при |
| | Перемальовуванні елемента керування не |
| | Відбувається зафарбовування клієнтської |
| | Області. В іншому випадку - |
| | Відбувається зафарбовування пензлем bsSolid |
| | І кольором Color. |
| (Pb) property WordMrap: Boolean; | Визначає можливість розриву слів в |
| | Разі, якщо кількість виведеного тексту |
| | Перевищує ширину компонента. | p>
1.2.3. Компонент TPanel p>
TPanel - керуючий елемент, схожий на TGroupBox, використовується вдекоративних цілях. Щоб використовувати TPanel просто помістіть його наформу і потім покладіть інші компоненти на нього. Тепер при переміщенні
TPanel будуть пересуватися і ці компоненти. TPanel використовується також длястворення панелі інструментів і вікна статусу. p>
Цей компонент доступний з модуля EXTCTRLS, і знаходиться на сторінці
Палітри компонентів Standard. P>
Цей компонент - є конструкцією для розміщення іншихелементів управління. На відміну від простої рамки (TBevel) панель самає віконним елементом управління і батьком для всіх розміщених наній компонентів. Часто її використовують для створення панелей інструментів,рядків стану і т. п. p>
За зовнішнє оформлення панелі відповідають властивості: p>
(Pb) property Bevel Inner: TPanelBevel; p>
(Рb) property BevelOuter: TPanelBevel; p>
TPanelBevel = (bvNone, bvLowered, bvRaised); p>
(Pb) property BevelWidth: TBevelWidth; p>
TBevelWidth = 1 .. Maxint; p>
(Pb) property BorderWidth: TBorderWidth; p>
TBorderWidth = 0 .. Maxint; p>
На кордонах панелі розміщені два спеціальні оздоблюють рамки
(bevels): Bevellnner і BevelOuter. За допомогою комбінації білого і сірогоквітів вони імітують тривимірність - піднесеність (bvRaised) або втонув -ленность (bvLowered). Обидві рамки мають ширину BevelWidth. Зовнішня -
BevelOuter - розташована прямо по периметру панелі, другий - Bevellnner --всередині на відстані BorderWidth від неї. Обидві можуть бути невидимими
(bvNone), піднятими або утопленими. p>
Комбінуючи поєднання bvLowered/bvRaised, можна створити навколо панелі
"рів" або "вал". p>
Ілюзію тривимірності може підкреслити також стиль обрамленнякомпоненти: p>
(Pb) property BorderStyle: TBorderStyle; p>
TBorderStyle = bsNone .. bsSingle; p>
Значення bsSingle означає, що панель буде облямована чорними лініямиодиничної товщини (по периметру, зовні від обох рамок). p>
Вирівнювання тексту заголовка панелі визначається за допомогою властивості: p>
(Pb) property Alignment: TAlignment; p>
Властивість (Pb) property Locked: boolean; призначений для визначенняспособу взаємодії панелі з розміщеними на ній об'єктами OLE. Якщо воноодно True, останні при активізації сервера OLE "за місцем '" не можутьзамістити панель. p>
У обробнику події: (Pb) property OnResize: TNotifyEvent; можебути передбачена реакція користувача на зміну розмірів панелі. p>
1.2.4. Компонент TBitBtn p>
TBitBtn - кнопка на зразок TButton, проте на ній можна розмістити картинку
(glyph). TBitBtn має кілька визначених типів (bkClose, bkOK іін), при виборі яких кнопка приймає відповідний вигляд. Крім того,натискання кнопки на модальному вікні (Form2.ShowModal) призводить до закриття вікназ відповідним модальним результатом (Form2.ModalResult). p>
Цей компонент доступний з модуля BUTTONS, і знаходиться на сторінці
Палітри компонентів Additional. P>
Ця кнопка, будучи нащадком TButton, може нести на собі піктограму імає ряд додаткових зручностей у використанні. У Delphi вже визначеністандартні види кнопок: p>
(Pb) property Kind: TBitBtnKind; p>
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkAll ); p>
Для кожної з них визначені: передається формі результат
(ModalResult): p>
BitBtnModalResults: array [TBitBtnKind] of TModalResult =
(0, mrOk, mrCancel, 0, mrYes, mrNo, 0, mrAbort, mrRetry, mrlgnore, inrAll);а також назва і картинки для різних станів. Достатньо встановитизначення властивості Kind, і кнопка відразу придбає потрібний вид. Більш того,деякі з видів кнопок при натисненні відразу здійснюють певнідії. Так, bkHelp здійснює ініціалізацію системи допомоги зі своїм
(або найближчим ненульовим батьківським) контекстом. Кнопка виду bkCloseзакриває форму, якої вона належить, викликаючи її метод Close. p>
Кнопка буде віднесена до виду bkCustom, якщо вона: p>
1. призначена Default, але при цьому не належить безлічі [bkOk, bkYes]; p>
2. призначена Cancel, але не належить безлічі [bkCancel, bkNo]; p>
3. у неї змінена піктограма; p>
4. модальний результат не відповідає визначеному для цього виду кнопок. p>
За зовнішній вигляд цієї кнопки відповідають властивості, розглянуті нижче.
Стиль зображення кнопок в залежності від операційної системи задаєтьсявластивість: p>
(Pb) property Style: TButtonStyle; p>
TButtonStyle = (bsAutoDetect, bsWin31, bsNew); p>
Стиль bsNew відповідає Windows 95. У будь-якому випадку коректним будезастосування стилю bsAutoDetect, який сам розпізнає версію системи.
Піктограма кнопки, яка разом з текстом видно на її поверхні,визначається властивістю: p>
(Pb) property Glyph: TBitmap; p>
Для створення ефекту натискання картинка повинна трохи змінюватися взалежно від стану; крім того, окрема картинка потрібна длянеактивного стану (коли натискання не сприймається). У властивості Glyphповинна бути одна бітова карта, але вона може містити зображення відразу длядекількох станів кнопки (максимум чотири). Вони інтерпретуються яквідповідні нормальному (віджатою), забороненого (неактивного),натиснути та утопленими станів (останнє застосовується тільки для кнопок
TSpeedButton). Для цього картинки мають бути розташовані підряд впритулпо горизонталі. Наприклад, при розмірі картинок 16х16 потрібна об'єднанабітова карта 64х16. Якщо кожна з картинок квадратна і ширина загальноїкартинки без остачі ділиться на висоту, то при присвоєнні її властивості Glyphсистема зможе розпізнати їх і скоригувати кількість, обумовленевластивість: p>
(Pb) property NumGlyphs: TNumGlyphs; p>
TNumGlyphs = 1 .. 4; p>
При відображенні в залежності від стану з великої бітової картибуде використана потрібна частина. p>
Три властивості відповідають за розташування тексту та картинки на поверхнікнопки: p>
(Pb) property Layout: TButtonLayout; p>
Спосіб вирівнювання піктограми щодо країв кнопки. Може бутиодним з чотирьох: p>
TButtonLayout = (biGlyphLeft, biGlyphRight, biGlyphTop, biGlyphBottom); p>
Відстань від відповідного способу вирівнювання краю кнопки допіктограми описується властивістю: p>
(Pb) property Margin: Integer; p>
Проміжок між піктограмою і текстом дорівнює: p>
(Pb) property Spacing: Integer; p>
Якщо властивості Margin, Spacing або обидва не задані (за замовчуванням рівні
-1), Значення цих проміжків вибираються системою. Кнопка також маєметод Click і властивості Caption, ModalResult, Default та Cancel. Статус
Default отримують кнопки видів bkOk, bkYes, a Cancel - кнопки видівbkCancel, bkNo. p>
1.2.5. Компонент TSpeedButton p>
TSpeedButton - кнопка для створення панелі швидкого доступу до команд
(SpeedBar). Приклад - SpeedBar ліворуч від Палітри Компонент в середовищі Delphi.
Зазвичай на цю кнопку міститься тільки картинка (glyph). P>
Цей компонент доступний з модуля BUTTONS, і знаходиться на сторінці
Палітри компонентів Additional. P>
Ця кнопка з зображенням може мати як залежну, так і незалежнуфіксацію. Вона зручна для застосування в складі панелей інструментів.
Поведінка цих кнопок багато в чому визначається властивістю: p>
(Pb) property Grouplndex: Integer; p>
Якщо Grouplndex дорівнює нулю, у кнопки взагалі немає фіксації в натиснутомустан і вона не залежить від інших кнопок, що належать тому жбатьківському елементу. Кнопки в групі (тобто з однаковим ненульовимзначенням Grouplndex) мають залежну фіксацію. Вона також залежить відвластивості: p>
(Pb) property AllowAlIUp: Boolean;яке описує поведінку кнопок у групі, а саме: чи можуть всі кнопкиодночасно бути відтиснуті. Якщо AllowAlIUp одно False (за замовчуванням),натиснуту кнопку в групі можна відпустити, лише натиснувши іншу. Якщо AllowAlIUpодно True, кнопку можна відпустити повторним натисканням. p>
Якщо необхідно фіксувати одну кнопку TSpeedButton, їй потрібнопривласнити унікальну груповий індекс, а AllowAlIUp встановити в True. p>
Оскільки в групі не можуть одночасно перебувати кнопки з різнимзначенням цієї властивості, при натисканні кнопки і зміну Grouplndexвластивість AllowAlIUp "розсилається" (присвоюється) іншим кнопок з тимж значенням Grouplndex. У групі не може бути натиснута більше однієї кнопки.
Визначає, чи натиснута кнопка, властивість: p>
(Pb) property Down: Boolean; p>
Ця властивість може змінюватися як системою, так і програмістом.
Наприклад, якщо при запуску програми необхідно, щоб одна з кнопок вжебула натиснутою, її властивість Down встановлюють в True. p>
Текст кнопки визначає властивість Caption. Компонент має ті жправила і властивості малювання картинки, що і TBitBtn. Вони описуютьсявластивостями Glyph, NumGlyphs, Layout, Margin і Spacing. p>
Для імітації клацання передбачений метод Click. Подвійне клацання для
TSpeedButton можливий тільки на тій самій кнопці - інакше він інтерпретуєтьсяяк звичайний. Описується властивістю: p>
(Pb) property OnDblClick; p>
1.2.6. Компонент TImage p>
TImage - відображає графічне зображення у формі. Сприймає формати
BMP, ICO, WMF. Якщо зображення підключити під час дизайну програми, то вонапрікомпіліруется до EXE файлу. p>
Цей компонент доступний з модуля EXTCTRLS, і знаходиться на сторінці
Палітри компонентів Additional. P>
Цей компонент є надбудовою над класом TPicture і замикає всюієрархію графічних об'єктів VCL. Він призначений для показу на формізображення: бітової карти (TBitmap), метафайлу (TMetafile), значка
(TIcon). P>
Властивість (Pb) property Picture: TPicture; служить контейнером дляграфічного об'єкта одного з перерахованих класів. p>
Як канви використовується канва об'єкта Picture. Graphic - тількиякщо поле Graphic посилається на об'єкт класу TBitmap: p>
(Pb) property Canvas: TCanvas; p>
Якщо це не так, то спроба звернення до властивості викличевиняткову ситуацію EInvalidOperation, тому що малювати на метафайлуабо значку не можна. p>
Наступні три властивості визначають, як саме Tpicture розташовується вробочої області компоненти: p>
(Pb) property AutoSize: Boolean;
- Означає, що розміри компоненту настроюються за розмірами що міститьсяв ньому графічного об'єкта. Встановлювати його в True потрібно перед завантаженнямзображення з файлу або буфера обміну; p>
(Pb) property Stretch: Boolean;
- Якщо це властивість встановлено в True, то зображення "натягується" наробочу область, при необхідності зменшуючи або збільшуючи свої розміри.
Якщо воно встановлено в False, то грає роль наступне властивість; p>
(Pb) property Center: Boolean;
- Якщо це властивість встановлено в True, зображення центрується в межахробочої області. В іншому випадку - розташовується у верхньому лівомукутку. p>
1.2.7. Компонент TTimer p>
TTimer - таймер, подія OnTimer періодично викликається через проміжокчасу, вказаний у властивості Interval. Період часу може становити від
1 до 65535 мс. P>
Цей компонент доступний з модуля EXTCTRLS, і знаходиться на сторінці
Палітри компонентів System. P>
Цей невізуальних компонент призначений для повідомлення програми прозакінчення певних проміжків часу. Компонент інкапсулюєсистемний таймер Windows і працює через посилку повідомлень WM_TIMER. p>
Властивість (Pb) property Enabled: Boolean; включає/вимикає таймер,впливаючи на генерацію ним подій. Будучи встановлений в Enabled, таймер починаєгенерувати події OnTimer через інтервал часу p>
(Рb) property Interval: Word;який вимірюється в мілісекундах. Після закінчення кожного такогоінтервалу ініціюється обработчі??, Пов'язаний з подією: p>
(Pb) property OnTimer: TNotifyEvent;
При цьому програміст отримує черговий квант часу. P>
При активізації і деактівізаціі таймера або зміну інтервалу всистемі може не виявитися вільних таймерів. У цьому випадку генеруєтьсявиняткова ситуація EOutOfResources. p>
1.2.8. Компонент TStatusBar p>
TStatusBar - рядок стану. Призначена для розміщення різного родуслужбової інформації у вікнах редагування, звичайно розташовується в нижнійчастини основної форми. Компонент може мати кілька секцій, а такожкнопку зміни розмірів вікна, в яке він поміщений. З компонентомзв'язується об'єкт класу TStatusPanel, який визначає панелікомпонента. p>
Цей компонент знаходиться на сторінці Палітри компонентів Win32. p>
2. РОЗРОБКА ПРОГРАМИ p>
2.1. Постановка завдання p>
Розробити ігрову програму «Морський бій», яка включає ігровупанель, що складається з двох полів для людини і комп'ютера. На полірозставляються 10 кораблів різного класу. Чотири кораблі розміром в однуклітинку, три кораблі розміром в два відділення, два кораблі розміром у трикомірки, і один корабля розміром в чотири клітинки. По черзі супротивникамнадається можливість пострілу по чужому полю, результати якоговідображаються на ньому. При попаданні в корабель надається можливістьдодаткового пострілу. Перемога присуджується гравцю, який потопив всекораблі супротивника. p>
Довідкова інформація містить правила гри, версію програми, іавтора роботи. p>
2.2. Алгоритм реалізації роботи p>
2.2.1. Алгоритм реалізації ігрової програми p>
Запуск програми здійснюється наступним чином: необхідно відкритипапку, яка містить дану гру, і знайти виконуваний файл morboy.exe. На цьомуфото слід виконати подвійне клацання лівою клавішею маніпулятора миша. p>
Проект програми складається з файлу проекту, що містить необхідніконструкції для виконання, і двох модулів Unit1 і Unit2 (6, 7, 8). p>
Модуль Unit2 містить форму AboutBox, і призначений для виведення вікна,що містить інформацію про програму і про автора (рис.1). p>
p>
Рис.1. Інформація про програму p>
Модуль Unit1 є основним модулем проекту, що містить всінеобхідні для роботи програми процедури. p>
Після запуску програми на екран виводиться основна форма Form1
(рис.2), на якій розташовані такі об'єкти: p>
1. Головне меню p>
2. Ігрове поле комп'ютера p>
3. Ігрове поле людини p>
4. Кнопки підтвердження/скасування ходу p>
5. Рядок стану p>
p>
Рис.2. Вигляд програми після запуску p>
Гра, тобто робота програми, починається з вибору в головному меню пункту
«Гра», в якому міститься підпункт «Нова». Після вибору цьогопідпункту, або натискання клавіші F2, відбувається виконання процедури
N11Click. Ця процедура призначена для розміщення кораблів на ігровихполях випадковим чином (Додаток 1). p>
Спочатку на форму виводиться повідомлення «Ваш хід» (блок 2). Далізмінним P і t1 присвоюються значення True, і ініціалізується генераторвипадкових чисел (блок 3). Потім організовується цикл із заданою кількістюповторень по змінного с