Автор: Пользователь скрыл имя, 18 Декабря 2011 в 17:51, курсовая работа
Дана курсова робота утворює оболонку користувача, за допомогою якої можна запускати деякі програми не виходячи в операційну систему, і після завершення роботи програми повертатись до самої операційної системи.
У даній курсовій роботі була розроблена гра «Lines» її інтерфейс та наведено приклади її використання. Для розробки використовувалося середовище Java, консольна версія програми.
ВСТУП
АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБҐРУНТУВАННЯ ЗАВДАННЯ НА РОБОТУ …7
РОЗРОБКА ІНТЕРФЕЙСУ. ПРИКЛАДИ ВИКОРИСТАННЯ………………………………………...11
РОЗРОБКА ДІАГРАМИ КЛАСІВ ТА ДІАГРАМИ ВЗАЄМОДІЙ……………………………………19
РОЗРОБКА ЯДРА ПРОГРАМИ………………………………………………………………………....23
РОЗРОБКА ПІДСИСТЕМИ ФОРМУВАННЯ ЗОБРАЖЕННЯ..........………………………………...28
РОЗРОБКА ПІДСИСТЕМИ ОБМІНУ ПО МЕРЕЖІ..............................................................................31
ІНСТРУКЦІЯ КОРИСТУВАЧА………………………………………………………………………....33
ВИСНОВКИ……………………………………………………………………………………………....34
ПЕРЕЛІК ПОСИЛАНЬ…………………………………………………………………………………..35
ДОДАТКИ………………………………………………………………………………………………..36
Програма-сервер одночасно працює з декількома клієнтами. Це зображено на рисунку
Рисунок
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лгоритм
знаходження найкоротшого
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нізуєм два вкладені
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):
Аналогічно
поступаємо з елементами R(i-1,j), R(i,j+1),r(i,j-1).
6. По
завершенню відрядкового
7. Якщо
Ni>nк,то пошук маршруту
8. Переходимо до пункту 5.
9. Етап
побудови маршруту переміщення.
10. У околиці позиції R(Х,y) шукаємо елемент з найменшим значенням (т.е.для цього переглядаємо R(Х+1,y), R(Х-1,y), R(Х,y+1), R(Х,y-1). Координати цього елементу заносимо в змінні X1 і Y1.
11. Здійснюємо
переміщення об'єкту (хто там у
вас буде - робот, акванавт, Вінні-пух)
по ігровому полю з позиції
[X,y] в позицію [X1,y1]. (За бажанням,
ви можете заздалегідь
12. Якщо
R(X1,y1)=0,то переходимо до
13. Виконуємо привласнення X:=x1,y:=y1. Переходимо до пункту 11.
14. Все.
Рисунок 4.1
- Хвильовий алгоритм гри “Lines”
4.1 Ситуація знищення
шариків:
Розглянемо випадки виграшних ситуацій в гри “Lines” побудови ліній:
1.Побудова горизонтальних
ліній по 5 шариків в лінії або
більше на рисунку 4.2
Риcунок 4.2 –
знищення шариків по горизонталі
Рисунок 4.3 –
знищення шариків по вертикалі
Рисунок 4.5 –
унікальний випадок знищення шариків
В таких випадках
пропадают сразу 9 або більше шариків
так як складено лінії як по вертикалі,
так і по горизонталі.
5 РОЗРОБКА ПІДСИСТЕМИ ФОРМУВАННЯ ЗОБРАЖЕННЯ
В розробці підсистем формування зображення в мові Java приймає участь бібліотека Swing. Swing був розроблений компанією Sun Microsystems. Він містить ряд графічних компонентів (англ. Swing widgets), таких як кнопки, поля введення, таблиці і так далі Swing відноситься до бібліотеки класів JFC, яка є набором бібліотек для розробки графічних оболонок. До цих бібліотек відносяться Java 2d, ACCESSIBILITY-API, Drag & DROP-API і AWT.
Swing надає
гнучкіші інтерфейсні
На
відміну від інших графічних
програмних інтерфейсів (далі 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(
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)