Á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.
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:Á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:
Ö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ó.