Розробка платформи сайту

 

Вступ

програмний прикладний гра сайт

Компонентне програмування - наступний еволюційний крок на шляху розвитку передових технологій. Воно являє собою логічне продовження структурного і обєктно-орієнтованого програмування. Компонентне програмування зі своєю появою принесло дуже важливі технологічні елементи: єдину оболонку для функціонування обєктів, уніфікацію способів взаємодії і доступу до можливостей обєктів. Воно дозволяє будувати програмне забезпечення по принципу конструктора - із незалежних готових компонентів, що набагато ефективніше, ніж створювати з нуля. Для розробки кожного такого «будівельного блоку» програміст може використовувати будь-яку мову програмування. Але найголовніше, що забезпечується прозорий доступ до віддалених обєктів.

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

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

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

Компонентні середовища володіють всіма перевагами притаманними обєктно-орієнтованому підходу.

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

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

Поліморфізм дає можливість групувати обєкти характеристики яких з деякої точки зору схожі.

Частіше всього розподілені обєкти (компоненти) працюють в конфігурації клієнт-сервер. Самі обєкти являються серверами - вони реагують на запити і надають клієнту сервіси або ресурси.

З точки зору компонентної моделі, компоненти описується набором інтерфейсів, які вона реалізує. Кожний такий інтерфейс - це свого роду «розетка» до якої повинні підєднуватися інші компоненти або прикладні задачі.

В даній курсової роботі буде розроблена програма, що моделює багатосторонню гру «Дуель». Дана програма буде створена з використанням компонентних технологій.

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


1.Аналіз предметної області. вибір компонентної технології


1.1 Основні концепції компонентної розробки прикладних задач


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

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

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

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

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

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

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

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

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

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


1.2 Модель COM/DCOM


COM і DCOM - технології, які забезпечують взаємодію між компонентами прикладної задачі. Вони дозволяють розгортати розподілену прикладну задачу на платформі Windows. COM - є моделлю програмування на основі обєктів. Вона спрощує взаємодію компонентів та прикладних задач. DCOM це, свого роду, «клей» який звязує різні технології. DCOM дає змогу двом або декільком компонентам легко взаємодіяти одне з одним, незалежно від того, коли і на якій мові вони були написані, а також де саме вони знаходяться і в якій операційній системі працюють. Розглянемо більш детально DCOM.

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

Середовище компонентної розробки підтримує на даний момент розробку компонент на трьох мовах програмування: Visual Basic, Visual C++ та J++. Візуальна розробка компонент підтримується за допомогою property sheet. Середовище розробки і виконання компонентів також розроблене а основі моделі DCOM. Саме завдяки цьому його можна розширювати та настроювати за допомогою стандартних механізмів.

Так як в мовах C++ і Visual Basic немає вбудованої підтримки рефлексій, на відміну від Java, тому в DCOM всі метадані (крім тих що відносяться до Java) виражаються в термінах компонентної моделі, а не на мові програмування.

1.3 Модель Java Beans


Платформа розподілених компонентів основана на специфікації Java Beans була розроблена компанією Sun Microsystems. Специфікація Java Beans являє собою сукупність спеціальних інтерфейсів мови програмування Java. Вона наслідує поняття та характеристики Java, такі як обєктна орієнтованість, багато потоковість, використання віртуальної машини, незалежність від апаратно-програмної платформи, інформаційна безпека та багато інших. На відміну від моделі DCOM, яка є нейтральною до мови програмування, але залежить від платформ, Java Beans нейтральна до платформ, але залежить від мови програмування (орієнтована на Java). Мобільність компонентів які створюються відносно платформ забезпечує технологія віртуальної Java-машини.

Середовище компонентної розробки, засноване на технології Java Beans, має API-інтерфейс. Він явно підтримує візуальну розробку компонентів за допомогою сторінки властивостей DCOM. Цими якостями володіють інтегровані середовища розробки: Visual Cafe компанії Symantec, Visual Age for Java корпорації IBM, JBuilder (Borland), Java Workshop (Sun Microsystems).

По функціональним можливостям вони можуть порівнюватися з середовищем Visual Studio від Microsoft. Вони забезпечують візуальну розробку компонентів за допомогою застосування сторінки властивостей, палітр и попереднім визначенням правил буксирування готових компонентів за допомогою мишки.

Для формування мета даних в моделі Java Beans використовується API-інтерфейс Core Reflection. Який був успадкований від Java. Він являє собою спеціальний набір класів Java.

Платформа розподілених компонентів заснована на моделі Java Beans описана специфікацією EJB (Enterprise Java Beans) компанії Sun Microsistem. Вона являє собою розподілене серверне середовище для Java аналогічну по функціональним можливостям для середовища DCOM.

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


1.4 Технологія розподіленого програмування CORBA

- це одна з популярних на сьогоднішній день технологій розподіленого програмування. Вона розроблялася та підтримується консорціумом OMG і є багато різних реалізацій стандарту для різних платформ та мов програмування.дозволяє створювати розподілені в просторі мережі компоненти, при чому ці компоненти можуть бути написані на різних мовах програмування (наприклад С та Java), працювати на різних операційних системах (наприклад Linux і Windows NT), просто визначаючи інтерфейси одне одного и віддалено викликаючи відкривання нових методів, з яких складаються компоненти.включає в себе просту мову програмування опису інтерфейсів обєктів - IDL, вона дозволяє відділяти описання інтерфейсів від їх реалізації в перетворювати в CORBA існуючі прикладні задачі. Важливо також відзначити що будь-який компонент може бути як клієнтом так і сервером одночасно. Для підвищення надійності, захисту даних і досягнення кращої роботи CORBA може бути реалізований як частина операційної системи. При цьому посилання на обєкти можуть бути зроблені постійними, таким чином зменшуючи час, необхідний для обробки кожного запиту.

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


1.5 Технологія.NET


Платформа MS.NET включає в себе як готові компоненти для побудови програмного забезпечення, так і інтегроване середовище розробки, що забезпечує можливість багатомовної розробки програмних систем з використанням різних мов програмування (наприклад С#, C++, VBasic.NET, Java#).

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

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

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

Платформа.NET складається з основних компонентів:


Visual Studio. NetСервери. NetNet FrameworkСервіс. NetОпераційні системи

-Операційні системи Microsoft представляють базовий рівень платформи.

-Сервери. Net є програмними продуктами Microsoft, використання яких дозволяє знизить складність розробки складних програмних систем. (наприклад використовуються сервери Application Center 2000, Exchange Server 2000, SQL).Сервіс. Net (Net Building Bloc Services) представляє собою готові «будівельні блоки» складних програмних систем, які можуть бути використані через Інтернет як сервісні послуги (наприклад Microsoft Passport, що дозволяє встановити єдине імя користувача і пароль на всіх сайтах, які підтримують аутентифікацію через Passport).

-Visual Studio. Net - верхній рівень MS.NET. Забезпечує можливість створення складного програмного забезпечення на основі платформи.

-Центральною частиною MS.NET є.NET Framework.Framework складається із двох головних компонентів: бібліотеки базових класів та CLR (Common Language Runtime). Які відповідно призначені для вирішення наступних завдань:

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

-Підвищення керованості застосувань з погляду безпеки та ефективного використання ресурсів.Framework Class Library - бібліотека базових функцій. Принципова новизна полягає в тому, що якщо раніше подібний набір створювався окремо для кожної мови програмування, то тепер він один для всіх засобів.(Common Language Runtime) - складний програмний апарат, призначений для стирання границь між різними мовами програмування. Він виконує програми, частини яких написані на різних мовах програмування.

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

Якщо порівнювати яка платформа краща то однозначно нічого сказати не можна кожний програміст вибирає те що для нього найбільш потрібно на даний момент. Вважається що через кілька років.NET повністю монополізує ринок, але якщо порівнювати його з Java то єдиний її недолік те що вона більш повільна (більш ніж в три рази). Однак це пояснюється тим що сама віртуальна Java-машина є більш універсальною і тим самим вповільнює виконання. Якщо порівнювати CORBA і COM то вони також як багато в чому відмінні так і багато в чому схожі. Це клієнт-серверні технології, в яких функціональність обєкту надається клієнту через звернення до абстрактних інтерфейсів.

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

Основним критерієм на основі якого було обрано дану технологію є її універсальність та більша розповсюдженість в сфері розробки програмних продуктів.


2. Розробка технічного завдання


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

.Кількість дуелянтів повинна бути не менше трьох;

.В ході програми з допомогою жеребу повинен бути сформований порядок стрільби дуелянтів.

.Дуелянти повинні розташовуються на однаковій відстані один від одного.

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

.Черговий стріляючий може стріляти в будь якого із інших.

.Потрібно сформувати моделі трьох категорій дуелянтів:

-С - снайпер і ніколи не промахується з даної дистанції;

-Б - влучає лише в 80%;

-Д - приблизно в 50% випадків.

.Потрібно розробити найкращу стратегію гри для кожного із учасників.

.Програма повинна мати меню, мінімальний склад якого такий:

-Робота програми;

-Відомості про програму (інструкція);

-Відомості про автора;

-Вихід.

.Всі надписи на екрані повинні бути державною мовою.

.У роботі передбачено створення власних класів та бібліотек.


3. Розробка стратегії гри для кожної категорії учасників


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

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

void completion_shooting()

{[A, 0] = 0;

(type_shot == «killed»)[B, 0] = 0;(type_shot == «live»)[B, 0] = 1;

(type_shot == «killed»). GridReport. Rows. Add (nameColor[list_people[0]] + «знищив» + nameColor [strongest_man]);(type_shot == «live»). GridReport. Rows. Add (nameColor[list_people[0]] + «не попав в» + nameColor [strongest_man]);. Enabled = false;_current_point();<int> All_people = new List<int>();(int i = 0; i < people. GetLength(0); i++)(people [i, 0] == 1) All_people. Add(i);(All_people. Count == 1)

{. Visible = true;. GridReport. Rows. Add («Гра завершена, переможець - » + nameColor [list_people[0]] + «»);. Text = «Гра завершена, переможець - » + nameColor [list_people[0]] + «»;

}

}


Даний фрагмент коду описує дії гравців в залежності від тої ситуації, яка склалася в ході жеребкування. Стратегія кожного з гравців, полягає у тому, що в будь якому випадку постріл потрібно виконувати по гравцю який має менший шанс на промах. Тобто у випадку коли жереб випав так, що першим стріляє гравець із імовірністю на враження 50% він буде виконувати постріл по опоненту з шансів у 100% враховуючи, що гравець із шансом 80% може схибити при своєму пострілі.



4. Створення об'єктної моделі системи

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

Нижче приведена діаграма послідовностей для прецеденту «Запуск гри» (див рис. 3.1). Діаграма послідовностей дозволяє досить детально описати внутрішні процеси, які виникають під час виконання прецеденту. Діаграма містить ось часу, що спрямована зверху вниз; всіх виконавців; повідомлення або запити між виконавцями; посилання на інші прецеденти.


Рисунок 4.1 - Діаграма послідовностей для прецеденту «Запуск гри»


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

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

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

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

Далі розглянемо об'єктну модель (рис. 4.1). На якій відображені класи гри та їх атрибути, методи і зв'язки між ними.


Рисунок 4.1 - UML діаграми гри «Дуель»

Система складається з таких класів:

Form - абстрактний клас-предок для всіх об'єктів, які відображаються на екрані, які є основними об'єктами у грі;

Методи класу:_Load - початкове розташування обєктів даний метод відображає початкове розташування обєктів на екрані._Tick - забезпечує відтворення руху кулі на формі та покрокову зміну її положення відповідно до ситуації._real_people - забезпечує ефект жеребкування гравців в хаотичному порядку та їх шанси на перемогу._shooting - визначає результат пострілу та стан гравця в якого виконувався постріл. В залежності від шансу на влучання в ціль._current_state - виводить на екран статистичні параметри після виконання основного блоку прогами._Click - забезпечення автоматичної роботи програми._Click - метод відповідає за роботу меню.- ширина об'єкта;- висота об'єкта;- позиція об'єкта на ігровому полі;- границі об'єкту;- прапорець перевірки чи існує зараз об'єкт, якщо об'єкт не існує, то в подальшому не потрібно його відображати у вікні.

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

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


5. Розробка власного компоненту


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

void timer1_Tick (object sender, EventArgs e)

{

// поточне положення куліAX = 0, AY = 0, BX = 0, BY = 0;= bullet [A, 1];= bullet [A, 2];= bullet [B, 1];= bullet [B, 2];

[A, 0] = 1;


// постріл кулі((AX > BX + beside_people) && ((bullet_move_x == «XLeft») || (bullet_move_x == «»)))

{-= (float) Math. Abs((SAX - SBX - beside_people) / speed);[A, 1] = AX;(point_step == 0) bullet_move += «XLeft»;(point_step == 0) bullet_move_x = «XLeft»;

}((AX + beside_people < BX) && ((bullet_move_x == «XRight») || (bullet_move_x == «»)))

{+= (float) Math. Abs((SBX - SAX - beside_people) / speed);[A, 1] = AX;(point_step == 0) bullet_move += «XRight»;(point_step == 0) bullet_move_x = «XRight»;

}((AY < BY + beside_people) && ((bullet_move_y == «YDown») || (bullet_move_y == «»)))

{+= (float) Math. Abs((SBY - SAY + beside_people) / speed);[A, 2] = AY;(point_step == 0) bullet_move += «YDown»;(point_step == 0) bullet_move_y = «YDown»;

}((AY + beside_people > BY) && ((bullet_move_y == «YUP») || (bullet_move_y == «»)))

{-= (float) Math. Abs((SAY - SBY + beside_people) / speed);[A, 2] = AY;(point_step == 0) bullet_move += «YUP»;(point_step == 0) bullet_move_y = «YUP»;

}

(bullet_move == «XLeftYDown»)((AX <= BX + beside_people) && (AY >= BY + beside_people))_shooting();(bullet_move == «XLeftYUP»)((AX <= BX + beside_people) && (AY + beside_people <= BY))_shooting();(bullet_move == «XRightYDown»)((AX + beside_people >= BX) && (AY >= BY + beside_people))_shooting();(bullet_move == «XRightYUP»)((AX + beside_people >= BX) && (AY + beside_people <= BY))_shooting();(bullet_move == «XLeft»)(AX <= BX + beside_people)_shooting();(bullet_move == «XRight»)(AX + beside_people >= BX)_shooting();(bullet_move == «YDown»)(AY >= BY + beside_people)_shooting();(bullet_move == «YUP»)(AY + beside_people <= BY)_shooting();

_step += 1;

. Refresh();


}


Даний компонент виконує математичну модель по розрахунку розміщення кулі в просторі та вираховує параметри Х та Y для моделювання плавного руху кулі по формі.

6. Програмна реалізація спроектованої системи


В ході курсової роботи перед нами постає завдання у реалізації компютерної гри «Дуель». В розробці було вжито деякі особливості, на яких я би хотів зупинити увагу.

Реалізації взаємодії між гравцем та системою був розроблений за допомогою Microsoft Visual Studio.

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

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

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

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


6.1 Опис взаємодії гри з користувачем


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

Дана гра передбачає те, що користувач мусить задіяти свою інтуїцію у виборі на якого дуелянта йому потрібно поставити, щоб перемогти, цей аспект і передає весь азарт даної гри.

Зважаючи на це був розроблений інтерфейс гри який представлений на рисунку 6.1


Рисунок 6.1 - Інтерфейс гри «Дуель»


Як видно на Рисунок 4.1 інтерфейс представлений у вигляді обєкта відображення динаміки подій на якому при запуску промальовуються моделі 5 дуелянтів, та зони взаємодії з користувачем.

Згідно поставленої задачі було розроблено меню яке складається з пунктів таких як, «Гра» рисунок 6.2


Рисунок 6.2 - Пункт меню «Гра»


До даного пункту входять події з допомогою яких користувач може закінчити гру, або почати її з початку.

Наступною необхідною умовою була розробка інструкції рисунок 6.3 з допомогою, якої користувач може дізнатися про дану гру та її запропоновані правила. Дана модель може передбачати формування гравцем власних правил, які не відповідають запропонованим.


Рисунок 6.3 - Пункт меню «Інструкція»


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

-«Нова гра»

-«Постріл»

-«Стоп»

-«Автоматична гра»

-«Звіт гри»


Рисунок 6.4 - Поле взаємодії із гравцем


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

Моделі гравців представлені на формі круглими областями різних кольорів рисунок 6.5


Рисунок 6.5 - Відображення дуелянтів на формі

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


Рисунок 6.6 - Відображення мертвих дуелянтів

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


Рисунок 6.7 - Відображення мертвих дуелянтів


При розробці програми розглядалась можливість, що користувач даної програми може сам вигадувати правила тому для більшої наглядності того, що відбулося на формі була створена додаткова кнопка «Звіт гри»

При натисненні на неї користувачі можуть отримати детальний звіт даної гри, що усуне будь які конфлікти при з'ясуванні переможця рисунок 6.8


Рисунок 6.8 - Звіт гри

Також у нас розробленні кнопка «Автоматична гра» дана функція розроблена для того, щоб користувач не затруднявся постійним нажиманням кнопки «Постріл». Дана кнопка виконує всі кроки автоматично, до моменту закінчення гри це є досить зручно коли гравців стає більше.

Кнопка «Стоп» зупиняє автоматичне виконання гри.


6.2 Загальні відомості про програму


Програма, яка реалізована як курсовий проект - цє компютерна гра «Дуель». Вона розроблена в середовищі Microsoft Visual Studio 2010 та на обєктно-орієнтовній мові програмування С# під платформу Microsoft. Net 3.5 з використанням XNA Framework 3.1.

Для того, щоб запустити мою програму необхідно мати на компютері таке програмне забезпечення, як встановлений. Net Framework версії не нижче 3.0.

Для запуску програми необхідно мати файл.exe та папку Content із необхідними графічними файлами.

Програма разом з контентом займає 656 КБ памяті на жорсткому диску.

Характеристики персонального компютера, необхідні для нормального функціонування програми:

процесор Intel Celeron 800;

256 МБ ОЗП;

не менш ніж 10 МБ вільного місця на жорсткому диску;

установлене на компютері програмне забезпечення Microsoft. Net не нижче 3.0 та Microsoft XNA Framework 3.1;

ОС Microsoft XP Professional Service Pack 2;

монітор Samsung або ін.


Висновки


При розробці даного курсового проекту був виконаний повний аналіз курсу «Теорія створення програмних продуктів» та проведений детальний аналіз існуючих компонентних технологій.

В ході курсового проектування була проаналізована предметна область, вивчені принципи побудови компютерних ігор за допомогою таких інструментів, як Microsoft XNA Framework та інші, вирішені проблеми, вказані в аналізі предметної області.

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

Виконавши курсовий проект, ми вивчили основні питання проектування і організації компютерних ігор, спроектувавши програмну архітектуру компютерної гри «Дуель». Вивчили та отримали навички розробки додатків мовою обєктно-орієнтовного програмування C# для платформи Microsoft. Net з використанням додаткових інструментів розробки компютерних ігор Microsoft XNA Framework. В кінцевому результаті отримали реалізацію усі поставлені задачі, які були сформульовані у постановці завдання.

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

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

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


  1. Брукс Ф. Мифический человеко-месяц, или как создаются программные комплексы. - М: «Символ-Плюс», 2010 г. - 304 с.
  2. Ватсон К. C#. - М.: Лори, 2004. - 880 с.
  3. Вирт Н. Алгоритмы и структуры данных. - Спб: Невский диалект, 2001 г. - 352 с.
  4. Гиббонз П. Платформа.NET для Java-программистов. - СПб.: Питер, 2009. - 336 с.
  5. Голуб А.И. С и С++. Правила программирования. - М: БИНОМ, 1996 г. - 272 с.
  6. Гуннерсон Э. Введение в C#. Библиотека программиста. - СПб.: Питер, 2001. - 304 с.
  7. Кораблев В. Самоучитель Visual C++.NET. - СПб.: Питер; Киев: Издательская группа BHV, 2011. - 528 с.
  8. Либерти Д. Программирование на C#. - СПб.: Символ-Плюс, 2003. - 688 с.
  9. Майо Д. C#. Искусство программирования. Энциклопедия программиста. - Киев: «ДиаСофт», 2012. - 656 с.
  10. Майо Дж. C# Builder. Быстрый старт. - М.: Бином, 2005. - 384 с.
  11. Микелсен К. Язык программирования C#. Лекции и упражнения. Учебник. - Киев: «ДиаСофт», 2009. - 656 с.
  12. Оньон Ф. Основы ASP.NET с примерами на C#. - М.: Издательский дом «Вильямс», 2003. - 304 с.
  13. Павловская Т.А. С/С++. Программирование на языке высокого уровня. Учебник для вузов. - СПб.: Питер, 2008. - 464 с.
  14. Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник для вузов. - СПб.: Питер, 2003. - 393 с.
  15. Паппас К., Мюррей У. Эффективная работа: Visual C++.NET. - СПб.: Питер, 2008. - 816 с.
  16. Петцольд Ч. Программирование для MS Windows на C#. Том 1. - М.: Издательско-торговый дом «Русская Редакция», 2009. - 576 с.
  17. #"justify">#"justify">#"justify">#"justify">#"justify">Додаток


    Лістинг


    using System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;System. Threading;

    Dueling

    {partial class Home: Form

    {

    Home()

    {();

    }


    // напрям куліA, B;

    // швидкість куліspeed = 10;

    // біля куліbeside_people = 0;

    // лічильникpoint_step = 0;

    // початкове положення куліSAX, SAY, SBX, SBY;

    // тип переміщення (очистка)bullet_move, bullet_move_x, bullet_move_y;

    // розмір куліsize_bullet = 10;

    // тип пострілуtype_shot;


    // кольора людей та куль[] nameColor = new string[] {«Orange», «Green», «Blue», «Pink», «Violet»};[] peopleColor = new Color[] {Color. Orange, Color. Green, Color. Blue, Color. Pink, Color. Violet};[] bulletColor = new Color[] {Color. Orange, Color. Green, Color. Blue, Color. Pink, Color. Violet};

    // кількість людей та людей[,] people = new float [6, 6];[,] bullet = new float [6, 5];

    DlReport = new Report();

    void Home_Load (object sender, EventArgs e)

    {_current_state();

    }

    void Home_Paint (object sender, PaintEventArgs e)

    {. Focus();

    }

    void pictureBox1_Paint (object sender, PaintEventArgs e)

    {

    // отрісовка куль зазначених в масиві(int i = 0; i < people. GetLength(0); i++)

    {currentColor = new Color();(people [i, 0] == 1)= peopleColor[i];= Color. Red;

    . Graphics. FillEllipse (new SolidBrush(currentColor), people [i, 1], people [i, 2], people [i, 3], people [i, 4]);

    }(int i = 0; i < bullet. GetLength(0); i++)

    {(bullet [i, 0]!= 0). Graphics. FillEllipse (new SolidBrush (bulletColor[i]), bullet [i, 1], bullet [i, 2], bullet [i, 3], bullet [i, 4]);

    }

    }

    void timer1_Tick (object sender, EventArgs e)

    {

    // поточне положення куліAX = 0, AY = 0, BX = 0, BY = 0;= bullet [A, 1];= bullet [A, 2];= bullet [B, 1];= bullet [B, 2];

    // стріляюча кулька стає видимою[A, 0] = 1;


    // постріл кулі((AX > BX + beside_people) && ((bullet_move_x == «XLeft») || (bullet_move_x == «»)))

    {-= (float) Math. Abs((SAX - SBX - beside_people) / speed);[A, 1] = AX;(point_step == 0) bullet_move += «XLeft»;(point_step == 0) bullet_move_x = «XLeft»;

    }((AX + beside_people < BX) && ((bullet_move_x == «XRight») || (bullet_move_x == «»)))

    {+= (float) Math. Abs((SBX - SAX - beside_people) / speed);[A, 1] = AX;(point_step == 0) bullet_move += «XRight»;(point_step == 0) bullet_move_x = «XRight»;

    }((AY < BY + beside_people) && ((bullet_move_y == «YDown») || (bullet_move_y == «»)))

    {+= (float) Math. Abs((SBY - SAY + beside_people) / speed);[A, 2] = AY;(point_step == 0) bullet_move += «YDown»;(point_step == 0) bullet_move_y = «YDown»;

    }((AY + beside_people > BY) && ((bullet_move_y == «YUP») || (bullet_move_y == «»)))

    {-= (float) Math. Abs((SAY - SBY + beside_people) / speed);[A, 2] = AY;(point_step == 0) bullet_move += «YUP»;(point_step == 0) bullet_move_y = «YUP»;

    }

    (bullet_move == «XLeftYDown»)((AX <= BX + beside_people) && (AY >= BY + beside_people))_shooting();(bullet_move == «XLeftYUP»)((AX <= BX + beside_people) && (AY + beside_people <= BY))_shooting();(bullet_move == «XRightYDown»)((AX + beside_people >= BX) && (AY >= BY + beside_people))_shooting();(bullet_move == «XRightYUP»)((AX + beside_people >= BX) && (AY + beside_people <= BY))_shooting();(bullet_move == «XLeft»)(AX <= BX + beside_people)_shooting();(bullet_move == «XRight»)(AX + beside_people >= BX)_shooting();(bullet_move == «YDown»)(AY >= BY + beside_people)_shooting();(bullet_move == «YUP»)(AY + beside_people <= BY)_shooting();

    // Вмще зазначений код відповідає моделюванню руху кулі_step += 1;

    . Refresh();


    }

    <int> list_people = new List<int>();strongest_man;void random_real_people()

    {_people. Clear();strongest = -1;_man = -1;(int i = 0; i < people. GetLength(0); i++)

    {(people [i, 0] == 1)_people. Add(i);

    }random = new System. Random();(int i = 0; i < list_people. Count; i++)

    {j = random. Next (list_people. Count);temp = list_people[i]; list_people[i] = list_people[j]; list_people[j] = temp;

    }(int i = 0; i < list_people. Count; i++)((people [list_people[i], 5] > strongest) && (list_people[i]!= list_people[0]))

    {= people [list_people[i], 5];_man = list_people[i];

    }

    }


    // завершення пострілу куліvoid completion_shooting()

    {

    // скриваєм кулю[A, 0] = 0;


    // статус людини(type_shot == «killed»)[B, 0] = 0;(type_shot == «live»)[B, 0] = 1;

    (type_shot == «killed»). GridReport. Rows. Add (nameColor[list_people[0]] + «знищив» + nameColor [strongest_man]);(type_shot == «live»). GridReport. Rows. Add (nameColor[list_people[0]] + «не попав в» + nameColor [strongest_man]);


    // зупинка кулі. Enabled = false;_current_point();<int> All_people = new List<int>();(int i = 0; i < people. GetLength(0); i++)(people [i, 0] == 1) All_people. Add(i);(All_people. Count == 1)

    {. Visible = true;. GridReport. Rows. Add («Гра завершена, переможець - » + nameColor [list_people[0]] + «»);. Text = «Гра завершена, переможець - » + nameColor [list_people[0]] + «»;

    }

    }

    void upgrade_current_point()

    {(int i = 0; i < bullet. GetLength(0); i++)

    {[i, 0] = 0;[i, 1] = people [i, 1] + (float) Math. Round((float) (people [i, 3] - size_bullet) / 2);[i, 2] = people [i, 2] + (float) Math. Round((float) (people [i, 4] - size_bullet) / 2);[i, 3] = size_bullet;[i, 4] = size_bullet;

    }

    . Refresh();

    }

    private void upgrade_current_state()

    {

    // початкові параметриCountRowsDB = DlReport. GridReport. Rows. Count - 1;(CountRowsDB == 0). GridReport. Rows. Add («Нова гра розпочата»);(CountRowsDB > 0)(DlReport. GridReport. Rows [CountRowsDB-1].Cells[0].Value. ToString()!= «Нова гра розпочата»). GridReport. Rows. Add («Нова гра розпочата»);

    . Visible = false;. Text = «Інформація»;

    [0, 0] = 1;[0, 1] = 75;[0, 2] = 20;[0, 3] = 50;[0, 4] = 50;[0, 5] = 10;

    [1, 0] = 1;[1, 1] = 300;[1, 2] = 20;[1, 3] = 50;[1, 4] = 50;[1, 5] = 8;

    [2, 0] = 1;[2, 1] = 90;[2, 2] = 170;[2, 3] = 50;[2, 4] = 50;[2, 5] = 5;

    [3, 0] = 1;[3, 1] = 290;[3, 2] = 170;[3, 3] = 50;[3, 4] = 50;[3, 5] = 5;

    [4, 0] = 1;[4, 1] = 190;[4, 2] = 220;[4, 3] = 50;[4, 4] = 50;[4, 5] = 5;


    // вище реалізується занесення інформації про дуелянтів до масиву_current_point();

    . Focus();

    }

    random_shot = new Random();

    void btnNewGame_Click (object sender, EventArgs e)

    {

    // Початок нової гри_current_state();

    }

    void btnShot_Click (object sender, EventArgs e)

    {. Focus();

    _real_people();(list_people. Count == 1);


    // номера людей= list_people[0];= strongest_man;

    // визначення статусу дуелянта(Convert. ToInt32 (Math. Round (people[list_people[0], 5])) >= random_shot. Next (1, 11))_shot = «killed»;_shot = «live»;


    // додаємо лічильник_step = 0;


    // створюємо розгалуження(type_shot == «killed»)_people = 0;(type_shot == «live»)_people = 40;

    // визначаємо статус положення кулі_move = «»;_move_x = «»;_move_y = «»;


    // встановлюємо початкове положення кулі= bullet [A, 1];= bullet [A, 2];= bullet [B, 1];= bullet [B, 2];


    // запуск кулі. Enabled = true;

    }

    stopAutomatic = false;

    void timerAutomatic_Tick (object sender, EventArgs e)

    {((stopAutomatic) || (CptInfo. Text!= «Інформація»))

    {. Enabled = false;= false;. Enabled = true;

    }. PerformClick();

    }

    void btnAutomatic_Click (object sender, EventArgs e)

    {

    // Автоматичне виконання гри після натиснення кнопки. Focus();_current_state();= false;. Enabled = true;. Enabled = false;

    }

    void btnAutomaticStop_Click (object sender, EventArgs e)

    {

    // реалізація кнопки зупинка. Focus();= true;. Enabled = true;

    }

    void btnReport_Click (object sender, EventArgs e)

    {. Focus();. ShowDialog();

    }

    void NewMenuItem_Click (object sender, EventArgs e)

    {_current_state();

    }

    void CloseMenuItem_Click (object sender, EventArgs e)

    {

    // Кнопка закриття();

    }

    void MenuItem2_Click (object sender, EventArgs e)

    {

    // вивід на екран інструкціїMsgDialog = new MessageDialog();. Text = «Інструкція»;. ShowDialog();

    }

    void MenuItem3_Click (object sender, EventArgs e)

    {

    // інформація про автораMsgDialog = new MessageDialog();. Text = «Про автора»;.richTextBox. Text = «Cтудент: Кратасюк Віктор Васильвич\r\nНавчальний заклад: ВНТУ\r\nГрупа:1КН-12 мс\r\nПочта [email protected]\r\nВконтакт: id186257367»;. ShowDialog();

    }


    }

    }


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

    Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ