ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2019
Просмотров: 1738
Скачиваний: 1
СОДЕРЖАНИЕ
1.2 Аналіз існуючих iгор в жанрi "Tower Defense"
1.3 Розробка математичної моделі комп'ютерної гри-стратегії "Tower Defense"»
1.4 Розробка структурно–функціональної моделі ПК комп'ютерної гри-стратегії "Tower Defense"
1.5 Розробка технічного завдання на створення ПК комп'ютерної гри-стратегії "Tower Defense"
1.6 Проектування комп'ютерної гри-стратегії "Tower Defense".
1.6.1 Розробка діаграми прецедентів для комп'ютерної гри-стратегії "Tower Defense"
Рисунок 1.9 – Діаграма прецедентів ПК комп'ютерної гри-стратегії "Tower Defense".
1.6.2 Розробка діаграми класів для ПК комп'ютерної гри-стратегії "Tower Defense".
1.6.3 Розробка діаграми послідовності для ПК комп'ютерної гри-стратегії "Tower Defense".
1.7 Засоби розробки ПК і їх порівняльний аналіз
2.1 Результати поглибленої розробки окремих модулів комп'ютерної гри-стратегії "Tower Defense".
2.2 Елементи інтерфейсу комп'ютерної гри-стратегії "Tower Defense"
1.6.4 Розробка інформаційної моделі предметної області «ПК комп'ютерної гри-стратегії "Tower Defense"»
ER-модель використовується при високорівневому (концептуальному) проектуванні баз даних. З її допомогою можна виділити ключові сутності і позначити зв'язки, які можуть встановлюватися між цими сутностями [19].
В ході аналізу предметної області «ПК комп'ютерної гри-стратегії "Tower Defense"» виділяється набір сутностей - об'єктів або явищ, інформація про які підлягає опису та зберігання в базі даних і зв'язків між сутностями.
Створюється діаграма виду «Сутність - Зв'язок». Враховуються ступінь зв'язку між сутностями («один - до - одному», «один - до - багатьох», «багато - до - багатьох»).
Для створення БД необхідно побудувати ER-діаграму (рис. 1.13) у вигляді сукупності зв'язків, сутностей і атрибутів.
Сутність «Рівень» представляє з себе сховище даних, яке містить інформацію про id рівня та сітку ландшафту рівня.
Сутність «Противник» представляє з себе сховище даних, яке містить інформацію про id хвилі противників та інформацію про самі хвилі.
Сутність «Ігрові ресурси» представляє з себе сховище даних, яке містить інформацію про кількість монет користувача та життя його бази.
Рисунок 1.13 – ER-діаграма предметної області «ПК комп'ютерної гри-стратегії "Tower Defense"»
Для розуміння логіки роботи предметної області, а також встановлення ступеня зв'язності і класу приналежності таблиць розроблена Діаграма ER-примірників. Розглянемо суті «Рівень», «Противник», «Ігрові ресурси». Графічну ілюстрацію цього можна побачити на рис. 1.14.
Рисунок 1.14 – Діаграма ER-екземплярів
Обмеження унікальності, що накладаються оголошеннями первинного і кандидатних ключів відносини, є окремим випадком обмежень, пов'язаних з поняттям функціональної залежності.
У таблиці 1.8 представлено буквене позначення атрибутів:
Таблиця 1.8 – Літерне позначення атрибутів
-
Літера
Позначення
A
id рівня
B
Сітка ландшафту
C
id хвилі протвників
D
Інформція хвиль
E
Кількість монет
F
Кількість життя
Нормальна форма Бойса — Кодда (НФБК) — нормальна форма використовується в нормалізації баз даних. Це трошки сильніша версія третьої нормальної форми (3НФ). Таблиця знаходиться в НФБК тоді і тільки тоді, коли для кожної її нетривіальної функціональної залежності X → Y, X це суперключ — тобто, X або потенційний ключ, або його над множина [20].
Функціональна залежність - це однозначна залежність, затабулірована у системах управління базами даних [21]. Представлена на рис. 1.15
D
C
E
F
Рисунок 1.15 – Діаграма ФЗ
R(A,B,C,D,E,F)
Перевірка ключів в НФБК:
Детермінанти Ключі
D —
Не в
НФБК
CA +
AEF +
Оскільки не кожен детермінант сам по собі ключ в відношенні, то дана таблиця не перебуває в НФБК.
Проведемо декомпозицію:
R(A,B,C,D,E,F)
R1(A,B) R(A,С,D,E,F)
R2(C,D) R(A,C,E,F)
R3(A,E,F) R(A,C)
Були отримані наступні відносини:
R1(A,B)
R2(C,D)
R3(A,E,F)
Тепер таблиця знаходиться в НФБК, а значить є основою для проектування БД для предметної області «ПК комп'ютерної гри-стратегії "Tower Defense"».
1.7 Засоби розробки ПК і їх порівняльний аналіз
Тема дипломного проекту – «ПК комп'ютерної гри-стратегії "Tower Defense"».
Java – об'єктно-орієнтована мова програмування, випущена 1995 року компанією «Sun Microsystems» як основний компонент платформи Java. З 2009 року мовою займається компанія «Oracle», яка того року придбала «Sun Microsystems». В офіційній реалізації Java-програми компілюються у байт-код, який при виконанні інтерпретується віртуальною машиною для конкретної платформи [22].
Порівняння програмних продуктів (за десятибальною шкалою) наведено у таблиці 1.9.
Таблиця 1.9 – Порівняння програмних продуктів
Найменування критерію |
PHP |
JavaScript |
Java |
Kj |
Динамічна типізація |
9 |
8 |
6 |
0,10 |
Підтримка БД |
6 |
6 |
7 |
0,10 |
Інтерпретатор командного рядка |
9 |
7 |
8 |
0,20 |
Багатоплатформеність |
7 |
8 |
9 |
0,15 |
Підтримка ООП |
8 |
8 |
9 |
0,20 |
Наявність бібліотек для роботи з графікою і мультимедіа |
6 |
8 |
9 |
0,10 |
Простота застосування |
8 |
7 |
8 |
0,15 |
Експертна оцінка визначається за формулою (1.2):
я, (1.2)
де Qi – загальна оцінка програмного продукту;
n – кількість критеріїв;
Kj – ваговий коефіцієнт критерію;
aij – оцінка i – того програмного засобу по j – тим критерієм.
Розрахуємо загальні оцінки програмних засобів:
PHP:
Q=9*0,10+6*0,10+9*0,20+7*0,15+8*0,20+6*0,10+8*0,15=7.2.
JavaScript:
Q=8*0,10+6*0,10+7*0,20+8*0,15+8*0,20+8*0,10+7*0,15=7.45.
Java:
Q=6*0,10+7*0,10+8*0,20+9*0,15+9*0,20+9*0,10+8*0,15=8.05.
Як показав розрахунок, найбільш доцільно вибирати в якості засобу розробки мову програмування Java.
MySQL – вільна реляційна система управління базами даних MySQL є рішенням для малих і середніх додатків. Зазвичай MySQL використовується як сервер, до якого звертаються локальні або видалені клієнти, проте в дистрибутив входить бібліотека внутрішнього сервера, що дозволяє включати MySQL в автономні програми.. Завдяки відкритій архітектурі і GPL-ліцензуванню, в СУБД MySQL постійно з'являються нові типи таблиць [23].
Порівняння СУБД (за десятибальною шкалою) наведено у таблиці 1.10.
Таблиця 1.10 – Порівняння СУБД
Найменування критерію |
MySQL |
Access |
InterBase |
Kj |
Підтримка реляційної моделі даних |
7 |
9 |
6 |
0,2 |
Технологія створення БД і об'єктів БД |
8 |
7 |
5 |
0,2 |
Можливість створення локальної БД |
9 |
8 |
7 |
0,1 |
Наявність вбудованої мови для розробки додатків |
7 |
7 |
5 |
0,15 |
Підтримка стандарту SQL |
7 |
6 |
9 |
0,1 |
Засоби для отримання звітів |
7 |
8 |
3 |
0,1 |
Простота застосування |
9 |
7 |
4 |
0,15 |
Експертна оцінка визначається за формулою (1.4) для кожної СУБД:
MySQL:
Q=7*0,20+8*0,20+9*0,10+7*0,15+7*0,10+7*0,10+9*0,15=7,7.
Access:
Q=9*0,20+7*0,20+8*0,10+7*0,15+6*0,10+8*0,10+7*0,15=7.5.
InterBase:
Q=6*0,20+5*0,20+7*0,10+5*0,15+9*0,10+3*0,10+4*0,15=5,45.
Як показав розрахунок, найбільш доцільно вибирати в якості СУБД MySQL.
Отже, для реалізації ПК для автоматизації з обліку даних про ремонт виробничих приміщень можна використовувати програмні засоби Java и MySQL.
2.1 Результати поглибленої розробки окремих модулів комп'ютерної гри-стратегії "Tower Defense".
В даному ПК рівні розділені на дві категорії:
- сюжетні, які створені розробниками;
- кастомні, які створює користувач.
Сюжетні рівні знаходяться у таблиці Levels в базі даних з id 1…3. На рис. 2.1 представлено запит до бази даних, який витягує з неї сюжетні рівні.
public void loadLevel(int levelID) {
JsonArray jsonArray = new JsonArray();
try {
Gson gson = new Gson();
dataBaseHandler.openDatabase();
DatabaseCursor cursor = dataBaseHandler.rawQuery(loadQuery);
if (cursor.next())
jsonArray.addAll(gson.fromJson(cursor.getString(0), JsonArray.class));
for (int i = 0; i < jsonArray.size(); i++) {
JsonArray jsonElements = jsonArray.get(i).getAsJsonArray();
for (int j = 0; j < jsonElements.size(); j++) {
mapMask[i][j] = jsonElements.get(j).getAsInt();
if (!gameWorld.isEdit())
gameWorld.getGrid().get(i).get(j).setState(mapMask[i][j]);
}
}
dataBaseHandler.closeDatabase();
} catch (SQLiteGdxException e) {
e.printStackTrace();
}
}
Рисунок 2.1 – Звернення до рівню у базі даних
Кастомний рівень знаходиться у таблиці Levels з id 0. На рис. 2.2 представлена функція, яка зберігає рівень користувача у базу даних.
public void saveLevel() {
for (int i = 0; i < GameWorld.MAP_HEIGHT_MAX; i++)
for (int j = 0; j < GameWorld.MAP_WITH_MAX; j++)
mapMask[i][j] = GameWorld.getInstance().getEditGrid().get(i).get(j).getState();
Json json = new Json();
insertOrUpdateQuery = "UPDATE Levels SET content = '" + json.toJson(mapMask) + "' WHERE id = 0;";
GameWorld.getInstance().setShowSaveText(true);
super.saveLevel();
}
Рисунок 2.2 – Виклик методу saveLevel()
В іграх-стратегіях вороги представлені як хвилі з їх типом, кількістю, інтервалом початку та координатами. В даному ПК хвилі зберігаються у таблиці Waves з id рівня, котрий пов'язаний з id рівня в таблиці Levels. Розглянемо запит до бази даних, який витягує з неї хвилі противників по id рівня(levelId) на рис. 2.3.
public void init(int levelId) {
JsonArray jsonArray = new JsonArray();
String loadQuery = "SELECT content FROM Waves WHERE id = " + levelId;
try {
Gson gson = new Gson();
dataBaseHandler.openDatabase();
DatabaseCursor cursor = dataBaseHandler.rawQuery(loadQuery);
if (cursor.next())
jsonArray.addAll(gson.fromJson(cursor.getString(0), JsonArray.class));
for (int i = 0; i < jsonArray.size(); i++)
enemyWaves.add(gson.fromJson(jsonArray.get(i), EnemyWave.class));
dataBaseHandler.closeDatabase();
} catch (SQLiteGdxException e) {
e.printStackTrace(); } }
Рисунок 2.3 – Звернення до хвилі противників у базі даних
В іграх жанру «Оборона веж» вороги повинні мати маршрут, по якому вони будуть проходити по рівню. Для цього використовуються алгоритми пошуку маршруту. В ПК «Tower Defense» використаний «Хвильовий» алгоритм, який починає шукати маршрут з кінцевої точки. На вхід він приймає початкову та кінцеву точку, та використовує сітку рівня. На рис. 2.4 представлений метод алгоритму пошуку маршруту противників.
public ArrayList<Vector2> findWay(Vector2 start, Vector2 end) {
grid[(int)end.y][(int)end.x] = WATER_KEY;
int counter = 0;
while (counter < MAX_ITERATIONS) {
for (int y = 0; y < mapHeight; y++)
for (int x = 0; x < mapWidth; x++)
if (grid[y][x] == WATER_KEY)
goWater(x, y);
if (grid[(int)start.y][(int)start.x] == WATER_KEY)
return getWay(start, end);
counter++;
}
return new ArrayList<Vector2>();
}
Рисунок 2.4 – Метод алгоритму пошуку маршруту противників