aaadam Temat założony przez niniejszego użytkownika |
enemy_manager porada jak zaimplementowac akcje unikanlą w enemy różnego rodzaju które znajdują się w jednym kontenerze » 2025-11-29 21:38:17 witam, tworzę sobie grę vampire survivors, mam już poruszanie się playerem, dash, spawn enemy w liscie kilka rodzajów(polomorfizm), teraz chciałbym dodać aby co kilka sekund jakiś enemy z puli wykonywał dodatkowe akcje np dash w stronę player lub teleport za playera. Zastanawiam się jak do poprawnie zaimplementować aby można było to rozszerzać w przyszłości. Zastawiam się nad stworzeniem dodatkowej klasy enemy_manager i stworzyć instancje w game_engine i w niej trzymac listę enemy. Ale tutaj jest dodatkowy problem, jak mam jedną listę enemy bo polimorfizm to jak poporawnie wybierac z tej listy enemy jednego rodzaju i z tej puli losowo wybierac jednego enemy, bo np fast enemy robi dash w strone playera a jakis inny enemy robi teleport za playera, jeden rodzaj enemy robi swoją unikalną akcje, poniżej dodałem log jak wygląda moja struktura aktualnie. Proszę o pomoc :), pozdro.
| main.py │ camera.py │ game_engine.py │ __init__.py │ ├───config │ │ game.py │ │ player.py │ │ spawn_manager.py │ │ __init__.py │ │ │ ├───common │ │ colors.py │ │ window.py │ │ __init__.py │ │ │ ├───enemies │ │ base_enemy.py │ │ elite_enemy.py │ │ fast_enemy.py │ │ tank_enemy.py │ │ __init__.py │ │ │ └───weapons │ base_weapon.py │ basic_weapon.py │ __init__.py │ ├───entities │ │ player.py │ │ __init__.py │ │ │ ├───enemies │ │ base_enemy.py │ │ basic_enemy.py │ │ elite_enemy.py │ │ fast_enemy.py │ │ tank_enemy.py │ │ __init__.py │ │ │ ├───pickups │ │ base_pickup.py │ │ health_pickup.py │ │ xp_orb.py │ │ __init__.py │ │ │ ├───projectiles │ │ base_projectile.py │ │ basic_projectile.py │ │ __init__.py │ │ │ └───weapons │ base_weapon.py │ basic_weapon.py │ __init__.py │ ├───systems │ │ enemy_spawner.py │ │ upgrade_system.py │ │ xp_system.py │ │ __init__.py │ │ │ └───pickups │ drop_tables.py │ pickup_manager.py │ __init__.py │ ├───ui │ upgrade_menu.py │ __init__.py │ └───upgrades base_upgrade.py new_weapon_upgrade.py stat_upgrade.py weapon_level_upgrade.py __init__.py |
|
tBane |
» 2025-11-29 23:48:37 Zrób funkcje update(). W takiej funkcji możesz pisać logikę dla każdego z enemies.
MainEnemy:update(); EliteEnemy:update() BasicEnemy:update() TankEnemy::update();
I w tej funkcji możesz np. wykonywać akcje zależna od gracza. -czy jest w zasięgu widzenia wtedy podążaj -zasięgu ataku wtedy atakuj -w przeciwnym wypadku chód losowy lub bezczynność |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2025-11-30 10:14:25 to już dawno mam zaimplementowane, chodzi mi o to jak sprytnie wyciągać enemy jednego rodzaju z jednego kontenera losowo, mogę tworzyć dodatkową listę i z niej losować ale może ktoś zna sprytniejszy sposób. |
|
pekfos |
» 2025-12-01 17:50:27 A po co..? Wyciągasz losowego wroga, każesz mu wykonać akcję zależną od jego typu. Po co najpierw chcesz losować typ, a potem losować wroga z tego typu? Chcesz mieć jakieś nietypowy rozkład prawdopodobieństwa czy co? |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2025-12-02 15:48:11 Chce zeby randomo sie wybierały enemy z jednego rodzaju. Enemy na poczatku listy będa zawsze bliżej playera ponieważ żyły wcześniej niż te dalej w liście bo zdązyły się zbliżyć już do playera. Chcę żeby dany enemy z danego rodzaju wykonał akcje np skok w stronę playera ale żeby to było randomowo, raz ten co jest blisko raz ten co znajduje się daleko raz ten co w środku ale nie chce żeby to od odległości zależało w sumie tylko losowania. Chyba mam dobre rozwiązanie: stowrzyć licznik każdego rodzaju enemy (inkrementacja w konstruktorze i dekrementacja w destruktorze) jak loopojemy po wszystkich enemy w liście i wylowowałem np na 3 pozycji a mam tak ułożone enemy w lisćie :[1][1][2][2][1*][1][2][1][2] to wylosuje mi się ten zaznaczony *. To chyba nie głupi pomysł ? |
|
pekfos |
» 2025-12-02 16:50:49 Tylko to ma być licznik faktycznych obiektów w liście. To nie jest dobra praktyka by mieć jakiś globalny licznik obiektów danego typu i od tego uzależniać logikę na konkretnym kontenerze obiektów, nawet jeżeli w założeniu jest to jedyne miejsce gdzie te obiekty powinny sobie istnieć. Skoro masz sposób by wiedzieć które obiekty pominąć szukając N-tego obiektu danego typu, zlicz ile masz obiektów danego typu w ten sam sposób. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2025-12-03 12:09:10 ok dzięki, ale raczej zrobię to tak, że każdy enemy z danego rodzaju będzie wykonywał akcje ale w randomowym czasie np od 3 do 10 + X Sekund, oraz jakiś mały procent nie będzie. |
|
pekfos |
» 2025-12-03 22:36:19 Myślałem że zmierzasz tu do jakiejś koordynacji między jednostkami. |
|
| « 1 » |