Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 25.11.2024

PAGE   \* MERGEFORMAT33

ЗМІСТ

[1] ЗМІСТ


ВСТУП

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

Розвиток науки в цій галузі на даний момент дозволяє створювати ігри, максимально наближені до реальності. Існує велика кількість корпорацій, що займається розробкою комп’ютерних ігор (EA Video Games, Buka Entertainment, 1C, Neo-Games, АКЕЛЛА, SIERRA та інші).

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

  1.  
    АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБҐРУНТУВАННЯ ЗАВДАННЯ НА РОБОТУ

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

  1.   Предметна область

Куточки - настільна логічна гра на квадратному полі розміром 7х7 кліток для двох учасників або гравець-комп'ютер. Мета гри переставити всі свої шашки в будинок суперника. Гравець зробив це першим виграє. Оригінальна версія грається на дошці 16x16, в Україні більш популярний варіант гри на шахівниці, 7х7 кліток.

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

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

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

  1.   Існуючі реалізації

Куточки  –  відома китайська гра, заснована на логіці. Але з розвитком комп’ютерних технологій з’явилося багато електронних аналогів даної гри. Розглянемо два з  них.

Перша гра, розроблена сайтом online – games-zone.com, називається “Halma” (рис 1.1).

Рисунок 1.1-вікно гри “Halma”

Другий аналог розроблений сайтом http://webaist.ru (рис 1.2). Збережені всі оригінальні правила гри. Розміщення шашок є вірним та зрозумілим. Інтерфейс зручний, зрозумілий та приємний.

Головним недоліком гри є те, що вона не розрахована на гру по мережі між користувачами, можлива тільки гра по інтернету.

Рисунок 1.2-Вікно гри куточки

Процес гри швидкий та зручний. Грати можна одразу з живим гравцем по інтернету.

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

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

Використовуючи мову програмування C#:

  1.  Розробити гру за заданим варіантом.
  2.  Розробити клас гра та клас гравець.
  3.  Кожен клас повинен містити public, private, static властивості та методи.
  4.  В кожному класі повинно бути реалізовано мінімум три властивості та три методи.
  5.  Спроектувати конструктор для одного з класів.
  6.  Реалізувати можливість гри по мережі одним з способів.
  7.  Перший спосіб – реалізація окремо серверного та клієнтського додатку.
  8.  Другий спосіб – реалізація одного додатку з можливістю вибору режиму сервера або клієнта відповідно.
  9.  Якщо за правилами гри необхідно очікувати хід іншого гравця

(противника) то потрібно заблокувати ігрове поле та вивести

відповідне повідомлення про очікування ходу.

  1.  Інтерфейс гри розробити за допомогою технології Windows Forms.
  2.  Розробити вікно довідки в якій вказати автора програми та коротку інструкцію користувача.

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

  1.  комп’ютер серії IBM PC з частотою 233 МГц  і вище;
  2.  64МБ оперативної пам’яті;
  3.  графічний адаптер SVGA (Super Video Graphic Adapter);
  4.  відеокарта об’ємом пам’яті не менше 4МБ;
  5.  клавіатура;
  6.  ОС Windows Vista/7/ХР;
  7.  .NET Framework 3.5.

  1.   Обґрунтування вибору мови програмування

Середа в якій було розроблено додаток Microsoft Visual Studio 2010.

Microsoft Visual Studio - лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів. Дані продукти дозволяють розробляти як консольні додатки, так і додатки з графічним інтерфейсом, в тому числі з підтримкою технології Windows Forms, а також веб – сайти, веб-додатки, веб-служби як в рідному, так і в керованому кодах для всіх платформ, підтримуваних Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework і Microsoft Silverlight. Visual Studio включає в себе редактор вихідного коду з підтримкою технології IntelliSense і можливістю найпростішого рефакторинга коду.

Вбудований відладчик може працювати як відладчик рівня вихідного коду, так і як відладчик машинного рівня. Решта вбудовувані інструменти включають в себе редактор форм для спрощення створення графічного інтерфейсу додатки, веб-редактор, дизайнер класів і дизайнер схеми бази даних. Visual Studio дозволяє створювати і підключати сторонні доповнення (плагіни) для розширення функціональності практично на кожному рівні, включаючи додавання підтримки систем контролю версій вихідного коду (як наприклад, Subversion і Visual SourceSafe), додавання нових наборів інструментів (наприклад, для редагування і візуального проектування коду на предметно-орієнтованих мовах програмування або інструментів для інших аспектів циклу розробки програмного забезпечення (наприклад, клієнт Team Explorer для роботи з Team Foundation Server).

Microsoft Visual Studio - лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів. Дані продукти дозволяють розробляти як консольні додатки, так і додатки з графічним інтерфейсом, в тому числі з підтримкою технології Windows Forms, а також веб-сайти, веб-додатки, веб-служби як в рідному, так і в керованому кодах для всіх платформ, підтримуваних Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework і Microsoft Silverlight. Visual Studio включає в себе редактор вихідного коду з підтримкою технології IntelliSense і можливістю найпростішого рефакторинга коду.

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

Visual Studio дозволяє створювати і підключати сторонні доповнення (плагіни) для розширення функціональності практично на кожному рівні, включаючи додавання підтримки систем контролю версій вихідного коду (як наприклад, Subversion і Visual SourceSafe), додавання нових наборів інструментів (наприклад, для редагування і візуального проектування коду на предметно-орієнтованих мовах програмування або інструментів для інших аспектів циклу розробки програмного забезпечення (наприклад, клієнт Team Explorer для роботи з Team Foundation Server). Microsoft Visual Studio – лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів.

Дані продукти дозволяють розробляти як консольні додатки, так і додатки з графічним інтерфейсом, в тому числі з підтримкою технології Windows Forms, а також веб-сайти, веб-додатки, веб-служби як в рідному, так і в керованому кодах для всіх платформ, підтримуваних Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework і Microsoft Silverlight. Visual Studio включає в себе редактор вихідного коду з підтримкою технології IntelliSense і можливістю найпростішого рефакторинга коду.

Вбудований відладчик може працювати як відладчик рівня вихідного коду, так і як відладчик машинного рівня. Решта вбудовувані інструменти включають в себе редактор форм для спрощення створення графічного інтерфейсу додатки, веб-редактор, дизайнер класів і дизайнер схеми бази даних. Visual Studio дозволяє створювати і підключати сторонні доповнення (плагіни) для розширення функціональності практично на кожному рівні, включаючи додавання підтримки систем контролю версій вихідного коду (як наприклад, Subversion і Visual SourceSafe), додавання нових наборів інструментів (наприклад, для редагування і візуального проектування коду на предметно-орієнтованих мовах програмування або інструментів для інших аспектів циклу розробки програмного забезпечення (наприклад, клієнт Team Explorer для роботи з Team Foundation Server).

Visual Studio побудована на архітектурі, підтримуючій можливість використання вбудованих додатків (англ. Add-Ins) – плагінів від сторонніх розробників, що дозволяє розширювати можливості середовища розробки.

Дуже часто можна прослідкувати такий зв'язок - чим більше мова захищена і стійка до помилок, тим менше продуктивність програм, написаних на ній. Наприклад, розглянемо дві крайнощі – очевидно це Assembler і Java.

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

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

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

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

Також в C# вжиті заходи для виключення помилок при оновленні програмного забезпечення. Зміна коду, в такій ситуації, може непередбачувано змінити суть самої програми. Щоб допомогти розробникам боротися з цією проблемою C# включає підтримку сумісності версій (vesioning). Зокрема, на відміну від C++ і Java, якщо метод класу був змінений, це повинно бути спеціально обумовлено.

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

В C# була уніфікована система типів, тепер ви можете розглядати кожен тип як об'єкт. Не дивлячись на те, використовуєте ви клас, структуру, масив або вбудований тип, ви можете звертатися до нього як до об'єкту. Об'єкти зібрані в простори імен (namespaces), які дозволяють програмно звертатися до чого-небудь. Це значить що замість списку файлів, що включаються, заголовків в своїй програмі потрібно написати які простори імен, для доступу до об'єктів і класів усередині них, ви хочете використовувати. В C# вираз using дозволяє вам не писати кожного разу назву простору імен, коли ви використовуєте клас з нього. Наприклад, простір імен System містить декілька класів, у тому числі і Console. І ви можете писати або назву простору імен перед кожним зверненням до класу, або використовувати using як це було показано в прикладі вище.

Важливою і відмітною від С++ особливістю C# є його простота. В C#, оператор"->" використовується дуже обмежено (в unsafe блоках), оператор "::" взагалі не існує. Практично завжди ви використовуєте тільки оператор "."

Ще один приклад. При написанні програм на C/С++ вам доводилося думати не тільки про типи даних, але і про їх розмір в конкретній реалізації. В C# все спрощено - тепер символ Unicode називається просто char (а не wchar t, як в С++) і 64-бітове ціле тепер - long (а не __int64). Також в C# немає знакових і беззнакових символьних типів. Програмістам було не так легко під час вивчення C++ повністю освоїтися з механізмом посилань і покажчиків. В C# (як і в Java) немає покажчиків. Насправді нетривіальність покажчиків відповідала їх корисності. Наприклад, деколи важко собі уявити програмування без покажчиків на функції. Відповідно до цього в C# присутні Delegates - як прямий аналог покажчика на функцію, але їх відрізняє типова захищеність, безпека і повна відповідність концепціям об'єктно-орієнтованого програмування.

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

1.5 Можливості платформи  .Net Framework  для створення програм

Microsoft .NET  — програмна технологія, запропонована  Microsoft як платформа для створення як звичайних програм, так і веб-програм. Багато в чому є продовженням ідей та принципів, покладених в технологію Java. Одною з ідей .NET є сумісність служб, написаних різними мовами. Хоча ця можливість рекламується Microsoft як перевага .NET, платформа Java має таку саму можливість.

Кожна бібліотека (збірка) в .NET має відомості про свою версію, що дозволяє усунути можливі конфлікти між різними версіями збірок.

.NETкрос-платформена технологія, в цей час існує реалізація для платформи Microsoft Windows, FreeBSD (від Microsoft) і варіант технології для ОС Linux в проекті Mono (в рамках угоди між Microsoft з Novell), DotGNU.

Захист авторських прав відноситься до створення середовищ виконання (CLR — Common Language Runtime) для програм .NET. Компілятори для .NET випускаються багатьма фірмами для різних мов вільно.

.NET поділяється на дві основні частини – середовище виконання (по суті віртуальна машина) та інструментарій розробки.

Середовища розробки .NET-програм: Visual Studio .NET (C++,  C#,  J#),  SharpDevelop,  Borland Developer Studio (Delphi, C#) і т. д.

Як і технологія Java, середовище розробки .NET створює байт-код, призначений для виконання віртуальною машиною. Вхідна мова цієї машини в .NET називається CIL (Common Intermediate Language), також відома як MSIL (Microsoft Intermediate Language), або просто IL. Застосування байт-кода дозволяє отримати кроссплатформеність на рівні скомпільованого проекту (в термінах .NET: збірка), а не на рівні початкового тексту, як, наприклад, в С. Перед запуском збірки в середовищі виконання (CLR) байт-код перетворюється вбудованим в середовище JIT-компілятором (just in time, компіляція на льоту) в машинні коди цільового процесора. Слід зазначити, що один з перших JIT-компіляторів для Java був також розроблений фірмою Microsoft (тепер в Java використовується досконаліша багаторівнева компіляція – Sun HotSpot). Сучасна технологія динамічної компіляції дозволяє досягнути аналогічного рівня швидкодії з традиційними «статичними» компіляторами (наприклад, С++) і питання швидкодії часто залежить від якості того чи іншого компілятора.
Розробка платформи почалася в 1999 році. Офіційно про розробку нової технології було оголошено 13 січня 2000, в день коли Білл Гейтс офіційно оголосив про передачу поста глави Microsoft Стіву Балмеру.

У цей день керівництвом корпорації була озвучена нова стратегія компанії, що отримала назву Next Generation Windows Services (NGWS, «нове покоління служб Windows»). Нова стратегія повинна була об'єднати в єдиний набір існуючі та майбутні розробки Microsoft для надання можливості користувачам працювати з всесвітньою павутиною з бездротових пристроїв, що володіють доступом в інтернет, як зі стаціонарних комп'ютерів.

Microsoft .NET Framework  – платформа універсальна, і може вирішувати безліч завдань і їх число зростає з кожною новою версією. Microsoft вкладає величезні зусилля в розвиток .NET, справедливо вважаючи його своєї флагманської технологією.[6]

Можливості .NET Framework:

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

Програмування для Web. Технологія, що дозволяє розробляти Web -рішення на .NEТ, називається ASP.NET. ASP.NET для створення Web-додатків з багатою функціональністю. У відмінності від Windows-додатків, тут у неї багато гідних і сильних конкурентів: PHP, Python, Ruby on Rails, Perl тощо. Є цікаві рішення, що дозволяють сильно полегшити і прискорити розробку, наприклад ASP.NET MVC Framework або Web Client Software Factory. Дуже цікава технологія Silverlight.

Використовуючи її можна робити інтерактивні, багаті графікою Web-додатки. Фактично Silverlight/C#, конкурент Adobe Flash/ActionScript .

- Розробка розподілених корпоративних додатків. Це Web-сервіси, служби рівня підприємства, Remoting  – все це робиться легко і оптимально. Технологія доступу до даних (ADO.NET), яка так важлива для корпоративних рішень, після версії Microsoft .NET Framework 2.0 стала майже ідеальною. Єдиний гідний конкурент для .NET в цій області – Java/J2EE .

- Крос-платформне програмування. Найвідомішою крос – платформної реалізацією .NET є Mono. Це open - source проект спонсорований фірмою Novell. Програми написані під Mono працюють в Linux, FreeBSD, MacOS і Windows. В даний час Mono портується під мобільні платформи Android і iPhone. На превеликий жаль Microsoft не проявляє інтересу до переносу .NET на інші платформи. Коли .NET тільки з'являлася, вони казали, що кроссплатформенность - її друге ім'я. А потім замкнулися в межах Windows. Завдяки відкритим специфікаціям. NET open  – source співтовариства отримали можливість реалізовувати .NET технології на інших платформах.

- Програмування мікроконтролерів. Мікроконтролерів в десятки разів більше ніж звичайних процесорів. Вони всюди: в стільникових і звичайних телефонах, телевізорах, моніторах, мікрохвильовки, кондиціонерах, пральних машинах, холодильниках, MP3-плеєрах, автомобілях, фотоапаратах та інших приладах, і всіх їх треба запрограмувати. Довгий час програмування мікроконтролерів було прерогативою C і Assembler, а пізніше з'явилася можливість писати на деяких мовах високого рівня, C# в їх числі.

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

Microsoft XNA – дозволяє розробляти ігри з використанням інтенсивної 3D графіки не тільки для Windows, але і для ігрової консолі Xbox 360.

Програмування на системному рівні. На C# можна програмувати мікроконтролери.

Отже, на даний час платформа .Net вважається найбільш універсальною для програмування  майже всіх можливих програм і додатків. В особливості ігор, мікроконтролерів, різноманітних додатків для Windows та Web. Мережева гра, реалізація якої розроблена і розглянута у даній курсовій роботі написана на платформі .Net на мові C#, опис якої розглянуто нижче.

1.6 Висновки

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

Для розробки програми обрана мова програмування C#. Вона поєднує у собі простоту синтаксису та могутні виразні можливості, властиві для таких мов, як С++ та Java. Головною особливістю мови C# є його орієнтованість на платформу Microsoft .NET. Отже, ця мова є найбільш зручною для реалізації гри.

  1.  ПРОЕКТУВАННЯ МЕТОДІВ ТА ЗАСОБІВ ГРИ «КУТОЧКИ»

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

2.1 Розробка діаграми класів

Завдяки можливостям об’єктно-орієнтованої мови С#, для практичної реалізації гри «Куточки» необхідно буде використовувати класи об’єктів. На рис 2.1 зображена діаграма класу  Client. Цей клас містить у собі різноманітні змінні та методи.

Рисунок 2.1 – Діаграма класу Client та Server

Розглянемо детальніше змінні класу. В цій діаграмі класів змінні мають лише два модифікатори доступу: private та public, що на діаграмі позначаються відповідно «–» та «+». Тип private мають лише ті змінні, доступ до яких можливий лише всередині класу, змінні типу public мають загальний міжпакетний доступ.

Функція online буде створена як статична властивість, що містить у собі значення true/false, завдяки чому можна визначити чи підключений клієнт до сервера чи ні. serverIP – це властивість типу IPAddress, в якій буде написано ІР серверу до якого потрібно підключитись. сlient - це властивість, що містить об’єкт, який виконуватиме саме підключення до серверу. Властивість port типу int  - це мережевий порт, за яким буде працювати виконувана програма, його значення задається статично. Властивості fieldViewOur та fieldViewEnemy необхідні для зображення полів гравця та його суперника.

Метод – це блок коду, що містить набір інструкцій. Програма ініціює виконання операторів, викликаючи метод і задаючи необхідні аргументи методу. У C # всі інструкції виконуються в контексті методу. Визначення методу задає імена і типи будь-яких необхідних параметрів. Коли код виклику викликає метод, він надає конкретні значення, звані аргументами, для кожного параметра. Об'єкт може мати набір заздалегідь визначених вбудованих методів обробки, створених користувачем чи запозичених у стандартних бібліотеках, що виконуються при настанні визначених подій.

Метод Connect() буде здійснювати підключення до серверу програми. Метод ReceiverThread()  – це метод створення нового потоку для отримання мережевих повідомлень. Метод fillTxt(string value) використовуватиметься для виведення повідомлень у форму. Метод Sender(string msg) буде для відправки повідомлень, у вигляді масиву байтів.

Метод stopClient()  здійснюватиме зупинку і завершення роботи серверу клієнта. blockField() – метод для блокування поля під час ходу противника. unblockField() – метод для розблокування власного поля гравця після отримання даних про хід супротивника. Метод Form1_Load(object sender, EventArgs e) забезпечуватиме виконання методів для побудови ігрових полів та передачі ходу. initViews() - це метод, який здійснюватиме побудову ігрового поля гравця та його противника. Метод fieldViewEnemy_Click(object sender, EventArgs e) записуватиме координати поля, що вже обрані. Метод isWinning() визначатиме переможця гри. Метод Client_FormClosing(object sender, FormClosingEventArgs e) здійснюватиме завершення гри та відключення серверу.

Клас Client реалізує гру тільки для одного гравця, для повноцінної мережевої гри повинен ще існувати клас для другого гравця. Такого гравця реалізує клас Server.

Якщо порівнювати рисунки, то класи Client та Server дуже схожі між собою. Розглянемо, чим відрізняється клас Server.

Властивість listener буде здійснювати підключення для серверу та очікувати підключення клієнта. Властивість guest буде здійснювати підключення до серверу клієнта. Point – це властивість методу IPEndPoint, в якій зберігається право, хто і по якому порту має право підключатись до серверу. for_accepter – властивість для потоку.

Метод serverStart() запускатиме сервер. SocketAccepterThread() – це  метод, що створюватиме новий потік, який буде приймати підключення. SocketAccepter(object o) – це метод, який прийматиме підключення. MessageReceiver(Socket client) прийматиме повідомлення у вигляді масиву байтів. MessageSender(string mess) – метод відправки повідомлень по мережі про хід кожного гравця. serverStop() зупинятиме або відключатиме сервер.

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

2.2 Розробка діаграми взаємодій для визначення переможця

Переможцем вважається гравець, який першим займе місце шашок іншого гравця.

Для визначення переможця гри необхідно створити два методи whoWinner(), який буде мати тип public, та isWinning(), який буде мати тип private. Метод whoWinner() буде по черзі визначати чи зробив гравець хід. Метод isWinning() перевіряє значення, що повертає whoWinner(). Якщо одне з значень дорівнює -1, то isWinning() визначає кому з гравців видавати повідомлення про перемогу або програш.

Метод isWinning() необхідно викликати після  кожного ходу гравця.

Діаграму взаємодії для визначення переможця продемонстровано на рис 2.3.

Рисунок 2.3 – Діаграма взаємодій для визначення переможця

2.3 Проектування інтерфейсу користувача

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

2.4 Висновки

У даному розділі було спроектовано теоретичні підходи до реалізації гри «Куточки».

Оскільки мова C# є об’єктно-орієнтованою мовою, необхідною є умова використання класів об’єктів, тому для полегшення подальшої практичної реалізації програми було розроблено діаграми класів.

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

  1.  ПРОГРАМНА РЕАЛІЗАЦІЯ ГРИ «КУТОЧКИ»

На основі спроектованих методів та засобів гри «Куточки» розробимо програмну реалізацію гри, опишемо створений інтерфейс користувача та інструкцію роботи з програмою.

3.1 Програмна реалізація мережевого підключення

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

Програма має три основних форми: Program, Server та Client. Форма Program відповідає за створення двох інших форм та містить у собі textbox з ІР-адресою серверу. Server та Client – це два мережевих гравця. Форма Server створює мережеве підключення, а Client підключається до нього.

Для початку роботи необхідно вписати потрібні нам бібліотеки для роботи з мережею:

using System.Net.Sockets;

using System.Net;

using System.Threading;

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

Спочатку використаємо конструктор форми Server, щоб викликати метод створення серверу:

public Server(MainMenu a)

       {

           parent_form = a;

           InitializeComponent();

           serverStart();

       }

Метод запуску сервера створює нове підключення, описує ІР-адрес та порт, по якому можна підключитись. Після запуску сервера відбувається виклик методу SocketAccepterThread().

private void serverStart()

       {

           try

           {

               listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

               online = true;

               Point = new IPEndPoint(IPAddress.Any, port);

               listener.Bind(Point);

               listener.Listen(10);

           catch (Exception e)

           {

               MessageBox.Show(e.ToString());

           }

           SocketAccepterThread();

       }

Метод SocketAccepterThread() створює новий потік, по якому буде приймати підключення від Client.

private void SocketAccepterThread()

       {

           for_accepter = new Thread(new ParameterizedThreadStart(SocketAccepter));

           for_accepter.Start();

       }

В новому потоці необхідно виконати метод SocketAccepter().

Він приймає підключення та викликає метод прийому повідомлень.

private void SocketAccepter(object o)

       {

           while (Server.online && for_accepter.IsAlive)

           {

               try

               {

                   guest = listener.Accept();

                   MessageReceiver(guest);

               }

               catch (Exception ex)

               {

                   

               }

           }

       }

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

private void MessageReceiver(Socket client)

       {

           while (online)

           {

               byte[] bytes = new byte[1024];

               client.Receive(bytes);

               if (bytes.Length != 0)

               {

                   string data = Encoding.UTF8.GetString(bytes);

                   fillTxt(data);

               }

           }

           guest.Shutdown(SocketShutdown.Both);

       }

Метод MessageSender() відправляє повідомлення по мережі. За умови, що сервер працює, створюється масив байтів, стрічка перетворюється в байти та відправляється клієнту.

public void MessageSender(string mess)

       {

           if (Server.online)

           {

               byte[] bytes = new byte[1024];

               bytes = Encoding.UTF8.GetBytes(mess);

               try

               {

                   guest.Send(bytes);

               }

               catch (Exception ex)

               {

                   MessageBox.Show(ex.ToString());

               }

           }

Метод serverStop() зупиняє роботу серверу. Після цього нові потоки для прослуховування повідомлень і очікування підключень створюватись не будуть.

private void serverStop()

       {

           listener.Close();

           online = false;

       }

Програмна реалізація мережевого підключення працює згідно розробленої у другому розділі діаграми класів.

3.2 Програмна реалізація визначення переможця

Переможцем є гравець, який першим займе позиції іншого гравця.

Для реалізації визначення переможця гри необхідно використати метод private static типу  bool IsWordComplete().

Метод IsWordComplete() створюємо у класі AsynchronoSocketListener. Цей клас розміщений на cserver. Модифікатор доступу даного методу буде private, так як переможцем стає гравець чій крок був зроблений, а тип – bool, так як він буде повертати значення true або false.

Опис методу IsWordComplete()

{

           int length = currentWord.word.Length;

           string newWord = "";

           for (int i = 0; i < length; i++)

           {

               char ch = currentWord.word.ToCharArray()[i];

               int index = chars.IndexOf(ch);

               if (index == -1)

               {

                   return false;

               }

               else

                   newWord += ch;

           }

           return true;

       }

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

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

Метод перевіряє чи відгадані всі літери на полі. Якщо літери повністю відгадані, метод переходить до умови if, а саме до пункту else, та дописує зміст змінно ch до слова і повертає значення true. Поки перевірка повертатиме значення -1 це означатиме що переможець не визначений.

3.3 Інструкція користувача

Для запуску гри достатньо запустити виконуваний файл kutochky.exe. На екрані з’явиться головне вікно програми MainMenu. Спочатку потрібно запустити сервер програми натиснувши на кнопку Sever, потім знову запустити виконуваний файл та натиснути на кнопку Connect, щоб підключити клієнта.

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

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

Переможцем є гравець, який першим займе позиції суперника.

3.4 Висновки

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

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

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

Також описана інструкція користувача роботи з програмою.

ВИСНОВКИ

Завданням даної курсової роботи є розробка мережевої гри «Куточки».

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

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

На основі спроектованих методів та засобів гри «Куточки» розроблена практична реалізація самої гри. Описана інструкція користувача роботи з програмою.

Завдання курсової роботи виконано успішно. Інтерфейс програми простий та інтуїтивно зрозумілий для користувача.

ПЕРЕЛІК ПОСИЛАНЬ

  1.  Э. Стиллмен, Д. Грин. Изучаем C#. Санкт - Петербург, 2012.
  2.  Вікіпедія – Вільна енциклопедія, http://uk.wikipedia.org.
  3.  Дейтел Х., Дейтел П.,  Листфилд Дж. C#.Наиболее полное руководство. Санкт-Петербург: БХВ-Петербург, 2006.
  4.  Г. Шилдт. Полный справочник по С#. Москва – Санкт-Петербург – Киев: Вильямс, 2002.
  5.  Бадд Т. Объектно-ориентированное программирование в действии: Пер. с англ./Тимоти Бадд. – СПб.: Питер, 1997.
  6.  Керниган Б., Ритчи Д. Язык программирования Си (пер. с англ.). Москва: Финансы и статистика, 1992.
  7.  Українські підручники онлайн, http://pidruchniki.ws.
  8.  Хабрахабр – спільнота людей, зайнятих в індустрії високих технологій, http://habrahabr.ru/.
  9.  В. Олифер, Н. Олифер. Компьютерные сети. Принципы, технологии, протоколы. 4-е издание. Санкт-Петербург, 2010

10.  Рудой В.М. Системы передачи информации. МГОУ, 2004

ДОДАТКИ


Додаток А  Відношення діаграм класів Server та Client

А.1 – Відношення діаграм класів

Додаток Б Вікна програми

Б.1 – Вікно програми

Б.2 – Хід гравця

Додаток В  Лістинг програми

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace curs

   class pole

   {

       PictureBox[] p = new PictureBox[49];

       dbDB db;

       int width = 80, higth = 80;

       int x, y;

       Form f;

       public char thisnomber;

       Label L1, L2,L3;

       public pole() { }

       public pole(Form F)

       {

           thisnomber = 'w';

           db = new dbDB();

           f = F;

           x = 151;

           y = 44;

       }

       void font()

       {

           PictureBox test1 = new PictureBox();

           test1.Image = global::curs.Properties.Resources.fon1;

           test1.Location = new System.Drawing.Point(0, 0);

           test1.Name = "font";

           test1.Size = new System.Drawing.Size(900, 675);

           test1.TabIndex = 0;

           test1.TabStop = false;

           f.Controls.Add(test1);

       }

       public void user()

       {

           width = 10;

           higth = width;

           int z = 0;

           for (int i = 0; i != 3; i++)

           {

               for (int j = 4 + z; j != 7 + z; j++)

               {

                   p[j].Image = Properties.Resources._00;

                   p[j].Cursor = System.Windows.Forms.Cursors.Hand;

                   p[j].Click += new System.EventHandler(this.test);

                   p[j].Name = "b" + i.ToString() + "" + (j-z).ToString();

                   db.insertindex(p[j].Name);

               z += 7;

           }

           z += 3;

           for (int i = 4; i != 7; i++)

           {

               for (int j = 4 + z; j != 7 + z; j++)

               {

                   p[j].Image = Properties.Resources._11;

                   p[j].Cursor = System.Windows.Forms.Cursors.Hand;

                   p[j].Click += new System.EventHandler(this.test);

                   p[j].Name = "w" + (i).ToString() + "" + (j - z-4).ToString();

                   db.insertindex(p[j].Name);

               }

               z += 7;

           }

       }

       public void hoding()

       {

           int h = 0;

           for (int i = 0; i != 7; i++)

           {

               for (int j = 0; j != 7; j++)

               {

                    h = i * 7 + j;

                        p[h].Cursor = System.Windows.Forms.Cursors.Default;

                        p[h].Click -= new System.EventHandler(this.test);

                        p[h].Click -= new System.EventHandler(this.hod);

                        if(h%2==0)

                            p[h].Image = Properties.Resources._2;

                        else

                            p[h].Image = Properties.Resources._1;

                  if(db.mas[i, j] == 1)

                    {

                       p[h].Image = Properties.Resources._00;

                       p[h].Cursor = System.Windows.Forms.Cursors.Hand;

                       p[h].Click += new System.EventHandler(this.test);

                       p[h].Name = "b" + i.ToString() + "" + (j).ToString();

                    }

                    else if (db.mas[i, j] == 2)

                    {

                       p[h].Image = Properties.Resources._11;

                      p[h].Cursor = System.Windows.Forms.Cursors.Hand;

                       p[h].Click += new System.EventHandler(this.test);

                       p[h].Name = "w" + (i).ToString() + "" + (j ).ToString();

                    }

               }

           }

       }

       public void showindex()

       {

           int h = 0;

           for (int i = 0; i != 7; i++)

           {

               for (int j = 0; j != 7; j++)

               {

                   h = i * 7 + j;

                   if (db.mas[i, j] == 3)

                   {

                       p[h].Cursor = System.Windows.Forms.Cursors.Hand;

                       p[h].Name = "h" + (i).ToString() + "" + (j).ToString();

                       p[h].Click += new System.EventHandler(this.hod);

                       if (h % 2 == 0)

                           p[h].Image = Properties.Resources._4;

                       else

                           p[h].Image = Properties.Resources._3;

                   }

                   else if(db.mas[i,j]==0)

                   {

                       p[h].Cursor = System.Windows.Forms.Cursors.Default;

                       p[h].Name = "n" + (i).ToString() + "" + (j).ToString();

                       if (h % 2 == 0)

                           p[h].Image = Properties.Resources._2;

                       else

                           p[h].Image = Properties.Resources._1;

                   }

               }

           }

       }

       public void clider(){

           for (int i = 0; i != 7; i++)

               for (int j = 0; j != 7; j++)

                   if (db.mas[i, j] == 3)

                       db.mas[i, j] = 0;

       }

       public void hod(object sender, EventArgs e)

       {

           clider();

           PictureBox z = (PictureBox)sender;

           db.newindex(z.Name);

           showindex();

           hoding();

           info();

       }

       public void info(Label l1, Label l2,Label l3)

       {

           db.finnish();

           L1 = l1;

           L2 = l2;

           L3 = l3;

               l1.Text = db.onlone.ToString();

               l2.Text = db.onltwo.ToString();

               if(thisnomber=='b')

               l3.Text="№2";

               else

               l3.Text = "№1";

       }

  

       public void info()

       {

           int buf = db.finnish();

           win w = new win();

           if(buf ==1)

           {

               w.Show();

               w.winnn("Игрок 1");

           }

           else if (buf == 2)

           {

               w.Show();

               w.winnn("Игрок 2");                

           }

           if (thisnomber == 'b')

               L3.Text = "№2";

           else

               L3.Text = "№1";

               L1.Text = db.onlone.ToString();

               L2.Text = db.onltwo.ToString();

       }

       public void test(object sender, EventArgs e)

       {

           clider();

           PictureBox z = (PictureBox)sender;

           db.newindex(z.Name);

           if (db.gch == thisnomber)

           {

               showindex();

               if (thisnomber == 'b')

                   thisnomber = 'w';

               else

                   thisnomber = 'b';

           }

           else

           {

               MessageBox.Show("Сейчас не ты ходиш!","Ага:)");

           }

       }

      public void inzilization()

      {

           int xod = 0;

           bool b = false;

           for (int i = 0; i != 7;i++ )

           {

               for (int j = 0; j != 7; j++)

               {

                   p[xod] = new PictureBox();

                   if (b== false)

                   {

                       p[xod].BackgroundImage = global::curs.Properties.Resources._2;

                       b = true;

                   }

                   else

                   {

                       b = false;

                       p[xod].BackgroundImage = global::curs.Properties.Resources._1;

                   }

                   p[xod].Location = new System.Drawing.Point(x, y);

                   p[xod].Size = new System.Drawing.Size(width, higth);

                   p[xod].TabIndex = 0;

                   f.Controls.Add(p[xod]);

                   x += 80;

                   xod += 1;

               }

               x = 151;

               y += 80;

           }

           font();

       }




1. Особливості клінічного перебігу та прогнозування наслідків первинних і вторинних гнійних менігоенцефалітів
2. а schweigen im Wlde молчат в лесу- der Wld
3. Уфимский лесхозтехникум гр.html
4. В начале было Слово Почему так папа Андрей Тарковский МЕХАНИКА С лов а
5.  Технология принятия управленческих решений
6.  термин в фитнесе и бодибилдинге когда спортсмен за некоторый промежуток времени не просто сбрасывает вес а
7. Социально-экономические причины насилия
8. Здравствуйте хозяева дорогие Гостей не ждали Ответ хозяев знакомство Снегурочки с хозяевами
9. Избранной рады В январе 1547 года при содействии митрополита Макария Иван IV Грозный был торжественно объ
10. Задание-Пусть некая фирма занимается торговлей кондитерскими изделиями
11. ПРОБЛЕМА ЗАКОНОДАТЕЛЬСТВА ЛИКУРГА По общему признанию проблема первоначальной реформы является одной и
12. Особенности административного права Германии
13. реферат дисертації на здобуття наукового ступеня кандидата історичних наук Черні
14. Вопрос 10 Проектирование системы документации ИС
15. Предмет, метод и система трудового права
16. Сравнительный анализ демократии и тоталитаризма
17. Задание- ввести значение с клавиатуры
18. Миссия и цели предприятия (на примере ООО СтройКлиматТехника)
19. Методические рекомендации планы лекционных и семинарских занятий задания для контрольных и курсовых ра
20. Максім Багдановіч, Максім Гарэці i Васіль Быкаў як класічныя прадстаўнікi беларуская лiтаратуры 20 стагоддзя