Állami gép

Bemutatom a nyilvánosságnak az állami gép megvalósítását, más néven az állami gépet. Az állami gép vonzó, mivel az objektum viselkedésének logikáját előre konfigurált algoritmusban dolgozza fel, ami rendkívül szükséges összetett objektumokhoz. A cikkben meg fogom adni a Tropic Defense játékomban használt tárgy logikáját.

Állami gép

Az állami gép olyan egység, amely egy objektum véges állománnyal rendelkezik, amely szabályokat tartalmaz ezeknek az állapotoknak az átmenetére. A véges automatának három része van:
  • Az objektum állapota
  • esemény
  • Államigazgató.

    Állami: Ha egyszerű, akkor ez az, ami most történik az objektummal. A doboz hazudhat, tekerhet, eshet. Ezek mind államok. Új kifejezést adok hozzá - Állam. hogy leírja az állam szoftver-végrehajtását. Az államnak tudnia kell, hogyan reagáljon a különböző eseményekre, ez az elsődleges prioritás.

    Esemény: Ugyanaz a fiók, az események lehetnek: nyomja, ütközik a talajjal, dobja le a támaszt. Események szükségesek az állami gép bejelentéséhez, hogy valami történt az objektummal. Ha a doboz hazudik, és lenyomják, akkor meg fog gördülni. Ez az átmenet a "hazugság" állapotáról "roll" az esemény "push".

    Állami menedzser (gép): Ez tartalmazza az eseményfeldolgozás, az állapotátalakítás logikáját, az objektum állapotváltozásáról szóló értesítést.

    Egy egyszerű végrehajtás így néz ki:

    Az első esemény feldolgozásra kerül, de erre nem lesz reakció. A következő két esemény sikeresen kidolgozható, megváltoztatva az objektum állapotát. A kód egyszerű, minimális számú ellenőrzés, pusztán bemutató célokra. Ez egy nagyon egyszerű példa, két állam és két átmenet van köztük.

    A következő példa sokkal nehezebb lesz, de ugyanilyen könnyen kezelhető. Íme egy diagram a pisztoly logikájáról a Tower Defense műfajának játékában:

    Állami gép

    Összesen 6 állam van:
    1. Alvás. A pisztoly az ellenséget várja, ebben a pillanatban semmi sem történik.
    2. Felkészülés a csatára. Például a fegyverek felemelése.
    3. Felkészülés az ágyra. A fordított állapot a "harcra való felkészüléshez", a fegyverek esnek.
    4. Tűz üzemmód. Kihúzza a patronokat az ellenség számára.
    5. Töltse fel, a fegyverek töltődnek.
    6. Várakozás a következő célra, bekapcsol, amikor az ellenséget megölik.

    6 esemény:
    1. Egy cél észlelhető.
    2. A fegyver készen áll.
    3. Töltsön be fegyvereket.
    4. Nincs cél.
    5. Pihenni.
    6. Alvás.

    8 átmenet:
    1. Alvó-edzés.
    2. Előkészítés.
    3. Újratöltés.
    4. Újratöltés.
    5. A lövés a cél elvárása.
    6. Várakozás a célfelvételre.
    7. Várakozás, felkészülés a pihenésre.
    8. Pihenés.

    Miután beállította a pisztoly logikáját a séma szerint, a vezérlés két parancsra korlátozódik: "capture target" és "release target". A többit a pisztoly fogja megtenni.

    Forráskód: Állami Mashine példa
    Álló gépek: FiniteStateMachine.h, FiniteStateMachine.cpp
    Példa a fent leírt pisztolyra: MachineShoot.h, MachineShoot.cpp
    A kód megtekinthető, letölthető, önállóan használható.

    Kapcsolódó cikkek