МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
Інженерно-технічний факультет
Кафедра комп'ютерних систем і мереж
Курсова робота
з курсу “Основи баз даних”
на тему:
Організація online гри.Клієнтська частина
Студента 3 курсу спеціальності КСМЧорномаза Віталія
Науковий керівник:
доц. Пойда В. Ю.
Ужгород – 2008
Зміст
Вступ 3
1 Теоретичні відомості 4
1.1 MySQL 4
1.1.1 Платформи 4
1.1.2 Мови програмування 5
1.1.3 Історія випусків 5
1.2 Python 6
1.2.1 Характеристики Пайтона 6
1.2.2 Історія 7
1.2.3 Платформи 7
1.2.4 Типи й структури даних 8
1.2.5 Синтаксис 8
1.2.6 Функціональне програмування 9
1.2.7 Підключення до сокету віддаленої машини 10
1.2.8 Робота з базами даних 10
2 Правила гри 11
3 Реалізація 12
3.1 База даних 12
3.2 Робота з мережею 13
3.3 Веб-інтерфейс 16
3.3.1 Веб-сервер 16
3.3.2 Генерація коду сторінки за допомогою шаблонів 16
3.3.3 Каскадна таблиця стилів CSS 18
Висновки 19
Перелік посилань 20
Додаток 21
Вступ
Онлайн-гра — жанр мережевих комп'ютерних ігор, в якій велика кількість гравців взаємодіє один з одним у віртуальному світі (в основному, в жанрі фентезі). Як і в більшості онлайн-ігр, гравцеві пропонується роль вигаданого героя, і можливість управління його діями.
Сучасні багатокористувацькі ігри стали справжнім феноменом мережі. В найпопулярніші з них грають мільйони людей.
Зазвичай організація онлайн-гри розподіляється на дві частини: організація серверної частини і клієнтської частини. Для зв'язку вони використовують передачу повідомлень. Метою курсової роботи є організація клієнтської частини, що буде відповідати за веб-інтерфейс.
1 Теоретичні відомості
1.1 MySQL
MySQL — вільна система керування реляційними базами даних. MySQL являється власністю компанії Sun Microsystems, що здійснює розробку і підтримку додатку. Розповсюджується по GNU General Public License і по власній комерційній ліцензії, на вибір.
MySQL з самого початку була дуже схожою на mSQL, проте з часом вона все розширювалася і зараз MySQL — одна з найпоширеніших систем керування базами даних. Вона використовується, в першу чергу, для створення динамічних веб-сторінок, оскільки має чудову підтримку з боку різноманітних мов програмування.
Гнучкість СКБД MySQL забезпечується підтримкою великої кількості типів таблиць: користувачі можуть вибирати як таблиці типу MyISAM, що підтримують повнотекстний пошук, так і таблиці InnoDB, що підтримують транзакції на рівні окремих записів. Крім того СКБД MySQL постачається із спеціальним типом таблиць EXAMPLE, демонструючи принципи створення нових типів таблиць. Завдяки відкритій архітектурі і GPL-ліцензуванню в СКБД MySQL постійно з'являються нові типи таблиць.
1.1.1 Платформи
MySQL портована на велику кількість платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003 і Windows Vista. Існує також порт MySQL до OpenVMS. Важливо відмітити, що компанія MySQL AB надає для вільного завантаження не тільки ісходні коди СКБД, але і відкомпільовані і оптимізовані під конкретні операційні системи готові модулі.
1.1.2 Мови програмування
MySQL має API для мов C, C++, Java, Лісп, Perl, PHP, Python, Ruby, Smalltalk і Tcl, бібліотеки для мов платформи .NET, а також забезпечує підтримку для ODBC за допомогою ODBC-драйверу MyODBC.
1.1.3 Історія випусків
перший внутрішній випуск MySQL відбувся 23 травня 1995 року;
Версію для Windows систем (Windows 95 і NT) випущено 8 січня 1998;
Версія 3.23: бета-версія в червні 2000, реліз в січні 2001;
Версія 4.0: бета в серпні 2002, реліз в березені 2003;
Версия 4.1: бета в червні 2004, реліз в жовтні 2004;
Версия 5.0: бета в березні 2005, реліз в жовтні 2005;
Версия 5.1: розробки ведуться з листопада 2005, реліз намічений на 2009 рік.
1.2 Python
Python — інтерпретована об'єктно-орієнтована мова програмування високого рівня з динамічною семантикою. Розроблена в 1990 році Гвідо ван Россумом. Структури даних високого рівня разом із динамічною семантикою та динамічним зв'язуванням, роблять її привабливою для швидкої розробки програм, а також в якості засобу поєдання існуючих компонент. Пайтон підтримує модулі та пакети модулів, що сприяє модульності та повторному використанню кода. Інтерпретатор Пайтон та стандартні бібліотеки доступні як у зкомпільованій так і у вихідній формі на всіх основних платформах. В мові програмування Пайтон підтримується декілька парадигм програмування, зокрема: об'єктно-орієнтована, процедурна, функціональна та аспектно-орієнтована.
1.2.1 Характеристики Пайтона
Серед основних її переваг можна назвати такі:
чистий синтаксис (для виділення блоків слід використовувати відступи);
переносимість програм (що властиве більшості інтерпретованих мов);
стандартний дистрибутив має велику кількість корисних модулів (включно з модулем для розробки графічного інтерфейсу);
можливість використання Пайтона в діалоговому режимі (дуже корисне для експериментування та розв'язання простих задач);
стандартний дистрибутив має просте, але разом із тим досить потужне середовище розробки, яке зветься IDLE і яке написане на мові Пайтон;
зручний для розв'язання математичних проблем (має засоби роботи з комплексними числами, може оперувати з цілими числами довільної величини, у діалоговому режимі може використовуватися як потужний калькулятор).
Пайтон має ефективні структури даних високого рівня та простий, але ефективний підхід до об'єктно-орієнтованого програмування. Елегантний синтаксис Пайтона, динамічна обробка типів, а також те, що це інтерпретована мова, роблять її ідеальною для написання скриптів та швидкої розробки прикладних програм у багатьох галузях на більшості платформ.
Інтерпретатор мови Пайтон може бути розширений функціями та типами даних, розробленими на C чи C++ (або на іншій мові, яку можна викликати із C). Пайтон також зручна як мова розширення для прикладних програм, що потребують подальшого налагодження.
1.2.2 Історія
Пайтон був створений на початку 1990-х співробітником голландського інституту CWI Гвідо ван Россумом (Guido van Rossum), що брав участь у розробці мови АВС. Мова була призначена замінити Бейсік, який тоді застосовувався під час навчання програмуванню. Гвідо почав писати Пайтон вдома, запозичивши деякі напрацювання мови АВС. Потім мова почала вільно поширюватися через Інтернет, і сподобалася іншим програмістам. З 1991 року Пайтон є цілком об'єктно-орієнтованим. Пайтон також запозичив багато рис таких мов, як C, C++, Modula3 і Icon, й окремі риси функціонального програмування з Ліспу.
Назва мови виникла зовсім не від виду плазунів. Автор назвав мову на честь популярного британського комедійного серіалу 70-х років «Повітряний цирк Монті Пайтона». Втім, все одно назву мови частіше асоціюють саме із змією, ніж з фільмом - піктограми файлів в KDE або в Windows і навіть емблема на сайті python.org зображають зміїну голову.
1.2.3 Платформи
Пайтон портований на всі відомі платформи — від КПК до мейнфреймів. Існують порти під Windows, всі варіанти UNIX (включно з Linux), Plan 9, Mac OS і Mac OS X, Palm OS, OS/2, Amiga, AS/400 і навіть OS/390 і Symbian.
При цьому, на відміну від багатьох портованих систем, на кожній платформі Пайтон підтримує характерні для даної платформи технології (наприклад, Microsoft COM). Крім того, існує спеціальна версія Пайтона для віртуальної машини Java — Jython, що дозволяє інтерпретатору виконуватися на будь-якій системі, що підтримує Java, класи Java можуть безпосередньо використовуватися з Пайтона і навіть бути написаними на Пайтоні. Нещодавно почалася розробка системи, направленої на більш повну інтеграцію з платформою .NET — Iron Python.
1.2.4 Типи й структури даних
Пайтон підтримує динамічну типізацію, тобто, тип змінної визначається лише під час виконання. З базових типів слід зазначити підтримку цілих чисел довільної довжини і комплексних чисел. Пайтон має багату бібліотеку для роботи з рядками, зокрема, кодованими в юнікоді.
З колекцій Пайтон підтримує кортежі (tuples), списки (масиви), словники (асоціативні масиви) і від версії 2.4, множини.
Система класів підтримує множинне успадкування і метапрограмування. Будь-який тип, включаючи базові, входить до системи класів, й за необхідності можливе успадкування навіть від базових типів.
1.2.5 Синтаксис
Програми, написані на Пайтоні, легко читаються. Мова має чіткий і послідовний синтаксис, продуману модульність і маштабованість. Однією з цікавих синтаксичних особливостей мови є виділення блоків програми з допомогою відступів (прогалин чи табуляцій), у Пайтоні відсутні операторні дужки begin/end як у мові Паскаль чи фігурні дужки, як у C. Позаяк у більшості стилів форматування операторні дужки займають цілий рядок, цей трюк дозволяє помітно зменшити кількість рядків програми:
Программа на С
Еквівалентна програма на Python
int factorial(int x) {
if (x == 0) {
return 1;
} else {
return x * factorial(x-1);
}
}
def factorial(x):
if x == 0:
return 1
else:
return x*factorial(x-1)
Отже, поведінка і навіть коректність програми може залежати від початкових прогалин у тексті. Деякі критики мови вважають таку поведінку протиінтуїтивною.
Пайтон пропонує зручну систему автоматичного документування коду — кожен модуль, клас, або функція може мати рядок документації. При інтерактивній роботі рядки документації доступні із системи допомоги.
1.2.6 Функціональне програмування
Python пропонує засоби програмування в функціональному стилі. Найпростішими є спискові висловлювання (list comprehension). Наприклад, щоб отримати список квадратів натуральних чисел, менших 10, можна вжити вислів:
l = [x**2 for x in range(10)]
Підтримуються анонімні функції:
add2 = lambda x: x+2
Після чого add2(5) == 7. Такі конструкції корисні, наприклад, як аргументи у функціональних висловлюваннях: filter(lambda x: x < 5, somelist) вибере зі списку somelist лише значення, менші 5. Такий самий результат можна одержати за допомогою спискового висловлювання [x for x in somelist if x < 5]. Анонимні функції, як і інші функції, можна створювати всередині інших функцій, реалізуючи повноцінні замикання.
1.2.7 Підключення до сокету віддаленої машини
import socket
# Створення сокету
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Підключення до віддаленої машини, до
# віддаленого порта
sock.connect((remote_host, remote_port))
# Відслання запиту до віддаленої машини
sock.send("Why don't you call me any more?\r\n")
# Отримати відповідь від віддаленої машини,
# не більше чим 1.024 байт
response_data = sock.recv(1024)
# Завершити
sock.close( )
1.2.8 Робота з базами даних
MySQLdb – модуль для роботи з базами даних MySQL. З даного модуля використані такі функції:
connect(host,user,password,db) – з'єднатися з базою даних db як користувач user з паролем password на машині host;
cursor() - повертає об'єкт-курсор, через який можлива взаємодія з базою;
cursor.execute(query) – виконує запит query над базою;
cursor.fetchone() - добуває один запис з об'єкта-курсору;
cursor.fetchall() - добуває усі записи з об'єкта-курсору.
2 Правила гри
Правила гри запозичені з настільної гри Konquest.
Ігровим полем є таблиця розміром 16х16 клітинок, яка відображає космічний простір. Кожна клітинка може бути пустою, або містити одну планету. Планета може належати одному з гравців, або бути нейтральною.
Планета має наступні характеристики:
Власник, тобто кому вона належить. Може мати або не мати (бути нейтральною) власника
Кількість кораблів, які знаходяться на планеті. Нейтральні планети не мають кораблів.
Продуктивність. Вказує на те, який приріст кораблів буде на даній планеті за один хід.
На початку гри кожен гравець має одну планету, продуктивність якої рівна 10. За один хід він може пересилати кораблі (флот) з однієї планети на іншу. Переміщення кораблів може зайняти декілька ходів – це залежить від відстані між планетами. Таким чином можна пересилати підкріплення на свої планети, захоплювати нейтральні або чужі планети.
Метою гри є захоплення усіх планет. Гравець виграє тоді коли захопить всі планети і знищить всі флоти противника. Коли гравець втрачає усі свої планети і флоти, то він програє.
3 Реалізація
3.1 База даних
База даних керується СКБД MySQL. Вона має назву SC (від слів Space Conquest).
Веб-сервер з'єднується з базою даних як користувач user, який не може вносити зміни до бази. Ігровий сервер — як користувач admin, він має усі права для роботи з таблицями.
До бази даних SC входять такі таблиці:
USERS – містить інформацію про зареєстрованих гравців, зокрема логін, пароль, ім'я і колір.
PLANETS – тут міститься інформація про гру до якої належить планета ID_GAME. В даній таблиці містяться дані про усі планети, зокрема: координати: X і Y, продуктивність, ID власника, кількість кораблів і літера, що зв'язана з планетою.
MAX_PLAYERS – дані про максимальну кількість гравців у грі, які задає користувач при її створенні.
PLAYERS – гравці, які на даний момент беруть участь у якійсь грі. Тут заповнюються такі поля, як ID гравця, ID гри, а також текстове поле STATUS.
FLYING_SHIPS – дана таблиця використовується виключно ігровим сервером. У ній записана інформація про кораблі, які були відправлені з однієї планети на іншу, але ще не досягли цілі.
LOG_FIGHT – журнал боїв.
HIGH_SCORE – таблиця найліпших результатів.
3.2 Робота з мережею
Сокети — це назва програмного інтерфейсу для забезпечення інформаційного обміну між процесами. Процеси при такому обміні можуть використовуватися як на одній ЕОМ, так і на різних ЕОМ, зв'язаних між собою мережею.
Протокол передачі повідомлень оснований на XML.
Розширювана мова розмітки (XML) — стандарт побудови мов розмітки ієрархічно структурованих даних для обміну між різними програмами, зокрема, через Інтернет. XML документ складається із текстових знаків, у найпростішому випадку, — ASCII, і придатний до читання людиною.
Повідомлення, якими обмінюються веб-сервер і ігровий сервер. Спочатку вказується повідомлення веб-сервера, а потім – відповідь ігрового сервера.
Реєстрація нового гравця.
< Register
login=”назва акаунта”
password=”пароль”
name=”Ім'я користувача”
color=”Колір гравця”
/>
< Answer
answer=”OK”
uid=”ID нового користувача”
message=”Текстове повідрмлення”
/>
Авторизація гравця.
< Authenticate
login=”назва акаунта”
password=”пароль”
/>
< Answer
answer=”OK”
uid=”ID нового користувача”
message=”Текстове повідрмлення”
/>
Вийти зі гри.
< Logout
uid=”ID гравця”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
Створити нову гру.
< CreateGame
uid=”ID гравця”
players=”кількість гравців”
planets=”кількість нейтральних планет”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
Приєднатися до гри.
< JoinGame
uid=”ID гравця”
gid=”ID гри”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
Зробити хід.
< Move
uid=”ID гравця”
from=”з якої планети”
to=”на яку планету”
count=”кількість кораблів”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
Підтвердити зроблені ходи.
< Ready
uid=”ID гравця”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
Спитати про стан гри.
< Ask
uid=”ID гравця”
/>
< Answer
answer=”OK”
message=”Текстове повідрмлення”
/>
3.3 Веб-інтерфейс
3.3.1 Веб-сервер
Веб-сервер — це сервер, що приймає HTTP-запити від клієнта, звичайно веб-браузерів, і видає HTTP-вібповідь, звичайно разом з HTML-сторінкою, зображенням, файлом, медіа-потоком або іншими даними. Веб-сервер — основа всесвітньої павутини.
Веб-сервером називають як програмне забезпечення, виконуюче функції веб-сервера, так і комп'ютер, на якому це програине забезпечення працює.
До програмного забезпечення, що виконує функції веб-сервера, яке було використано, належить Apache (вільний веб-сервер) і програма написана на пайтоні, яку завантажує Apache при необхідності. Дана програма генерує код сторінки.
3.3.2 Генерація коду сторінки за допомогою шаблонів
Кожна сторінка, яку генерує веб-сервер, має свої особливості. Це спричинено різними HTTP-запитами які засилає веб-браузер, відповідю на ці запити ігрового сервера і інформацією яка постійно змінюється в базі даних. По цій причині побудову сторінок можна організувати за допомогою шаблонів.
Більшість шаблонів містять рядки обмежені подвійними фігурними дужками {{шаблон}}. Даний рядок заміняється на один із шаблонів, або заміняється на порожній рядок.
Існує головний шаблон template_common.html (див. лістинг). Він містить банер з надписом SPACE CONQUEST і меню, яке розташоване на лівій стороні сторінки. Все інше це або шаблон template_login.html (див. лістинг) або HTTP-шаблон повністю згенерований вебсервером (основна сторінка, сторінка рекордів, сторінка додання/створення бою). В меню шаблону template_common.html пункт бої може не відображатися у випадку коли на даній сторінці жодний з користувачів не авторизований.
template_login.html:
Даний шаблон призначений для авторизації і реєстрування користувачів. Він містить два рядки для заміни: {{login}} і {{register}} — авторизація і реєстрування відповідно. В рядку {{register}} міститься рядок для заміни {{color}}. Це масив кольорів з яких користувач обирає собі один при реєстрації.
Сторінка гри реалізована за подібним принципом. Вона містить основний шаблон template_common1.html. Даний шаблон немістить відображувану на сторінці інформацію. Він містить два рядки для заміни: {{meta}} і {{template}}. {{meta}} реалізована для додання css-файлів і для організації автооновлення сторінок. В {{template}} підставляється значення шаблону template_space.html.
template_space.html
Призначений для відображення на ігровій сторінці. Містить рядки: {{info}}, {{move}}, {{events}}, {{space}}, {{planets}}.
{{info}} — інформація про події гри на даному кроці зв'язана з певним гравцем.
{{events}} — історія бою. Інформація про всі події гри.
{{space}} — ігрове поле. Відображення всіх планет і їх кольорів.
{{planets}} — Інформація про планети. Ім'я, власник, виробництво, кількість планет. Тільки для планет, що мають власника.
Всі ці рядки повністю генеруються веб-сервером з використанням бази даних.
{{move}} — форма за допомогою якої здійснюєся управління грою (реалізація ходів). Містить три шаблони які використовуються залежно від етапу гри.
3.3.3 Каскадна таблиця стилів CSS
Каскадні таблиці стилів — спеціальна мова, що використовується для відображення сторінок, написаних мовами розмітки даних. Найбільш часто CSS використовують для візуальної презентації сторінок, написаних HTML та XHTML, але формат CSS може застосовуватися до інших видів XML-документів.
Однією з переваг CSS є те що інформація про стиль для цілого сайту або його частин може міститися в одному .css-файлі, що дозволяє швидко робити зміни в дизайні та презентації сторінок.
Для всіх сторінок сайту використовується стиль sc.css. Для сторінки гри також використовується стиль space.css.
Висновки
В ході виконання курсової роботи було реалізовано клієнську частину — веб-інтерфейс. Її було написана на мові програмування python. База даних SC керується СКБД MySQL. Клієнт зв'язується з базою даних за допомогою вбудованих функцій. Обмін повідомленнями між клієнтом і сервером здійснюється за допомогою протоколу на основі xml-запитів. Для зв'язку зовнішньої програми з веб-сервером використано стандарт інтерфейсу CGI.
Перелік посилань
Alex Martelli Python Cookbook – O'Reilly, 2001 – 677pg.
Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач Язык программирования Python – 2001 – 454 c.
Mark Pilgrim Dive into Python, http://diveintopython.org.
MySQL 5.0 Reference Manual, http://dev.mysql.com.
Додаток