Gry (Bomberman) - za co odpowiedzialna jest mapa?

0

Przeglądając forum natknąłem się na temat założony przez owcę który chcesz stworzyć klon Bombermana... Zaciekawiło mnie jak można by to zrealizować i zauważyłem pewien problem który mam nawet przy... Tetrisie. W przypadku Tetrisa naturalne wydaje się że mamy klasę Klocek (kształt, obroty itp.) i jakąś Mapę, może Planszę która przechowuje informacje o aktualnie zajętych polach, usuwa zapełnione linie itp. ale pojawia się pytanie, kto odpowiada za przesuwanie się klocka i dodanie go do mapy? Bo wydaje mi się że jest to na skraju obu klas.

Wróćmy jednak do Bombermana... Znowu mamy mapę na której są różne obiekty (ściany, bomberman, jakieś inne stwory, bomby, bonusy...) naturalne wydaje się że te obiekty powinny mieć jakiś wspólny interfejs. Ale teraz pytanie, kto powinien przesuwać obiekty, przechowywać je i wywoływać pewne zdarzenia? Wykombinowałem coś takiego:

Diagram

Powiedzmy że Mapa zawiera tablicę w której ma odwołania do obiektów znajdujących się na danych polach (o ile coś jest...), dzięki temu Mapa sprawdza czy inny obiekt może się przemieści na daną kratkę (sprawdza czy MożnaPrzejść?). W razie wybuchu bomby sprawdza które obiekty znajdują się w polu rażenia i wywołuje odpowiednie zdarzenie w obiektach, a one same decydują co mają zrobić (ściana zniknie, stwór zginie, bomba wybuchnie, bonus zniknie,...). A przy poruszaniu sprawdzamy co się dzieje po nadepnięciu (bonus działa na bombermana w jakiś sposób, może jakaś specjalna bomba-mina albo drzwi do następnego lvlu?). Tylko no właśnie... Czy w takim projekcie nie siedzi gdzieś pułapka w którą brnę nieświadomie? Czy w pewnym momencie nie okaże się że mam wszystko zależne od wszystkiego?

Jaka jest Wasza opinia o takim projekcie?

P.S. mam nadzieję że w diagramie za dużo błędów nie zrobiłem... ;)</url></url>

0

Ja ostatnio tworzyłem grę, co prawda nie Bombermana, ale coś takiego: http://www.somekind.pl/silverlight/mf/ i miałem podobny problem na początku.
Ostatecznie rozwiązałem to w sposób, który może pokazuje diagram: http://www.somekind.pl/silverlight/mf/diagram.png

A zatem - klasa Silnik (czyli odpowiednik Mapy) posiada pola zawierające ObiektyRuchome. ObiektRuchomy (abstrakcyjny) posiada abstrakcyjną metodę Przesuń, którą nadpisują klasy potomne - czyli Gracz i PoruszanySilnikiem (wrogowie, pociski, bonusy, obiekty tła). Dzieje się tak, ponieważ sposoby poruszania dla tych dwóch klas są inne. Gracz poruszany jest w reakcji na wciskanie przycisków klawiatury, natomiast nowa pozycja obiektu typu PoruszanySilnikiem jest wyliczana na podstawie jego starej pozycji, kierunku i czasu, który upłynął od ostatniej "klatki". Metoda ta dla Gracza pilnuje, aby nie można było nim wyjechać poza obszar planszy, natomiast dla PoruszanychSilnikiem ustawia wartość życia na 0, dzięki czemu przy "renderowaniu" następnej "sceny" Silnik może je usunąć.
Zatem u mnie za poruszanie się odpowiadają same obiekty, natomiast Silnik za:

  • wykrywanie zderzeń;
  • usuwanie martwych obiektów (zestrzelonych, jak i tych poza planszą);
  • tworzenie wybuchów;
  • generowanie obiektów losowych (prawie wszystkich) oraz tworzonych w odpowiedzi na zdarzenia (pocisków), przy użyciu klasy pomocniczej GeneratorObiektów.

Myślę, że takie rozwiązanie jest optymalne i bardziej obiektowe - w końcu to obiekt się porusza. Niby można byłoby zrobić w Silniku metodą odpowiedzialną za poruszanie obiektów, która musiałaby wykryć typ obiektu oraz podjąć odpowiednią akcję, ale wydaje mi się, że byłoby to bardziej zagmatwane i mniej elastyczne rozwiązanie.
No, ale ja się na grach nie znam, po prostu nie mogę spać ;)

0

Oczywiscie wszystko zalezy od podejscia do problemu.

Dla wielu osob mapa to nie zbior funkcjonalnosci, ale dana - element bierny; zatem bardziej odpowiada rekordowi niz klasie, a zaimplementowana w formie klasy sluzy jedynie do przechowywania wartosci i dbania o ich spojnosc, ale nie o kontrolowania jednostek na niej. Przy takich zalozeniach, odrebne klasy silnika czy mechanizmu renderujacego, przyjmuja mape jako argument. Jest to wygodne, poniewaz - jak napisal somekind - obiekty same moga implementowac logike poruszania sie. Mapa jest elementem biernym.

Rzecz jasna, nic nie stoi na przeszkodzie, by to mapa byla sama w sobie obiektem, zarzadzajacym rozgrywka - wszystko zalezy od podajscia; musisz tylko byc konsekwentny w wyborach.

0

bomber man to jeedna z najprostszych gierek do tworzenia jak sie w tym pogubisz to sobie odpusc pisanie gierek

1 użytkowników online, w tym zalogowanych: 0, gości: 1