Розробка комп’ютерної гри “lines” з використанням технології мови програмування java

Автор: Пользователь скрыл имя, 18 Декабря 2011 в 17:51, курсовая работа

Краткое описание

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

У даній курсовій роботі була розроблена гра «Lines» її інтерфейс та наведено приклади її використання. Для розробки використовувалося середовище Java, консольна версія програми.

Оглавление

ВСТУП
АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБҐРУНТУВАННЯ ЗАВДАННЯ НА РОБОТУ …7
РОЗРОБКА ІНТЕРФЕЙСУ. ПРИКЛАДИ ВИКОРИСТАННЯ………………………………………...11
РОЗРОБКА ДІАГРАМИ КЛАСІВ ТА ДІАГРАМИ ВЗАЄМОДІЙ……………………………………19
РОЗРОБКА ЯДРА ПРОГРАМИ………………………………………………………………………....23
РОЗРОБКА ПІДСИСТЕМИ ФОРМУВАННЯ ЗОБРАЖЕННЯ..........………………………………...28
РОЗРОБКА ПІДСИСТЕМИ ОБМІНУ ПО МЕРЕЖІ..............................................................................31
ІНСТРУКЦІЯ КОРИСТУВАЧА………………………………………………………………………....33

ВИСНОВКИ……………………………………………………………………………………………....34

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

ДОДАТКИ………………………………………………………………………………………………..36

Файлы: 1 файл

курсач.docx

— 530.26 Кб (Скачать)
     . + . . + .
      .     .  
      .     .  
    . + . . + .
      .     .  
      .     .  
 

Рисунок 2.1 - Спеціальна будова поля. Символом ‘+’ позначені позиції, на яких може зупинятись шарик. Символом ‘.’ позначені позиції,  по яким можуть рухатись агенти. 

    5. Шарики ведуть себе у відповідності до правил гри “Color Lines”. Тобто, по-перше, вони різнокольорові, а, по-другу, якщо по горизонталі/вертикалі/діагоналі зібралось п’ять або більше шариків одного кольору, вони зникають, а сума очок, набрана агентами зростає - про що програма їх повідомляє.

    6. Агенти мають перемовлятись повідомленнями і узгоджувати свої дії. Це особливо корисно, якщо враховувати пункт 4. При натискуванні клавіші ТАБ клієнт має запитати в гравця, яке повідомлення надіслати і якому агенту. Повинна бути реалізована можливість надіслати повідомлення як окремому агенту, так і всім одразу.

               Розробка  інтерфейсу гри

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

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

     Розробимо інтерфейс клієнту.

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

     Клієнт  починає роботу з встановлення з’єднання з програмою-сервером. Адреса сервера передається як другий аргумент командного рядка. У випадку, якщо другий аргумент відсутній, клієнт робить спробу з’єднатися з сервером, використовуючи адресу по замовчуванню - 127.0.0.1. Ця адреса має спеціальне значення - це адреса комп’ютера на якому запущена клієнт. Тобто це означає, що якщо адреса сервера не вказана в командному рядку, то клієнт намагається зв’язатися з сервером, що запущений на тому самому комп’ютері.

     Якщо  у командному рядку також відсутній  перший аргумент, то по замовчуванню ім’я гравця буде “Tom”.

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

     Якщо  спроба встановити з’єднання з сервером завершилась помилкою, клієнт видає відповідне повідомлення і завершує роботу.

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

     

           Рисунок 2.2   Перша область – Елементи внутрішнього світу 
 
 

Name: Dima

             Coord: 

                    X:120          - друга область - стан агенту

                    Y:54

            

 

Переміщення шарика – третя область 

Збереженя гри    ctr+s

 Esc -            - вихід з гри 

У нас є поле 9х9 де на початку гри розташовуеться в довільному порядку три шарики. 

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

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

     Друга область використовується для відображення стану агентів. В ній наводиться інформація про кожного агента. Якщо агент вийшов з гри, то замість  ім’я буде  написано <<left the game>>.

Третя область  містить інформацію про  переміщення шарика в даний момент.  

Приклади  використання

     Приклади  використання (use cases) - це важливий елемент проектування. Приклад використання розкриває можливі способи вза’ємодії між користувачами програми та самою програмою і дозволяє розробникам приділити більше уваги поліпшенню зручності програми. Розглянемо декілька прикладів використання програми. Для ілюстрації буде наводитись зображення, яке бачить гравець на екрані монітора. При цьому для скорочення не буде наводитись четверта текстова область з Рисунку 2.2 Третя текстова область буде наводитись лише у випадку, якщо вона містить якесь повідомлення, яке стосується прикладу використання, який розглядається.

     Приклад 1. Початок гри, на полі 9х 9 появляються три шарики різного кольору  

       

     Рисунок 2.3 початок гри на полі тільки три  шарика 

     Приклад 2. Рух Агентів. Агенти рухаються тільки по позиціям позначеним на Рисунку 2.4 При цьому має враховуватись те, що з деяких позицій нема руху ліворуч, з деяких - праворуч і т.п.

     

     Рисунок 2.4 -  можливі рухи агента

         Приклад 3 Активація шарика

     При натискуванні комбінації клавіш <Ctrl>+<стрілка> і наявності шарика у відповідній позиції відбувається його активація - відповідно повинно змінитись і його зображення на екрані клієнта. Якщо перед цим було активовано інший шарик, то він деактивується. Якщо позиція, на яку вказує стрілка, є вільною і при цьому десь знаходиться активований шарик і, у відповідності до гри “Lines”, існує  шлях від поточного положення цього шарика до позиції, на яку вказує  стрілка, то шарик переміщується на вказану позицію. Активація шарика представлена на рисунку 2.5 

     

     Рисунок 2.5 - Активація шарика при його нажиманні 

Приклад 4. Рух  шарика та роздавлення агента.

     Шарики  рухаються не хаотично а відповідно за функцією. Показано на рисунку 2.6

 

     Рисунок 2.6 -  рух кульки 

     Приклад 5. Знищення шариків

     Шарики  ведуть себе у відповідності до правил гри “Color Lines”. Тобто, по-перше, вони різнокольорові, а, по-другу, якщо по горизонталі/вертикалі/діагоналі зібралось п’ять або більше шариків одного кольору, вони зникають, а сума очок, набрана агентами зростає - про що програма їх повідомляє. Зображено на рисунку 2.7

            Рисунок 2.7 – знищення шариків в лінії 
 

      Приклад 6   Завершення гри

      Відповідно  ігра має свій кінець і якщо в  Lines у вас виникає така ситуація яка показана на рисунку 2.8  то відповідно це кінець гри про що вам буде повідомлено

     

     Рисунок 2.8 – Кінець гри 
 
 
 
 

    3 РОЗРОБКА ДІАГРАМИ  КЛАСІВ ТА ДІАГРАМИ  ВЗАЄМОДІЙ 

Аналізуючи  розроблений у розділі 2 інтерфейс  та приклади використання розробимо  наступні класи програми-серверу:

  1. Board – зберігає весь внутрішній світ, функцію Day, з допомогою якої цей світ функціонує та функції, які забезпечують зміни у цьому світі. Ті функції, які визиваються з функції Day будемо називати  синхронними, а ті, що змінюють внутрішній світ незалежно від Day. Будемо називати асинхронними.
  2. Agent – відповідає за стан агента, його видиму область та пов’язані з ним часові характеристики. Видима область – це та частина внутрішнього світу, яку може спостерігати гравець одночасно. Згідно завдання ця частина не повинна перевищувати за розміром 25% внутрішнього світу.
  3. RefreshObject – відслідковує зміни, які відбуваються у видимій області відповідного агента та приймає участь у формуванні відповідних повідомлень, які стосуються зміни зображення (VIEW) на дисплеї гравця  яке не існує у внутрішньому світі на сервері.
  4. RefreshObjects – зберігає масив об’єктів RefreshObject та робить загальні дії
  5. Killer – забезпечує тимчасове зберігання номерів клієнтів, з якими слід знищити з’єднання
  6. TCPBuffers – відповідає за обмін по мережі з відповідними клієнтами. Містить в собі масив об’єктів класу TCPBuffer,  кожен з яких здійснює обмін з відповідним клієнтом.

для цього розробимо  елементи-змінні та методи.

class Board

{

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

      char map[розміри][внутрішнього світу];   

/* agents – масив, який зберігає об’єкти, які представляють агентів. Кожний об’єкт-агент відповідає об’єкту, який реалізує мережове з’єднання з відповідною програмою-клієнтом. Кожен елемент масиву agents має відповідну змінну  used, яке дорівнює 0 у випадку. коли агент не використовується через те, що мережеве з’єднання не було встановлено, або якщо агент був знищений в ході подій у внутрішньому світі. Значення 1 цієї змінної свідчить про те, що агент використовується.

*/

      Agent agents[MAXAGENTS]; 

/* Один такт  в житті внутрішнього світу.  Функція Day запускається кілька раз на секунду. ЇЇ головна задача – переглянути чи немає лінії з пяти шарів або більше.

      void Day();  

// Синхронні функції ті що визиваються з функції Day 

void DeleteAgent(int which);  /* функція знищує агента за номером which і ставить в чергу на знищення номер відповідного з’єднання. Ця функція також знищує зображення відповідного агента у масиві map. */

 which. Функція також видаляє відповідне зображення у масиві map. */

void SetPixel(int x, int y, char ch); /* Єдина функція виводу інформації у масив map. Має змогу контролювати всі зміни у внутрішньому світі і відслідковувати як змінюються видимі області всіх клієнтів. */

// Асинхронні функції – такі, що здійснюють зміни у внутрішньому світі

// незалежно  від функції Day 

int AddAgent(int which, char *name); /* Функція, яка обробляє об’єкт-елемент масиву agents таким чином, щоб забезпечити його присутність у внутрішньому світі.  Змінна used  отримує значення 1.

      Функція AddAgent  визивається у відповідь на запит від клієнта про встановлення з’єднання, яке приходить з нового клієнта.*/

void MoveAgent(int which, int dx, int dy); /* функція, яка забезпечує рух агента у відповідь на повідомлення про рух агента (MOVE), яке приходить з відповідного клієнта. */

Информация о работе Розробка комп’ютерної гри “lines” з використанням технології мови програмування java