Mașină de stat

Voi prezenta publicului implementarea masinii de stat, cunoscuta si sub denumirea de masina de stat. Masina de stat este atractivă prin faptul că procesează logica comportamentului unui obiect într-un algoritm preconfigurat, care este extrem de necesar pentru obiecte complexe. În articol voi da logica obiectului folosit în jocul Tropic Defense.

Mașină de stat

O mașină de stat este o entitate constând dintr-un set finit de stări ale unui obiect cu reguli de tranziție între aceste stări. Există trei părți ale automatului finit:
  • Starea obiectului
  • eveniment
  • Director de stat.

    Statul: Dacă este simplu, acesta este ceea ce se întâmplă în prezent cu obiectul. Cutia poate să se mute, să se rostogolească, să cadă. Toate acestea sunt state. Voi adăuga un nou termen - Statul. pentru a descrie implementarea software a statului. Statul trebuie să știe cum să răspundă unor evenimente diferite, aceasta este prima sa prioritate.

    Eveniment: Pentru același sertar, evenimentele pot fi: împingere, ciocnire cu solul, răsturnarea suportului. Sunt necesare evenimente pentru a anunța aparatul de stat că sa întâmplat ceva cu obiectul. Dacă cutia este mințită și este împins, atunci se va rostogoli. Această tranziție de la starea de "minciună" la "rotire" la evenimentul "împinge".

    Manager de stare (Machine): Conține toată logica procesării evenimentului, tranziția de stat, notificarea despre schimbarea de stat a obiectului.

    O implementare simplă ar putea arăta astfel:

    Primul eveniment va fi procesat, dar nu va fi nici o reacție la acesta. Următoarele două evenimente vor funcționa cu succes, schimbând starea obiectului. Codul este simplu, cu un număr minim de verificări, numai pentru demonstrații. Acesta este un exemplu foarte simplu, există două state și două tranziții între ele.

    Următorul exemplu va fi mult mai dificil, dar la fel de ușor de gestionat. Iată o diagramă a logicii pistolului pentru jocul genului Tower Defense:

    Mașină de stat

    Există 6 state în total:
    1. A dormi. Arma așteaptă inamicul, în acest moment nu se întâmplă nimic.
    2. Pregătirea pentru luptă. De exemplu, ridicarea de arme.
    3. Pregătirea pentru pat. Starea inversă la "pregătirea pentru luptă", armele cad.
    4. Mod foc. Trage cartușele pentru inamic.
    5. Reîncărcați, armele se încarcă.
    6. Așteptarea următorului țintă se activează când ucigașul este ucis.

    6 evenimente:
    1. Un scop este detectat.
    2. Armele sunt gata.
    3. Reîncărcați armele.
    4. Nu există nici un scop.
    5. Pentru a vă odihni.
    6. Să dormi.

    8 tranziții:
    1. Tren pentru somn.
    2. Pregătirea-fotografiere.
    3. Reîncărcați fotografia.
    4. Reîncărcarea-fotografiere.
    5. Fotografia este așteptarea scopului.
    6. Așteptarea fotografiei țintă.
    7. Așteptare, pregătire pentru odihnă.
    8. Restul.

    Prin configurarea arma logica conform schemei, managementul pentru aceasta se reduce la două echipe: «captare țintă» și «țintă eliberare». Restul se va face cu arma în sine.

    Cod sursă: Exemplu de stat de mashine
    Mașini de stat: FiniteStateMachine.h, FiniteStateMachine.cpp
    Un exemplu de utilizare pentru arma descrisă mai sus: MachineShoot.h, MachineShoot.cpp
    Codul poate fi vizualizat, descărcat, utilizat singur.

    Articole similare