![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
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ę?
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? Ten post edytował WebCM 1.12.2016, 21:06:39 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 10:28 |