Opis

Jest to gra MMO RPG przez przeglądarkę z rozbudowany wątkiem ekonomiczno-politycznym. Ma łączyć w sobie cechy gier RPG takie jak granie własną postacią którą można rozwijać w wybranym przez siebie kierunku oraz cechy strategicznych gier przeglądarkowych, czyli rozbudowana warstwa handlowa, ekonomiczna i polityczna gry.

Jest to prototyp gry ale nie wykluczam, że będę ten projekt jeszcze rozwijał.

System gry składa się na razie z 4 aplikacji: serwera, klienta, edytora i strony.

Klient gry

Napisany w coffeescripcie, języku kompilowanym do JavaScriptu. Do wyświetlania grafiki wykorzystuje silnik renderujący pixi.js. Do komunikacji z serwerem używane są WebSockety, którymi przesyła się informacje w postaci tablic w formacie JSON.

W teorii gra powinna płynnie działać na wszystkich urządzeniach, które obsługują WebGL i mają rozdzielczość powyżej 1024×768 (8 calowe tablety).

Grafika, która jest w grze bardzo dobrze się kompresuje, dzięki temu cała gra zajmuje na razie niecałe 500KB.

Sewer gry

Napisany w scali, która działa na JVM i wykorzystuje bibliotekę Akka do pracy z aktorami.

Ze względu na to, że skala jest funkcyjnym językiem programowania łatwiej się tworzy aplikacje w oparciu o aktorów (pattern maching, funkcje wyższego rzędu (nieocenione przy operacjach asynchronicznych), unikanie efektów ubocznych (side effect)).

Model aktorów umożliwia programowanie współbieżne na wyższym poziomie, bez bloków synchronize, semaforów itd. oraz całkowicie eliminuje lub zmniejsza ryzyko wystąpienia wyścigów, deadloków i zagłodzeń.

Dzięki aktorom aplikacja ma być bardziej skalowalna. Skalowalność wzwyż otrzymujemy od aktorów automatycznie lecz skalowalność w szerz (na wiele węzłów obliczeniowych) wymaga dobrego projektu, ponieważ opóźnienia w wysyłaniu danych muszą być jak najmniejsze, rzędu dziesiątek mili sekund.

Ponad to korzystając z aktorów możemy zastosować wiele strategi zwiększających niezawodność serwera i umożliwić jego poprawną pracę, gdy np. jeden z węzłów obliczeniowych się wyłączy lub będzie bug w kodzie serwera (aktor który się zawiesił przy wykonywaniu błędnego algorytmu zostanie uruchomiony ponownie).

Sewer na razie jest na frameworku Play, który wykorzystuje serwer Netty oraz zapewnia przydatne biblioteki ale może być, to jakikolwiek serwer, który umożliwia wykorzystanie WebSocketów i biblioteki Akka. Obecnie mocno zastanawiam się nad biblioteką spray.io
Jako bazę danych zastosowałem MongoDB, ponieważ jest szybka, skalowalna i przyjemna w pracy z JSONem, z którego do przechowywania danych, korzystają wszystkie systemy gry.

Serwer narazie zapewnia tylko podstawową funkcjonalność ale będzie rozwijany w ramach pracy inżynierskiej.

Edytor

Edytor wykorzystuje bibliotekę alpaca, która z Json Schema generuje wszystkie fromularze, dzięki temu, oraz restowemu iterfejsowi serwera, edycja lub dodawanie nowych typów danych jest niesamowicie proste. Wystarczy edytować/stworzyć schemę danych.

Edytor jest napisany na Play frameworku, jednak będzie przepisany od nowa na bibliotekę spray.io lub na node.js. Po stronie klienta wykrzystany będzie ember.js (one page webapp framework). Dzięki temu kod będzie jeszcze bardziej elastyczny i przejrzysty, a praca w edytorze przyjemniejsza i bardziej efektywna.

Wykorzystane technologie:

Server: Scala, Akka, Play framework, MongoDB
Edytor: Scala, Play framework, MongoDB, Alpaca
Klient: CoffeeScript, Stylus, Jade, WebSocket, PixiJS
Oraz pliki wsadowe BAT pobierają ce kod z repozytorium, bazę danych i assety dla każdego projektu

Wersja online:

Grę można przetestować wchodząc na stronę http://dzida-online.pl. Wymagane jest utworzenie własnego konta(nie trzeba potwierdzać adresu email), na stronie http://dzida-online.pl/register

GitHub

Kod źróbłowy klienta i serwera jest na publicznym repozytorium. Jest to prototyp na którym uczyłem się Scali jak i CoffeeScriptu więc kod może w kilku miejscach nie być najlepiej napisany. Struktura projektów nie jest jeszcze do końca przemyślana.
https://github.com/mpazik/dzida-game
https://github.com/mpazik/dzida-server

Zdjęcia (kliknij by powiększyć i zobaczyć opis)

Umiejętność sadzenia Miasto i handel Czat i multiplayer Sprawdzanie kolizji Lista elementów do edycji Edycja obiektów w grze, które są na mapie

Więcej zdjęć tutaj