Автор: Пользователь скрыл имя, 18 Декабря 2011 в 17:51, курсовая работа
Дана курсова робота утворює оболонку користувача, за допомогою якої можна запускати деякі програми не виходячи в операційну систему, і після завершення роботи програми повертатись до самої операційної системи.
У даній курсовій роботі була розроблена гра «Lines» її інтерфейс та наведено приклади її використання. Для розробки використовувалося середовище Java, консольна версія програми.
ВСТУП
АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБҐРУНТУВАННЯ ЗАВДАННЯ НА РОБОТУ …7
РОЗРОБКА ІНТЕРФЕЙСУ. ПРИКЛАДИ ВИКОРИСТАННЯ………………………………………...11
РОЗРОБКА ДІАГРАМИ КЛАСІВ ТА ДІАГРАМИ ВЗАЄМОДІЙ……………………………………19
РОЗРОБКА ЯДРА ПРОГРАМИ………………………………………………………………………....23
РОЗРОБКА ПІДСИСТЕМИ ФОРМУВАННЯ ЗОБРАЖЕННЯ..........………………………………...28
РОЗРОБКА ПІДСИСТЕМИ ОБМІНУ ПО МЕРЕЖІ..............................................................................31
ІНСТРУКЦІЯ КОРИСТУВАЧА………………………………………………………………………....33
ВИСНОВКИ……………………………………………………………………………………………....34
ПЕРЕЛІК ПОСИЛАНЬ…………………………………………………………………………………..35
ДОДАТКИ………………………………………………………………………………………………..36
. | + | . | . | + | . |
. | . | ||||
. | . | ||||
. | + | . | . | + | . |
. | . | ||||
. | . |
Рисунок
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 – знищення
шариків в лінії
Приклад 6 Завершення гри
Відповідно ігра має свій кінець і якщо в Lines у вас виникає така ситуація яка показана на рисунку 2.8 то відповідно це кінець гри про що вам буде повідомлено
Рисунок
2.8 – Кінець гри
3
РОЗРОБКА ДІАГРАМИ
КЛАСІВ ТА ДІАГРАМИ
ВЗАЄМОДІЙ
Аналізуючи розроблений у розділі 2 інтерфейс та приклади використання розробимо наступні класи програми-серверу:
для цього розробимо елементи-змінні та методи.
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), яке приходить з відповідного клієнта. */