Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Java EE] Jak zacząć pisać grę przeglądarkową?
Forum PHP.pl > Inne > Hydepark
WebCM
Przystępuję do tworzenia silnika gry typu MMOG w technologii Java EE. Dla tych, którzy nie wiedzą, co to za gatunek, wyjaśniam. Na pewno znacie takie tytuły jak Travian i Plemiona. Chcę nieco zmienić koncepcję, ale o tym później. Dlaczego Java? Otóż aplikacja działa cały czas, jest obsługa wątków i liczników. Rozgrywka będzie toczyć się w czasie rzeczywistym.

Jak do tego podejść? Jak prawidłowo zaprojektować architekturę silnika?

Przykład 1. Kiedy stawiacie budynek, w przeglądarce trwa odliczanie czasu do końca. Kiedy rozbudujecie pola uprawne, zwiększacie produkcję, np. co 5,5 sekundy liczba jednostek pszenicy zwiększy się o 1. Docelowo zboże ma przyrastać nieliniowo (w zimie nie ma żniw). Czy dla każdego gracza tworzyć osobne liczniki? Będzie ich kilka razy więcej niż graczy (osobny licznik dla pszenicy, wojska, każdego budowanego budynku) o ile Java na to pozwoli. Wraz ze zmianą pory roku trzeba zmieniać interwały (znacie lepszy sposób?). Inna koncepcja to 1 wielki timer (ewentualnie kilka timerów), gdzie iterujemy po wszystkich graczach i ich dobytku. Taki timer musiałby taktować z dużą częstotliwością, co mocno obciąży procesor i pamięć. Trzecia koncepcja to obliczać stan surowców, kiedy takie informacje są potrzebne.

Przykład 2. Kiedy będę chciał osadzić grę w innej epoce, w całkiem innym świecie, mogą zmienić się surowce, może zmienić się ich ilość, mogą całkowicie zmienić się założenia. Myślę, że silnik powinien być uniwersalny, a wszystkie obiekty konfigurowalne. W praktyce takie założenie zwiększy złożoność kodu, a co za tym idzie, mocno obniży wydajność aplikacji. A może się mylę?

  1. // Na przykładzie Traviana - podejście nr 1 - sztywna aplikacja
  2. class Village {
  3. private int wood;
  4. private int clay;
  5. private int crop;
  6. }
  7.  
  8. // Podejście uniwersalne (zakładamy, że jest jakieś globalne terytorium)
  9. class TerritoryItem {
  10. private Position position;
  11. private TerritoryItemType type; // luźna fantazja
  12. private List<Item> items; // ma jakieś atrybuty
  13. }

Do tego trzeba ustalić jakieś warunki typu "wioska może mieć max N atrybutu A". Czy warto rozważyć zwiększenie skomplikowania aplikacji, aby nie pisać na sztywno w kodzie wszystkich reguł, zasad gry, surowców, jednostek, miejsc na mapie, a konfigurować je np. w bazie danych?

Serwer będzie odpowiadał wyłącznie za logikę biznesową. Komunikacja z klientem za pomocą REST lub WebSocket. Klientem będzie mogło być cokolwiek (na początek planuję konsolowy), docelowo AngularJS. Może warto przeczytać jakieś książki, zapoznać się z istniejącymi projektami przed rozpoczęciem projektowania?
gitbejbe
co do javy to wybrałeś chyba nie to forum, btw: w php też idzie ładnie napisać taką aplikacje

co do liczników to chyba oczywiste że dla każdego gracza będą osobne

pomysł z jakimś globalnym timerem w ogóle mi się nie widzi - tym bardziej z kilkoma. To samo w sobie brzmi już źle

3cie podejście wg mnie to dobry kierunek - czyli obliczać wszystko tylko wtedy kiedy jest to potrzebne. Powiedzmy chce sobie zagrać w tą grę, wchodzę na stronę, loguje się i gra się WCZYTUJE. To bardzo dobry moment aby wykonać brudną robotę. Po wczytaniu gry masz wszystko jak na tacy a klient może wykonywać masę rzeczy bez udziału serwera. Z serwerem komunikujesz się tylko w wybranych momentach - np ulepszenie budynku, wygrana bitwa, synchronizacja itd. Przynajmniej ja tak to widze.

co do tworzenia logiki, mogę Ci polecic książkę Matt Zandstra - PHP. Obiekty, wzorce narzędzia Wytanie III,
są bardzo fajne przykłady korzystania ze wzorców na przykładzie właśnie takiej gry strategicznej - z tym że dla PHP.

A na koniec, powodzenia : ) Wystarczy że skopiesz coś na wstępie i projekt do wyrzucenia
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.