Cześć! Próbuje stworzyć gierkę. Mam fizykę postaci, kolizje, mapę. Jednak co to za gra bez przeciwników? Niestety nie mam pojęcia jak się za to zabrać. Szperałem trochę w internecie, ale nie mogłem znaleźć niczego pasującego do mojego stylu kodu. Moją prośbą jest o wskazanie mi drogi w jaki sposób mógłbym to zrobić. Najlepiej uczę się na przykładach. Może posiadacie jakieś tematy na innych forach, które posiadają przykłady dobrego kodu, którym mógłbym się posiłkować przy tworzeniu przeciwników. Piszę w bibliotece SDL2 i w Visual studio 2017 pro, ale to chyba nie ma znaczenia.
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:6



- Rejestracja:około 22 lata
- Ostatnio:32 minuty
- Postów:6656
Przeciwnicy działają tak samo jak gracz. Tylko ich sterowanie podlega pod AI, a nie klawiaturę/pad/itp. Ich pociski powinny nie zderzać się z wrogami, tylko z samym graczem.
AI to może być prosta funkcja: idź w lewo, strzel, idź w prawo strzel i zapętlić.
Jak chcesz kod, to pooglądaj jakiś projekt open source... Może Super Tux...
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:6
Wiem jak działają przeciwnicy. Trudno tworzyć grę, nie grając w żadną, a we większości działają na tej samej zasadzie. Chodziło mi bardziej o takie rzeczy jak :
- Czy zrobić do tego nową klasę czy w zupełności wystarczy w klasie np. o nazwie gameplay gdzie renderuje mapę itp.
- Czy użyć zwykłego wektora std::vector<klasa*> nazwa; czy może std::vector<std::shared_ptr<klasa> > nazwa;, czy w ogóle najbardziej opłacalną opcją jest zrobienie innym sposobem.
- itd.
Poczytaj może o drzewach behavioralnych. Żeby załapać podstawy możesz zacząć od tego:
- https://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php
- http://aigamedev.com/insider/tutorial/second-generation-bt/
- http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter06_The_Behavior_Tree_Starter_Kit.pdf
- https://github.com/aigamedev/btsk <--- tu masz kod do punktu wyżej
Powinno Ci to dać jakieś podstawy i wskazać kierunek.

- Rejestracja:około 22 lata
- Ostatnio:32 minuty
- Postów:6656
Harna napisał(a):
Wiem jak działają przeciwnicy. Trudno tworzyć grę, nie grając w żadną, a we większości działają na tej samej zasadzie. Chodziło mi bardziej o takie rzeczy jak :
- Czy zrobić do tego nową klasę czy w zupełności wystarczy w klasie np. o nazwie gameplay gdzie renderuje mapę itp.
- Czy użyć zwykłego wektora std::vector<klasa*> nazwa; czy może std::vector<std::shared_ptr<klasa> > nazwa;, czy w ogóle najbardziej opłacalną opcją jest zrobienie innym sposobem.
- itd.
Ty boisz się pisać kod bez zapewnienia, że będzie dobrze...
Klasy są po to, żeby łatwiej ogarnąć kod. Żeby nie pisać wszystkiego w jednym pliku. Na scenę powiny być dodane obiekty, ale one same powinny odpowiadać za siebie. Nie powinieneś dodawać żadnego specjalnego kodu dla wrogów do dobrze napisanego engine.
Ja w Unity zrobiłem wspólną klasę po której dziedziczą klasy wrogów i gracza.
Klasa wspólna ma wszystkie metody typu walk left, jump itp., a klasa gracza podpina pod te metody input managera, zaś klasa wroga wykorzystuje te metody w AI.