Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

enemy_manager porada jak zaimplementowac akcje unikanlą w enemy różnego rodzaju które znajdują się w jednym kontenerze

Ostatnio zmodyfikowano 2025-12-03 22:36
Autor Wiadomość
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
P-183547
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ść
P-183548
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.
P-183549
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?
P-183567
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ł ?
P-183578
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.
P-183580
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.
P-183583
pekfos
» 2025-12-03 22:36:19
Myślałem że zmierzasz tu do jakiejś koordynacji między jednostkami.
P-183584
« 1 »
  Strona 1 z 1