Створення ігрової програми Морський бій

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

ЗМІСТ

Введення

1. Програмування ігор з використанням візуальних компонентів

1.1 Аналітичний огляд

1.2 Опис операторів, використовуваних при реалізації практичної частини курсової роботи

2. Розробка програми

2.1 Постановка завдання

2.2 Алгоритм реалізації роботи

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

Висновок

Список використаної літератури

ВСТУП

"ГРА - вид непродуктивної діяльності, мотив якої полягає не в її результатах, а в самому процесі. В історії людського суспільства перепліталася з магією, культовим поведінкою та ін ... Властива також вищим тваринам".

Радянський енциклопедичний словник

Всі, хто має справу з комп'ютером, так чи інакше стикалися з комп'ютерними іграми, і переважна більшість може відразу назвати декілька ігор, які їм особливо сподобалися. Ті, хто вже зовсім награвся, майже награвся або який ще не награвся, але в процесі спілкування з комп'ютером вже почав поєднувати ігри з чим-небудь більш корисним, можливо, хотіли б придумати якісь свої, не схожі ні на які інші ігри.

Багато що захоплює в такій творчості. І не сам процес гри, а розробка ігровий всесвіту, її проектування і реалізація. Коли можна злити воєдино сценарій, графіку, музику, майстерно задуманий і вміло запрограмований алгоритм - створити єдиний фантастичний світ, який живе за законами, які ти ж для нього і придумав.

У цій роботі мова піде про створення нескладної ігрової програми «Морський бій», яка і буде об'єктом дослідження. У першому розділі даної курсової роботи розглядаються аспекти програмування ігор з використанням візуальних компонентів. У другому розділі наведені етапи розробки програми, такі як постановка задачі та алгоритм реалізації.

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

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

1. ПРОГРАМУВАННЯ ІГОР З ВИКОРИСТАННЯМ ВІЗУАЛЬНИХ КОМПОНЕНТІВ

1.1 Аналітичний огляд

Останнім часом продажі програмного забезпечення збільшуються незначно, в той час як продажі ігрових програм зростають експоненціально. Ігри для платформи Windows складають переважну більшість. Ігрове програмне забезпечення - це третя за величиною доходів галузь індустрії програмного забезпечення після текстових процесорів і електронних таблиць.

До недавнього часу середовище 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), і перед розробниками відкрилися ширші можливості.

Вказати точну кількість комп'ютерних ігор дуже важко. Можна тільки приблизно оцінити кількість різних найменувань ігор, що знаходяться на ринку в будь-який час.

Класифікація комп'ютерних ігор може бути наступна:

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-ігри.

Комп'ютерні ігри - аж ніяк не новий винахід. Їх історія почалася не з кінця 1970 років. Початок лежить набагато раніше, тоді, коли Джон Кеннеді вже пробув президентом Сполучених Штатів всього кілька місяців.

Насправді все почалося з моделі залізниці. Студенти Технологічного інституту в Массачусетсі були чимало здивовані кількістю способів, за допомогою яких можна було розмістити органи управління мініатюрної залізницею. Пізніше, коли вони нарешті отримали можливість працювати на великих комп'ютерах інституту, їх робота в бінарних обчисленнях - адже саме такі обчислення імітуються вимикачами залізниці - дозволили їм пройти хорошу підготовку в комп'ютерному справі. Стів Рассел був одним з членів Клубу Моделей Залізниць Високої Технології в Технологічному інституті. Будучи гарним програмістом, він влітку 1961 року працював

в Статистичної лабораторії, коли в нього і його друзів з'явилася ідея перенести «мильні» науково-фантастичні розповіді Є. Є. Сміта на комп'ютери. У 1962 році Стів розробив програму для PDP-1. Ця сама машина тепер виставлена ​​в комп'ютерному музеї Бостона в Массачусетському Технологічному інституті. У «Космічної Війні», як називалася ця програма, два синтезованих комп'ютером ракетних космічні кораблі (один схожий на товсту сигару, а інший на довгу обтічну трубу) могли літати по екрану, на якому містилося зображення космосу. Гравці могли натискати на кнопки, щоб змусити ракети міняти напрям руху майже так само, як пізніше в грі Asteroids власники ігрових машин Atari управляли своїми кораблями. Кожна ракета несла на собі 31 торпеду, і, в той час як вони летіли по екрану, гравець міг вистрілити крапочку з носа своєї ракети в напрямку іншої. Якщо точка дійсно перетинала обриси іншого корабля, програма визначала, що торпеда успішно вразила інший корабель і інший корабель «вибухав». Підірваний корабель пропадав з екрану і замінювався нагромадженням точок, які зображали його залишки.

Звичайно, суспільство програмістів і зломщиків програм не може задовольнитися якістю будь-якої програми, незалежно від того, наскільки вона легка або цікава. Зміни були неминучі. Один з друзів програміста, будучи незадоволеним випадковим чином побудованої картою зоряного неба, яку Рассел спочатку помістив у гру, взяв зоряний атлас і ухитрився запрограмувати нашу власну галактику, аж до зірок п'ятої величини. Інший додав гравітацію в гру, а третій ввів можливість втечі в гіперпростір, при цьому, щоб показати місце, де корабель покинув зоряну систему, на екрані залишався слід прискорення.

Навіть Рассел зробив деякі зміни. Знаючи, що у справжніх торпед ймовірність ураження цілі не 100%, а менше, він вирішив надати зоряним торпедам можливість помилки, і додати випадковий елемент в траєкторії ракет і час вибуху. Його друзі терпіти не могли нову версію, оскільки вони хотіли б мати у грі ту ж ступінь впевненості, яка існувала в програмуванні. Рассел повернув програму до колишньої версії і, не встигли озирнутися, як «Космічні війни» окупували комп'ютери коледжів по всій країні. «Космічні війни» стали настільки популярні до середини шістдесятих, що Нолан Бушнелл, творець Atari, дуже прив'язався до гри під час навчання в університеті штату Юти. До 1970 року Бушнелл побудував свою власну машину, використавши 185 вбудованих ланцюгів для під'єднання до телевізора і для виконання однієї-єдиної функції. Ця функція була грою «Комп'ютерний Космос», варіант «Космічних Воєн», в якому ракета боролася з літаючими тарілками замість іншого корабля. «Космічні Війни» були не єдиним попередником комерційних комп'ютерних ігор, що з'явилися на великих комп'ютерах в коледжах. Якийсь невідомий автор почав грати в гру Star Trek («Зоряний шлях») в шістдесятих роках. Ніхто не знає, хто першим створив таку гру - він чи вона, ймовірно, подали б судовий позов, якщо б автор гри був точно визначений - але ця гра також з'явилася на колледжскіх комп'ютерах по всій країні до 1969 року. Гра «Зоряний шлях» сама по собі була не дуже витонченою. У грі були лінії на зразок грат, які дозволяли зоряним кораблям подорожувати від однієї точки до іншої, гра використовувала символи для ідентифікації кораблів, надавала чисельну інформацію у відсотках, і дозволяла літати швидше, ніж швидкість світла. До середини 70-х років майже на кожній домашній комп'ютерній системі була доступна та чи інша форма цієї гри. Існувала версія цієї ж ігри для IBM під назвою Star Fleet («Зоряний Флот»). Нарешті, варто згадати мабуть найбільш важливу гру, Adventure («Пригоди»). У грі використовувалися двухсловний команди, ім'я її розробника Вілл Краудер. Це була перша пригодницька комп'ютерна гра. Крім того, в кінці 70-х була створена гра на ім'я Zork, яка стала доступна для користувачів домашніх комп'ютерів в 1981 році. Цю гру до сих пір можна купити. Гра Zork грунтується на грі Adventure.

1.2 Опис операторів, використовуваних при реалізації практичної частини курсової роботи

У практичній частині даної курсової роботи використовуються наступні оператори середовища програмування Turbo Pascal.

Структурні оператори

Оператор if ... then ...

Оператор if ... then ... називається умовним оператором і має вигляд:

If expression1 then statement1;

де вираз expression1 є логічним. Логічний вираз приймає одне з двох можливих значень - True (істина) або False (брехня). Часто в ролі логічного виразу виступає якась умова, яка може виконувати або ні. У першому випадку його значення - «істина», а в другому - «брехня». Якщо логічний вираз expression1 приймає значення «істина», то виконується оператор statement1. В іншому випадку виконується буде оператор, наступний за даними логічним оператором.

Оператор if ... then ... else ...

Цей оператор є повною версією умовного оператора і має вигляд:

If expression then statement1 else statement2;

Виконується даний оператор наступним чином: якщо вираз expression приймає значення «істина», то управління передається на оператор statement1, якщо ж ні, то на оператор statement2.

Оператор case ... of ... end

Для ситуації, де є декілька (три або більше) альтернатив, більше підходить оператор case. Цей оператор називається оператором вибору і має наступний вигляд:

case expression of

values_1: statement_1;

values_2: statement_2;

...

values_n: statement_n;

else statement;

end;

Розглянемо елементи цієї конструкції. По-перше, це три зарезервованих слова: case, of і end. Між case і of знаходиться вираз expression, що приймає значення, яке, можливо, є в одному зі списків значень, що знаходяться зліва від двокрапок. Цей вираз називається селектором оператора case. Кожен оператор, що йде за двокрапкою, відділяється від наступного списку значень точкою коми. Гілка else, що відповідає всім не перерахованим значенням вираження expression, необов'язкова. При виконанні даного оператора спочатку обчислюється значення селектора. Потім вибирається той список значень, якому належить отримане значення, і виконується відповідний оператор.

Оператор циклу while ... do ...

Оператор циклу є найважливішим оператором і є в більшості сучасних мов програмування. Цикл дозволяє багато кратно виконати деяке безліч дій, що задаються операторами, складовими його тіло. У Паскалі є декілька різновидів оператора циклу. Почнемо з оператора циклу з передумовою. Даний оператор має вигляд:

While expression do statement;

При виконанні цього оператора спочатку обчислюється значення логічного вираження expression. Якщо це значення істинне, виконується оператор statement, потім значення виразу перевіряється знову і т. д., до тих пір, поки вираз не прийме значень «брехня». Якщо вираз приймає значення «брехня» при першій же перевірці, то оператор statement не виконується взагалі.

Оператори циклу repeat ... until ...

Оператор циклу з постусловіем має вигляд:

Repeat statement until expression:

Тут спочатку виконується оператор statement, а потім обчислюється значення логічного вираження expression приймає значення «брехня». Як тільки це значення стане справжнім, виконання циклу припиняється.

Оператори циклу for ... to ... do ... і for ... downto ... do ...

Третій варіант оператора циклу - цикл з лічильником. Можна вважати, що є дві дуже схожих один на одного різновиду циклу з лічильником. Перший з цих операторів має вигляд:

For j: = expression1 to expression2 do statement;

Тут змінна j, звана керуючої змінної циклу for, є довільним ідентифікатором, який оголошується як змінна будь-якого скалярного типу (до скалярним відноситься ціла, символьний, логічний і перелічувані).

При виконанні оператора for спочатку обчислюється значення виразу expression1, потім обчислюється значення виразу expression2, далі керуюча мінлива циклу послідовно пробігає усі значення від expression1 до expression2. У тому випадку, коли значення expression1 виявляється більше значення expression2, тіло циклу не буде виконуватися зовсім.

2. РОЗРОБКА ПРОГРАМИ

2.1 Постановка завдання

Скласти програму для гри в «Морський бій» гравця з комп'ютером. Програма повинна дозволяти розставляти кораблі на полі 10 х 10, контролювати правильність їх розстановки, давати противникам можливість по черзі робити ходи і видавати відповідні інформаційні повідомлення. Коли в якості гравця виступає комп'ютер, програма повинна аналізувати попередні ходи і наступний хід робити на основі проведеного аналізу.

2.2 Алгоритм реалізації роботи

Алгоритм розміщення кораблів на ігровому полі

Ігрове поле потрібно якось зберігати в пам'яті комп'ютера. Найбільш проста реалізація - у вигляді матриці 10x10 клітин (осередків). Визначимо відповідний тип і змінні, які нам знадобляться:

type TPole = array [1 .. 10,1 .. 10] of Integer;

var Pole: TPole;

Обумовити, що порожня клітинка буде мати значення -1, а осередок, в якій знаходиться корабель: 0. Перед початком процесу розміщення кораблів необхідно очистити поле. Крім цього треба ще й оновити лічильник випадкових чисел, що б домогтися реальної випадковості позицій флоту комп'ютера. Всі ці дії краще оформити у вигляді окремої процедури:

procedure Init (var Pole: TPole); var X, Y: Integer; begin Randomize; for X: = 1 to 10 do for Y: = 1 to 10 do Pole [X, Y]: = -1; end; {proc Init}

За правилами гри два корабля не можуть стикатися одна з одною, тобто між ними має бути порожній простір мінімум в одну клітку. Нам знадобиться допоміжна функція, яка дозволить визначити, чи можна поставити однопалубний корабель у вказану клітинку чи ні. Для цього необхідно перевірити саму цю клітинку і всі сусідні (їх 8 штук). І тільки якщо всі вони не зайняті можна дати позитивну відповідь (True), у противному випадку - негативний (False):

function Freedom (x, y: Integer; Pole: TPole): Boolean; const d: array [1 .. 8,1 .. 2] of Integer = ((0,1), (1,0), (0, -1), (-1,0), (1,1), (-1,1), (1, -1), (-1, -1)); var i: Integer; dx, dy: Integer ; begin if (x> 0) and (x <11) and (y> 0) and (y <11) and (Pole [x, y] = -1) then begin for i: = 1 to 8 do begin dx : = x + d [i, 1]; dy: = y + d [i, 2]; if (dx> 0) and (dx <11) and (dy> 0) and (dy <11) and (Pole [dx, dy]> -1) then begin Result: = False; Exit; end; {if} end; {for} Result: = True; end else Result: = False; end; {func Freedom}

Як відомо з правил гри, на полі повинні знаходитися наступні кораблі: один чотирьох палубний, два трьохпалубному, три двопалубних і чотири однопалубних. Процедура, що розставляє ці кораблі повинна виконувати наступні дії: взяти випадкову вільну комірку і перевірити, чи можна поставити поточний корабель горизонтально або вертикально. Якщо так, то корабель розміщується на ігровому полі і обробка переходить до наступного. Зрозуміло, що якщо немає, то повертаємося до вибору координат. Порядок дій повинен бути від більшого корабля до меншого, що б не виникла ситуація неможливості розміщення ні в одну позицію поля. Ось код цієї процедури:

procedure Ships (var Pole: TPole); var N, M, i: Integer; x, y, kx, ky: Integer; B: Boolean; begin Init (Pole); for N: = 3 downto 0 do for M: = 0 to 3 - N do repeat x: = Random (10) + 1; y: = Random (10) + 1; kx: = Random (2); if kx = 0 then ky: = 1 else ky: = 0; B: = True; for i: = 0 to N do if not Freedom (x + kx * i, y + ky * i, Pole) then B: = False; if B then for i: = 0 to N do Pole [ x + kx * i, y + ky * i]: = 0; until B; end; {proc Ships}

Це, власне, і все, що стосується розміщення кораблів комп'ютера. Тепер досить зробити виклик: Ship (Pole); і кораблі будуть випадковим чином розставлені по своїх місцях. Подібним чином можна допомогти користувачеві, що б він кожен раз не витрачав час на цю операцію, викликавши Ship (Play); де Play - поле гравця (тип TPole).

Стратегія гри комп'ютера

Завдання полягає в розробці алгоритму, за яким комп'ютер зможе грати в "Морський бій" з максимальною якістю і при цьому не підглядаючи розташування флоту гравця. Додаткове і очевидне умова: при кожній новій грі незалежно від розміщення сил противника комп'ютер повинен грати по-різному, тобто його ходи повинні бути не передбачувані. Необхідно згадати правила гри: учасники поєдинку роблять ходи по черзі, причому, якщо один з гравців потрапляє по кораблю суперника, то він отримує право наступного ходу. Якщо реалізувати пошук мети комп'ютером у вигляді окремої процедури, то треба якось навчити його запам'ятовувати результати минулих пострілів, щоб адекватно провести наступний. З цього факту випливає, що саме просте і раціональне вирішення цієї проблеми можна оформити у вигляді кінцевого автомата, найбільш точно описує послідовність дій. Можна виділити три стани:

  1. простріл ігрового поля по випадкових координатами до попадання по кораблю, після чого перехід у другу стан;

  2. обстріл навколо підбитим осередку поля для визначення напрямку корабля (вертикальне чи горизонтальне), після чергового попадання - перехід в третій стан;

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

Отже, вся гра зациклена на трьох основних діях: простріл, обстріл і розстріл. Всі ці дії повинні продовжуватися до тих пір, поки в однієї зі сторін не будуть знищені всі кораблі. Комп'ютеру буде потрібно ще одне поле, на якому він буде вести гру. Назвемо його Play. Крім цього потрібно пам'ятати, які кораблі залишилися у гравця, а які вже розбиті. Оголосимо всі необхідні змінні:

var Play: TPole; Kor: array [1 .. 4] of Integer; State: Integer; / / стан автомата Len: Integer; / / кількість підбитих палуб поточного корабля Pkx, Pky: Integer; / / напрям удару Px, Py: Integer; / / позиція попадання

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

procedure Start; var I: Integer; begin Init (Play); Ships (Pole); State: = 1; for I: = 1 to 4 do Kor [I]: = 5 - I; end; {proc Start}

Припустимо, що у нас є функція, яка видає істину, якщо в осередки (x, y) гравця стоїть корабель і брехня в іншому випадку: function Killed (x, y: Integer): Boolean;. Ще буде потрібно функція, що визначає довжину найбільшого корабля гравця:

function MaxShip: Integer; var i: Integer; begin for i: = 1 to 4 do if Kor [i]> 0 then Result: = i; end; {func MaxShip}

І функція, яка визначає програш юзера:

function GameOver: Boolean; var I: Integer; begin for I: = 1 to 4 do if Kor [I]> 0 then begin Result: = False; Exit; end; {if} Result: = True; end; {func GameOver }

Всі допоміжні підпрограми готові і можна приступити до реалізації самого автомата. Для більшої наочності кожний стан оформимо у вигляді окремої процедури. Отже, все по порядку.

Простріл

На цьому етапі комп'ютер повинен зловити будь-якої з кораблів противника. Для цього він буде стріляти по довільним незайнятим клітинам поля гравця. Набагато ефективніше спочатку розправитися з великими кораблями, тому вибираючи координати для пострілу треба перевіряти, що б у цій позиції міг розміститися найбільший з решти кораблів. Процес припиняється, як тільки відбудеться влучання. Позначимо підбиту частина корабля значенням 1, а промах -2 відповідної комірки поля. Якщо у гравця залишилися тільки однопалубні кораблі, то цим попаданням корабель знищений повністю і обстрілювати його немає сенсу. В іншому випадку треба перейти до другого стану. Наведемо код описаної функції:

function State1 (var x, y: Integer): Boolean; var k, i, n, m: Integer; B: Boolean; tmp: Integer; begin repeat repeat x: = Random (10) + 1; y: = Random ( 10) + 1; until Freedom (x, y, Play); Pkx: = Random (2); Pky: = Pkx - 1; for m: = 1 to 2 do begin i: = 0; k: = 0; for n: = 1 to 2 do begin while Freedom (x + Pkx * i, y + Pky * i, Play) do begin Inc (k); Inc (i); end; {while} Pkx: =-Pkx; Pky: =-Pky; i: = 1; end; {for} B: = k> = MaxShip; if B then Break; tmp: = Pkx; Pkx: = Pky; Pky: = tmp; end; {for} until B; Result: = Killed (x, y); if Result then begin Px: = x; Py: = y; Len: = 1; if MaxShip> 1 then State: = 2 else Dec (Kor [Len]); end; { if} end; {func State1}

Її результатом служать координати пострілу і показник попадання.

Обстріл

На цьому кроці завдання полягає у визначенні напрямку спійманого корабля. Для цього треба обстріляти чотири осередки (якщо вони вільні), які можуть служити продовженням. У випадку, коли всі чотири клітини обстріляні, а потрапляння не відбулося (однопалубний корабель), треба перейти до першого стану. Якщо в якийсь момент вдалося підбити ще одну палубу супротивника, то можна переходить до розстрілу даного корабля, тому що його напрям стало відомо. Аналогічно першому стану, якщо у гравця залишилися кораблі не більше двох палуб, то цим попаданням корабель знищений повністю і треба повернутися до прострілу. Подивимося, як все це виглядає:

function State2 (var x, y: Integer): Boolean; var Old: ShortInt; tmp: Integer; k: Integer; begin Old: = Play [Px, Py]; Play [Px, Py]: = -1; repeat if not Freedom (Px + Pkx, Py + Pky, Play) and not Freedom (Px - Pkx, Py - Pky, Play) then begin tmp: = Pkx; Pkx: = Pky; Pky: = tmp; end; {if} if Random (2) = 0 then begin x: = Px + Pkx; y: = Py + Pky; end else begin x: = Px - Pkx; y: = Py - Pky; end; {if} until Freedom (x, y , Play); Result: = Killed (x, y); if Result then begin Len: = 2; State: = 1; if MaxShip> 2 then State: = 3 else Dec (Kor [Len]); end else begin k : = 4; if not Freedom (Px + 1, Py, Play) then Dec (k); if not Freedom (Px - 1, Py, Play) then Dec (k); if not Freedom (Px, Py + 1, Play) then Dec (k); if not Freedom (Px, Py - 1, Play) then Dec (k); if k <2 then State: = 1; end; {if} Play [Px, Py]: = Old ; end; {func State2}

Розстріл

На попередньому кроці вдалося встановити в якому напрямку розміщений спійманий корабель. Тепер завдання полягає в його повному знищенні. Для цього треба стріляти праворуч або ліворуч (зверху чи знизу) підбитих палуб, поки не доб'ємо його повністю, після чого повернемося в стан прострілу. При цьому слід враховувати максимально можливий корабель і намагатися потрапити по четвертій палубі, коли чотирьох палубний корабель знищений, немає ніякого сенсу. Все досить просто:

function State3 (var x, y: Integer): Boolean; var Old: ShortInt; i: Integer; B: Boolean; begin for i: = 1 to 2 do begin x: = Px; y: = Py; while Play [x , y] = 1 do begin Inc (x, Pkx); Inc (y, Pky); end; {while} Old: = Play [x-Pkx, y-Pky]; Play [x-Pkx, y-Pky] : = -1; B: = Freedom (x, y, Play); Play [x-Pkx, y-Pky]: = Old; if B then Break; Pkx: =-Pkx; Pky: =-Pky; end; {for} if B then begin Result: = Killed (x, y); if Result then begin Inc (Len); if Len = MaxShip then begin Dec (Kor [Len]); State: = 1; end; {if} end; end else begin Dec (Kor [Len]); State: = 1; Result: = State1 (x, y); end; {if} end; {func State3}

Залишилось зібрати все це в одній процедурі, яка буде контролювати результат пострілу і забезпечувати повторний хід при попаданні:

procedure Comput; var x, y: Integer; Kill: Boolean; begin repeat case State of 1: Kill: = State1 (x, y); 2: Kill: = State2 (x, y); 3: Kill: = State3 ( x, y); end; {case} if Kill then Play [x, y]: = 1 else Play [x, y]: = -2; until not Kill or GameOver; end; {proc Comput}

Можна помітити, що функція Killed викликається рівно один раз при кожному ході комп'ютера. Від сюди слід, що комп'ютер не підглядає розташування кораблів гравця, тому що іншої можливості дізнатися про стан будь-якої комірки поля юзера у нього немає. У цьому можна переконатися на практиці, зібравши всі ці частини коду разом і зробивши консольний додаток, в якому функція Killed питала б у гравця, потрапив комп'ютер або промазав. Все це легко з мінімальними змінами реалізувати на Turbo Pascal 7.0

3. БЛОК - СХЕМА

ВИСНОВОК

В результаті виконання даної курсової роботи було отримано ігровий програмний продукт, названий «Морський бій». Було проведено дослідження компонентів програмного середовища Turbo Pascal 7.0, які використовувалися при створенні гри.

У результаті дослідження були виявлені такі недоліки отриманого програмного продукту:

  1. Низький штучний інтелект, тобто хід комп'ютера здійснюється випадковим чином, що робить малоймовірним перемогу комп'ютера;

  2. При повному затопленні корабля це ніяк не відображається;

  3. Неможливість повернення на кілька ходів назад;

  4. Працездатність програми лише в середовищі Windows;

Однак, крім недоліків, є і гідності у цього програмного продукту:

  1. Автоматична розстановка кораблів;

  2. Програмний продукт маловимогливий до системних ресурсів комп'ютера. Мінімальна конфігурація: процесор - не нижче Pentium, оперативна пам'ять - не нижче 16 Mb, операційна система - Windows 95 / 98 / Me / NT / 2000 / XP.

У результаті обліку всіх зроблених вище зауважень можливе поліпшення створеного програмного продукту, на який буде потрібно мінімум змін вихідного коду програми.

Список використаної літератури

  1. Немнюгин С. Turbo Pascal / Навчальний курс .- СПб: Питер, 2001.

  2. Сухарєв М. Turbo Pascal 7.0. Теорія й практика програмування .- СПб.: Наука і техніка. 2004.

  3. Фаронов В.В. Турбо Паскаль 7.0. Початковий курс. Навчальний посібник - М.: Видавництво ТОВ ОМД «Груп», 2002.

  4. Федоренко Ю. Алгоритми і програми на Turbo Pascal / Навчальний курс .- СПб: Питер, 2001.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
96.3кб. | скачати


Схожі роботи:
Створення ігрової програми шашки для гри між людиною і комп`ютером на мові С Builder
Ютландська морський бій
Гра в Морський бій з комп`ютером
Створення тестуючої програми
Створення програми для роботи зі сканером
Створення банерів за допомогою програми Adobe PhotoShop 70
Створення програми та діяльність Укр і Рос партій на поч ХХ ст
Створення програми з використанням програмного продукту Turbo Assembler
Створення програми та діяльність Укр і Рос партій на поч ХХ ст
© Усі права захищені
написати до нас