Playora
Od kuchni

Jak działa Collective Conflict od strony technicznej

Collective Conflict jest grą przeglądarkową, ale najważniejsze reguły nie są rozstrzygane wyłącznie przez kod uruchomiony u gracza. Klient odpowiada za interfejs i wizualizację, a serwer utrzymuje autorytatywny stan partii. Taki podział jest szczególnie ważny w grze z ukrytą informacją, pułapkami i Wabikiem udającym Statek Matkę.

Klient: plansza, sterowanie i podpowiedzi

Warstwa przeglądarkowa działa w HTML, CSS i JavaScript. Rysuje heksy i jednostki, obsługuje mysz, dotyk, drag and drop, zoom oraz panele lobby. Klient może pokazywać podświetlenia legalnych celów, ale ostateczna akcja jest nadal weryfikowana po stronie serwera. Dzięki temu błąd interfejsu nie powinien automatycznie stawać się legalnym ruchem w stanie gry.

WebSocket zamiast odpytywania co kilka sekund

Połączenie WebSocket pozwala serwerowi wysyłać aktualizacje natychmiast po ruchu, zmianie gotowości, wiadomości czatu lub zdarzeniu zegara. Nie trzeba co kilka sekund pobierać pełnej planszy zwykłym żądaniem HTTP. Jest to szczególnie ważne przy grze na telefonie, gdzie opóźnienie między ruchem a odświeżeniem interfejsu szybko staje się zauważalne.

Ukryta informacja jest filtrowana na serwerze

Przeciwnik nie powinien móc otworzyć narzędzi deweloperskich i odczytać, który identycznie wyglądający sygnał jest prawdziwym Statkiem Matką. Dlatego dane wysyłane do poszczególnych graczy są filtrowane. Podobnie ukryte pułapki Sieciarza nie powinny być obecne w publicznym stanie przeciwnika tylko dlatego, że klient ich nie rysuje. Bezpieczeństwo blefu wynika z tego, czego serwer nie wysyła, a nie tylko z warstwy graficznej.

Serwerowe zegary

Tryby czasowe są rozstrzygane po stronie serwera. Przeglądarka może wyświetlać płynnie malejący licznik, ale nie jest źródłem prawdy o tym, czy czas osiągnął zero. Dzięki temu zmiana zegara systemowego, zatrzymanie karty lub chwilowe opóźnienie renderowania nie powinny dawać dodatkowego czasu.

Replay jako zapis zdarzeń

Replay odtwarza zaakceptowaną kolejność zdarzeń i migawki stanu, a nie symuluje od nowa partii na podstawie losowych decyzji klienta. To pozwala wykorzystać ten sam odtwarzacz do historii zakończonych gier i do samouczków pokazujących legalne pola oraz ruchy jednostek.

Pamięć przeglądarki bez konta

Gra nie wymaga rejestracji. localStorage służy m.in. do zapamiętania języka, preferencji Quick Match i danych potrzebnych do reconnectu. Dane rozgrywki pozostają jednak po stronie serwera; lokalna pamięć jest wygodą dla użytkownika, a nie zastępstwem autorytatywnego stanu meczu.

Dlaczego ta architektura ma znaczenie dla zasad

W grze abstrakcyjnej łatwo uznać warstwę techniczną za niewidoczną. Tutaj jest ona częścią uczciwości mechanik: serwer musi jednakowo liczyć ruchy dla wszystkich, ukrywać prywatne informacje, rozstrzygać zegary i zapisywać zdarzenia replaya. Dzięki temu interfejs może być rozwijany niezależnie, a reguły pozostają wspólne dla komputera i telefonu.