Czy systemy osiągnięć można wdrożyć później w fazie rozwoju?

12

Nie jestem zdecydowany, czy chcę zaimplementować tę funkcję w mojej grze, czy nie. Nie chcę, aby projekt wymknął się spod kontroli, dlatego najpierw skupiam się na mechanice rdzenia.

Czy jest to funkcja, którą łatwo wdrożyć później, zakładając, że wszystkie dane przechowuję i przechowuję?

Bryan Harrington
źródło
3
Kilka lat temu przeniosłem do systemu Windows pewną dobrze znaną grę DOS - jedną z rzeczy, którą chciałbym do niej dodać, gdybyśmy mieli dokonać jakichkolwiek zmian w rozgrywce - byłyby to osiągnięcia. Więc gdybym mógł dodać osiągnięcia do ponad 10-letniej gry, wyraźnie do tego nie zaprojektowanej, powiedziałbym, że można je dodać gdziekolwiek. Cholera, ta strona ma osiągnięcia.
Jari Komppa

Odpowiedzi:

19

Czy pytasz z punktu widzenia technicznych aspektów wdrożenia lub konsekwencji projektu? Tak czy inaczej odpowiedź na twoje pytanie brzmi „tak”.

Od strony technicznej ogólnie rzecz biorąc, po prostu znajdujesz haczyki w kodzie, które reagują na Twoje osiągnięcia i umieszczasz tam swój kod śledzenia statystyk. Być może będziesz musiał dodać kilka nowych rzeczy, jeśli śledzisz rzeczy, które nie są dokładnie dyskretnymi zdarzeniami, które mają już miejsce w grze (na przykład: X rozegranych godzin).

Z punktu widzenia projektowania osiągnięcia są zewnętrznymi motywatorami, a ich dodawanie nie odgrywa zbyt dużej roli w podstawowej pętli rozgrywki, z wyjątkiem ludzi, którzy chcą ich szukać. Są więc całkiem bezpieczne.

Tetrad
źródło
Tak, teraz to robię. Dość łatwo było połączyć shotsFired++się z częścią, w której pojawiają się nowe pociski, oraz shotsHit++w części, w której kula wpływa na innego gracza. Pomogło mi to wyśledzić, kto strzelał jaką kulą (ponieważ używam tych informacji do śledzenia, kto dostał, co zabił itp.)
Bobobobo
5

Pod warunkiem, że silnik gry jest dobrze zaprojektowany i korzysta z pewnego rodzaju obserwowalnego systemu zdarzeń (w którym zdarzenia są generowane i nasłuchiwane przez zainteresowane strony), powinno być dość łatwo „podłączyć” system osiągnięć w późniejszym czasie (poprzez dodanie odpowiedni słuchacze). Ten rodzaj konstrukcji jest bardzo elastyczny.

Sok Moo
źródło
2

Ponieważ już istniejący ludzie dodali dobre odpowiedzi, pozwól mi odpowiedzieć na odkryte sytuacje.

Jeśli w ogóle jesteś w pozycji, w której ukończyłeś kodowanie swojej gry, a teraz zaczynasz kodować osiągnięcia i uważasz, że bardzo skomplikowane jest utrzymywanie zbyt wielu zmiennych i liczników oraz usuwanie ich przy określonych zdarzeniach i tym podobnych.

Zawsze możesz utworzyć jedną klasę (najlepiej singleton), aby otrzymywać wszystkie wydarzenia. Teraz wypisz wszystkie swoje osiągnięcia. Następnie wypisz wszystkie zdarzenia związane z grą, które należy śledzić. Na przykład moja obecna lista wygląda tak

KILL ENEMY - chodzenie, kule ŚMIERĆ GRACZA - odpadanie, zdrowie ENTER_ROOM, EXIT_ROOM itp.

Te dodatkowe szczegóły, takie jak chodzenie, pociski mogą być parametrami. Teraz mają jedną funkcję o nazwie fireEvent w tej klasie śledzenia osiągnięć. Przeszukaj wszystkie miejsca w kodzie, w których musisz wystrzelićZdarzenia i wywołaj tę funkcję. Teraz wykonaj resztę brudnej roboty w klasie osiągnięć. jest to najbezpieczniejszy sposób, aby nie zakłócać istniejącego kodu i osiągnięć kodu. Dla mnie zadziałało to dość szybko.

Rajavanya Subramaniyan
źródło
To naprawdę dobre rozwiązanie dla wdrożenia post-development. Będę o tym pamiętać, ponieważ nadal nie jestem pewien, czy chcę to wdrożyć. Mogę to zrobić w późniejszej fazie, ponieważ nie chcę, aby zakres mojego projektu wymknął się spod kontroli.
Bryan Harrington