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

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

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

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

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

Оглавление

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

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

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

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

Файлы: 1 файл

курсач.docx

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

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

     Рисунок 3.1 Структура мереженої взаємодії  програми-сервера і програм-клієнтів

     При натисканні певних клавіш на програмі-клієнті, формуються повідомлення, які за допомогою  протоколу TCP/IP і сокетів, передаються по мережі. Сервер відповідно на ці повідомлення, формує свої повідомлення і відсилає їх певним клієнтам. Так взаємодіють між собою програма-сервер і програма-клієнт.

     Програма-сервер має наступні власні класи: TCPBuf, TCPBuffers, User, Road, Refresh, Killer.

     Клас TCPBuf і TCPBuffers - головні класи для  роботи з програмою-клієнтами. Вони призначені для отримання і відсилання даних по мережі, створення та видалення  з’єднань.

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

      Структура класів програми „Lines” зображена на рисунку 3.2

Сервер 

Клієнт   

 

     

       

Send_Recv

     

TCPBuffers

TCPBuf

     

     

Board

Refresh

User

 

      Рисунок 3.2 Структура класів програми „Lines”

    4 РОЗРОБКА ЯДРА  ПРОГРАМИ 

      Задача  пересування шарика потребує використання спеціального алголритму.

Завдання  знаходження найкоротшої дороги між якимись точками A і В на ігровому полі з довільно розташованими  перешкодами характерна, в першу  чергу, для популярних сьогодні тактичних  і стратегічних ігор. Як підзадача, вона може виникати практично в будь-яких іграх - Rpg,квестaх,логічних (типовий  приклад - "Color Lines",кстaті,слепіть  чергову версію такої іграшки  після цієї статті - раз плюнути) .Чому треба шукати найкоротший маршрут? У деяких іграх, наприклад "HЛО-2","laser Squad",от довжини маршруту залежить кількість витрачених одиниць часу - чим оптімaльней буде знайдений  дорога тим швидше воїн дістанеться  до мети. A, наприклад, в "Color Lines" довжина  маршруту не обумовлена правилами, має  значення лише сам факт можливості або неможливості переміщення кулі. Hо і в цій грі приємніше  виглядатиме, якщо кулька відразу попрямує куди треба, а не загадково дефілюватиме по всій ігровій дошці.

      Рішення цієї задачі прийшло до нас з такої  далекої, здавалося б, від ігор області  як електроніка.A саме - розводка друкарських  плат (всі знають, що це таке?).

      Існує велика кількість трасувальників (програм  для розводки плати), заснованих на не меншій кількості різних методів, що займаються з'єднанням двох контактів  єдиним провідником.Hо ми розглянемо лише один з них, найпростіший (а  значить, найнадійніший і найпопулярніший) - хвилевий трасувальник.

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

      Є ігрове поле Р(MXN),где M і N, відповідно, розмір поля по вертикалі і горизонталі. Просто, це масив розмірністю MXN (DIM P(M,n). Кожна клітка ігрового поля (елемент  масиву) може володіти великою кількістю  властивостей по вашому розсуду, але  для нас важливе лише одне - її прохідність (або непрохідна). Яким чином вона визначається - це вже  ваша справа. Далі: є деяка стартова крапка, де знаходиться герой вашої  гри, і кінцева крапка, куди йому необхідно попасти. Умовимося доки, що ходити він може лише по чотирьох напрямах (чого вимагає від нас  класичний хвилевий метод) - управо, вліво, вперед, назад. Hеобхідно перемістити  героя від місця старту до фінішу за найменшу кількість ходів, якщо таке переміщення взагалі можливо.

      Aлгоритм  знаходження найкоротшого маршруту  між двома крапками для такого  завдання досить простий:

  1. Спочатку необхідно створити робочий масив R(MXN),рaвний за розміром масиву ігрового поля P(MXN).
  2. Кожному елементу робочого масиву R(i,j) привласнюється деяке значення залежно від властивостей елементу ігрового поля P(i,j) по наступних правилах:

        2.1. Якщо поле P(i,j) непрохідне, то R(i,j):=255;

        2.2. Якщо поле P(i,j) прохідне, то R(i,j):=254;

        2.3. Якщо поле P(i,j) є цільовою (фінішною) позицією, то R(i,j):=0;

        2.4. Якщо поле P(i,j) є стартовою позицією, то R(i,j):=253.

Етап "Поширення  хвилі". Вводимо змінну Ni - лічильник  ітерацій (повторень) і привласнюємо їй початкове значення 0.

      3. Вводимо константу Nк,которую  встановлюємо рівною максимально  можливому числу ітерацій.

      4.Відрядковий  переглядаємо робочий масив R (т.е.оргaнізуєм два вкладені цикли:  по індексу масиву i від 1 до  М-коду, по індексу масиву j від  1 до N).

      5. Якщо R(i,j) рівний Ni,то є видимими  сусідні елементи R(i+1,j), R(i-1,j), R(i,j+1), R(i,j-1) по следующе- му правилу (як  приклад розглянемо R(i+1,j):

        1. Якщо R(i+1,j)=253, то переходиться до пункту 10;
        2. Якщо R(i+1,j)=254, виконується привласнення R(i+1,j):=Ni+1;
        3. У всіх останніх випадках R(i+1,j) залишається без змін.

Аналогічно  поступаємо з елементами R(i-1,j), R(i,j+1),r(i,j-1). 

    6. По  завершенню відрядкового перегляду  всього масиву збільшуємо Ni на 

    7. Якщо Ni>nк,то пошук маршруту визнається  невдалим. Вихід з програми.

    8. Переходимо  до пункту 5.

    9. Етап  побудови маршруту переміщення.  Привласнюємо змінним Х і Y значення координат стартової  позиції.

    10. У  околиці позиції R(Х,y) шукаємо  елемент з найменшим значенням  (т.е.для цього переглядаємо R(Х+1,y), R(Х-1,y), R(Х,y+1), R(Х,y-1). Координати цього  елементу заносимо в змінні X1 і Y1.

    11. Здійснюємо  переміщення об'єкту (хто там у  вас буде - робот, акванавт, Вінні-пух)  по ігровому полю з позиції  [X,y] в позицію [X1,y1]. (За бажанням, ви можете заздалегідь заносити  координати X1,y1 в деякий масив,  і, лише закінчивши побудову  всього маршруту, зайнятися переміщенням  героя на екрані).

    12. Якщо R(X1,y1)=0,то переходимо до пункту 15.

    13. Виконуємо  привласнення X:=x1,y:=y1. Переходимо до  пункту 11.

    14. Все.

   

                           Рисунок 4.1 -  Хвильовий алгоритм гри “Lines” 
 
 
 

4.1 Ситуація знищення  шариків: 

Розглянемо випадки  виграшних ситуацій в гри “Lines”  побудови ліній:

1.Побудова горизонтальних  ліній по 5 шариків в лінії або  більше на рисунку 4.2 

 Риcунок 4.2 – знищення шариків по горизонталі 

  1. Побудова  вертикальних ліній по 5 шариків  в лінії або більше показана на рисунку 4.3.
  2.          

                    Рисунок 4.3 –  знищення шариків по вертикалі 

  1. Є ще випадок  коли виникає вось така ситуація як показана на рисунку 4.5

           Рисунок 4.5 –  унікальний випадок знищення шариків 

В таких випадках пропадают сразу 9 або більше шариків  так як складено лінії як по вертикалі, так і по горизонталі. 

5 РОЗРОБКА ПІДСИСТЕМИ ФОРМУВАННЯ ЗОБРАЖЕННЯ

     В розробці підсистем формування зображення в мові Java приймає участь бібліотека Swing. Swing був розроблений компанією Sun Microsystems. Він містить ряд графічних компонентів (англ. Swing widgets), таких як кнопки, поля введення, таблиці і так далі  Swing відноситься до бібліотеки класів JFC, яка є набором бібліотек для розробки графічних оболонок. До цих бібліотек відносяться Java 2d, ACCESSIBILITY-API, Drag & DROP-API і AWT.

Swing надає  гнучкіші інтерфейсні компоненти, ніж раніша бібліотека AWT. На відміну  від AWT, компоненти Swing розроблені  для однакової платформеної для  кросу роботи, тоді як компоненти AWT повторюють інтерфейс виконуваної  платформи без змін. Компоненти Swing підтримують специфічні види, що  динамічно підключаються, і поведінки  (англ. plugable look-and-feel), завдяки якій  можлива адаптація до графічного  інтерфейсу платформи(тобто до  компонента можна динамічно підключити  інший, специфічний для операційної  системи, у тому числі і створений  програмістом вигляд і поведінка). Таким чином, додатки, використовуючі Swing, можуть виглядати як рідні  застосування для даної операційної  системи. Основним мінусом таких  «легковагих» (англ. Lightweight) компонентів  є відносно повільна робота. Позитивна  сторона — універсальність інтерфейсу  створених застосувань на всіх  платформах.

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

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

import javax.swing.*;

import java.awt.*;

     Почнемо з простого: створимо додаток використовуючого засобу 2d графіки. Перш за все необхідно створити основу – “полотно” для малювання для цього слід створити діалогове вікно. Вам слід використовувати або клас Jframe (для немодальних вікон) або Jdialog (соответствнно для модальних).

public static void main(String[] args){

   JFrame jf = new JFrame("Приклад діалогового вікна");

   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   jf.setSize(300, 300); або так     jf.setSize(new Dimension (300, 300));

   jf.setVisible(true);

}

Малюється прямокутник з тривимірною рамкою. Raised – указує на те, чи буде даний прямокутник візуально "підведений" або "втоплений".

abstract  void drawArc(int x, int у, int width, int height, int startAngle, int arcAngle)

Малюємо дугу элипса вказаного розміру. Дуга повинна мати початковий кут (startAngle) і само значення кута (arcAngle).

void drawChars(char[] data, int offset, int length, int x, int у)

Малюємо текст.

abstract  boolean drawImage(Image img, int x, int у, Color bgcolor, ImageObserver observer)

abstract  boolean drawImage(Image img, int x, int у, ImageObserver observer)

abstract  boolean drawImage(Image img, int x, int у, int width, int height, Color bgcolor, ImageObserver observer)

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