Skip to content

Latest commit

 

History

History
91 lines (71 loc) · 12.9 KB

README_BULGARIAN.md

File metadata and controls

91 lines (71 loc) · 12.9 KB

Ригстър

Автор

Даниел Веселинов Господинов

Фн: 81531

СУ, ФМИ, Компютърни науки, трети курс, втора група

Проектът

Проектът е разработка в областта на компютърните игри.

Той представлява онлайн Roguelike RPG игра, предназначена да бъде играна от повече от един играч.

Съдържание

Тема

Темата на проекта е онлайн Multiplayer RPG Roguelike игра, която върви комплект със сървъра, нужен за нейното играене. Играта предоставя стандартни за този тип игри функционалности, като например: събиране на оръжия, колби и магии от съкровищни съндъци, убиване на вражески единици с примитивен изкуствен интелект, онлайн социализиране с други играчи и други неща.

Теоретично описание на решението на проблема

Сървърът

За успешното играене на една онлайн игра за повече от един играчи е нужно сървър, който постоянно да следи за състоянието на играта и да делегира нейното развитие във времето. Сървърът, с помощта на Java 11, нишки, docker, е изграден оптимално да поддържа множество клиенти и да държи двустранна комуникационна връзка с клиентите си.

Клиентът

Както всяка игра, тя трябва да предоставя графична среда, да умее да обработва клиентския вход (от клавиатура, джойстик, VR уреди и прочие), да умее да работи достатъчно бързо, че да се предостави гладко усещане за игра, да обработва и споделя информация от сървъра и други. Някои аспекти се постигат лесно с помощта на софтуерна рамка за разработка на игри.

Проектиране и реализация

Сървърът

Той се състои от една главна нишка, която се занимава с приемането на нови клиенти и множество (за в момента неограничен брой) помощни нишки, които се занимават с комуникацията с клиентите. В момента, в който нов клиент направи връзка със сървъра, за него се стартира нова нишка, която си обслужва само него. Това е направено, за да се постигне поддръжката на повече от един клиенти.

Понеже всички клиенти достъпват общи ресурви върху съвъра, то повечето функционалности, които сървърът предлага (като например broadcast на съобщение из всички клиенти) са синхронизирани. Сървърът работи със синхронизирани структури от данни. Тези структури от данни съдържат информация за чудовищата по картата (име, позиция, жизнени точки и други), информация за всеки един играч (име, позиция и други) и за съкровищата из картата. Цялата тази информация се зарежда динамично на сървъра при зареждането на избраната карта, на която ще се играе играта. Първоначално, преди да започне самата игра, сървърът изпраща на клиента файловете, които са нужни на клиента да зареди картата, на която се играе играта, след което клиентът събира от сървъра информация за това къде са останалите играчи, къде и на колко живот са противниците, къде се намират съкровищата по картата и дали вече те са използвани от други играчи. Главната цел на сървъра е да съхранява едно единно и консистентно състояние на картата, на която се играе играта, с цел всеки клиент да получава една и съща информация за света. Така всеки играч играе в свят еднакъв с останалите играчи. Сървърът също частично играе роля в мрежовото синхронизиране на чудовищата в играта. Понеже всяко чудовище има примитивен AI (гони играчи, които са твърде близо), то сървърът частично се грижи това чудовище да гони точно и само един човек. В сървъра не са използвани външни библиотеки или софтуерни рамки, всичко е писано на чиста Java. Сървърът работи в класове-модели на обектите, които се синхронизират по мрежата.

Клиентът

Клиентът е играта. Клиентът предоставя графичната среда, занимава се с обработката на вход от периферия, занимава се с обновяването на състоянието на играта и с мрежови синхронизации на състоянието на играта. Определен брой пъти в секундата, играта бива обновявана и преначертавана, също, при нужда, някои промени, които са от глобално значение, се изпращат на сървъра, който съобщава на останалите играчи за тези промени в играта. В началото на играта, играчът бива посрещнат от меню, в което се очаква да се въведе име на играч и IP адрес на сървъра. В случай че играчът въведе IP адрес, на който върви Ригстър сървър, той бива вкаран в света при останалите играчи след кратко събиране на информация за него. В този свят играчът може да се разхожда, да убива чудовища, да събира съкровища и прочие. В клиента се използва едно единствено външно нещо- софтуерната рамка libGDX. Тя спомага с менежирането на входа от играчите и с графиката и зареждането на картата, изпратена от сървъра. Клиентът съдържа богата гама от обекти. Архитектурата е сравнително дебела.

  • Актрьорите

* Съкровищата

* Сцените

* Мрежовият контролер

Ръководство за инсталация

Сървърът

Сървърът е контейниризиран с docker и изображението може да бъде намерено тук: Docker hub. Това е направено с цел по-лесно стартирване на произволна машина. Като например, в моя случай, на AWS машина.

Сървърът много лесно може да бъде стартиран през docker с командата: docker run -p 3000:3000 -t danielgospodinow/riggster-server, която стартира сървъра и свързва порт 3000 на докер контейнера с порт 3000 на машината, на която се стартирва сървтърът.

Освен docker, сървърът може да се стартира с командата java -jar RiggsterServer/out/artifacts/RiggsterServer_jar/RiggsterServer.jar.

Клиентът

Клиентът преди да бъде стартиран, той трябва да бъде изграден ("build"-нат). Преди изграждането трябва да бъде променена стойността на jdk полето във файла packr-YOUR_BUILD_TARGET-config.json. То трябва да предоставя валиден път към JDK. След това се изпълняват един от тези скриптове.

  • За Windows (64-bit): cd Riggster && ./build-win64.sh
  • За Linux (64-bit): cd Riggster && ./build-linux.sh

След това се търси изпълним файл Riggster(.exe) в съответната директория на съответния build.

Другят вариант е с командата cd Riggster/out/artifacts/Riggster_jar && java -jar desktop_main.jar.

Демонстрация на клиента с няколко снимки

Резултати

Клиентът

Макар че има доста още за разработване, тя е абсолютно функционираща игра, която предоставя най-основните неща. Има още доста функционалности, които ще бъдат добавени за вбъдеще, които драстично ще подобрят удоволствието от играенето.

Сървърът

В общи линии е завършен. Единствено може да бъде надграждан, за да пасва на новите функционалности на клиента.

Литература и използвани източници

  1. Видео материал в Youtube: Super Mario development with libGDX
  2. Курсът по Java във ФМИ: Java съвременни технологии (ФМИ)
  3. Курсът по мрежи във ФМИ: Мрежово програмиране (ФМИ)
  4. Документацията на API-то на софтуерната рамка: libGDX API
  5. Класиката: Stack Overflow

Приложение

  • Линк към проекта в Github: Riggster
  • Линк към използваната софтуерната рамка за разработка на игри: libGDX
  • Линк към програмата, която спомага за генериране на карти: TiledMap
  • Линк към контейнеризиращия софтуер: docker