Ugrás a fő tartalomra

Streameljük az állapotokat

Ezt a bejegyzést már jó ideje megakartam már írni,de valahogy sosem vett rá a lélek.
Ebben a bejegyzésben bemutatom az állapotgépemet, amit csináltam még anno a játék motoromhoz, mert elég érdekesen csináltam meg, mivel Stream-et használtam hozzá. Előbb viszont tisztázok néhány fogalmat.


Állapotgép
Az állapotgép, ahogy a nevéből is kiderül egy olyan gép, aminek állapotai vannak. Ezek az állapotok között klasszikus értelemben van kezdő, aktuális és végállapot. Az állapotgép feladata, hogy események hatására egyik állapotból átmenjen egy másikba. A gép célja, hogy a kezdőállapotból eljusson a végállapotba.

Ez egy egyszerű kapcsolónak a diagramja.

Jól látszik az ábrából, hogy 2 állapot van, amikbe lehetünk. Kezdő állapot és végállapot nincs, de egy igazi rendszernél biztos a kikapcsolt állapot lenne a kezdő állapot. Események itt a kapcsoló használata, ami előidézi, hogy állapot váltás menjen végbe.

Aha, de mi köze van a játékfejlesztéshez?
Játékokat általánosságban elég jól elkülöníthető állapotokra lehet bontani. Gondoljunk csak arra, ahogy egy egyszerű webes játék felépül. Először fogad minket a töltési képernyő aztán következik a menü, ahol eldönthetjük merre tovább. Nem is beszélve, hogy maga a játékmenet is több szintből épülhet fel.

Ezek mind állapotnak tekinthetőek, ahol a kezdő állapot a betöltési képernyő, ahonnan végül tovább lehet jutni többi állapotba.


Stream
Aki már csinált valaha aszinkron programozást annak ismerős lehet a Stream fogalma. Stream magyarul folyamot jelent, viszont a mi esetünkben adatfolyamnak fordítanám le, mivel gyakorlatilag az a lényege, hogy adatot továbbítson folyamatosan. Mi pedig tudjuk fogni ezt az adatfolyamatot és megkapjuk belőle azokat az adatokat, amiket éppen továbbit.
Stream-eknek még van egy nagyon jó tulajdonsága, hogy bármikor meg lehet állítani és folytatni őket.
Nem is beszélve arról, hogy nagyon könnyű velük kommunikálni.

Na ennek meg mi köze van az állapotgéphez?
Valóságban nincs túl sok közük egymáshoz, viszont mégis érdemes vegyíteni őket , mert meglepően sokat tudó rendszert lehet csinálni vele minimális kód megírásával.

Mi esetünkben egy Stream egyelő lesz egy állapottal. Tehát van máris egy állapotunk, amivel tudunk kommunikálni és akkor indítjuk el vagy állítjuk meg amikor csak akarjuk.
A valóságban csak annyi dolgunk volt, hogy az állapot(State) osztállyal örököltettük a Stream osztályt és innentől kezdve csak ki kellet egészíteni, hogy tényleg úgy viselkedjen, mint egy állapot.


Állapotok kezelése
Eddig vannak az állapotaink, de ki tárolja el ezeket az állapotokat és vajon ki indítja el a kezdő állapotot vagy egyáltalán melyik a kezdő állapot?Nem is beszélve, hogy hogyan fogunk állapotokat váltani?

Kérdések megválaszolására kell csinálnunk egy állapot menedzsert, aminek egyetlen dolga, hogy ezeket a problémákat megoldja.

Tárolás mondja egy szimpla asszociatív tömb, amiben a kulcs neve az állapot neve és a kulcshoz tartozó érték pedig egy állapot.

Kezdő állapot definiálás és indítás elég könnyű, mivel csak meg kell adni, hogy melyik állapotot kezdje el hallgatni.(Ugyebár az állapot egy Stream)

Az állapot váltásnál tudnunk kell, hogy melyik állapot következik. Én ezt úgy oldottam meg hogy éppen aktuális állapot tárolja a következő állapot nevét. Név tudatában pedig tudjuk, hogy melyik állapotot hallgassuk meg következőként, viszont előtte még az aktuális állapotot kell megállítanunk.


Állapotok megvalósítása
Az állapotgép csak akkor működik, ha vannak olyan egyéni állapotok, amik öröklik azt az absztrakt állapot osztályt, amit csináltunk és megvalósítják annak az összes absztrakt metódusát.
Az én esetemben csak a create metódus megvalósítását várom el a programozótól.

Magyarázat
Az absztrakt metódus azt jelenti, hogy nincsen megvalósítása. 
Az absztrakt osztály pedig azt jelenti, hogy tartalmaz legalább 1 absztrakt metódust és az osztály nem példányosítható.


Összegezve
Megéri az állapotokat streamelni, mivel valamennyire egyszerű a megvalósítás és nagyon sok lehetőség rejlik benne. Én személy szerint a kommunikációs készségében látom a legnagyobb lehetőséget, amit jó magam még alig használtam ki.

Ha kódot is szeretnétek látni ajánlhatom a játék motorom Állapot és Állapot menedzser osztályát. 

Megjegyzések

Népszerű bejegyzések ezen a blogon

Python kezdőknek

Itt a nyár és mivel lehetne ezt a legjobban megünnepelni, mint egy kígyóról elnevezett programozási nyelv bemutatásával. Következőkben tehát a Python programozási nyelvről lesz szó és annak lehetséges alkalmazásairól.

Miért tartsunk otthon Python-t? Python pályafutása 1991-ben kezdődött el egy Guido van Rossum nevű fejlesztőnek hála, aki egy olyan általános programozási nyelvet akart készíteni, amit nagyon könnyen el lehet sajátítani és használni. Az elmúlt év tizedek alatt a Python nyelv az egyik legjobb és legnépszerűbb általános programozási nyelvé nőtte ki magát, amit bizonyít, hogy számos operációs rendszeren(linux, mac os) alapból megtalálható a nyelv. De nézzük meg, hogy mitől ilyen népszerű: Egyszerűség: A nyelvnek az egyik legnagyobb előnye, hogy nagyon egyszerű és ezért például nagyon sok egyetemen a kezdő programozó legényeket Python segítségével vezetik be a programozás világába.Dinamikus: Mint minden dinamikus nyelvnek úgy Python-nak is van egy beépített REPL-je, ami nagyo…

HTML5 játék fejlesztés alapjai

Ahogy a cím is sugallja a HTML5 játék fejlesztés alapjairól lesz szó ,hogy mi is kell hozzá.
Az én tudásom ebben a témában még elég kicsi ,de egyre növekszik ,talán egyszer majd én is össze fogok szedni annyi tapasztalatot a témából ,hogy akár még könyvet is írhatnék róla. Na persze egy izgalmas könyvet. :D

Na akkor vágjunk is bele!
    Első kérdés ,hogy mi a legalapvetőbb dolog ,amit ehhez meg kell tanulni? Persze sokan mondhatják ,hogy html , javascript ,css ismerete ,ebben igazat is adnék ,de nekünk még van ennél sokkal alapibb tudás ,ami a magyar programozókra főként igaz ez pedig az angol tudás.
Ezt nagyon sokszor tapasztalja az ember ,hogyha nem elég jó az angolja ,akkor egyetlen mondat is megtudja akasztani ,ahol az író nagyon szakmai akart lenni.
Főleg emiatt szeretem azokat az írókat ,akik semmi köntörfalazás nélkül belevágnak a lecsóban és simán és egyszerűen elmagyarázzák a dolgokat.

   Ha az első szint megvan akkor jöhet a HTML tanulása ,ami elég gyorsan letudható ,hiszen c…

Javascript kezdő lépések

Ma kis bejegyzésem arról fog szólni ,hogy mit érdemes kezdő lépésenként megtanulni ,illetve ,hogyan érdemes haladni Javascripttel és néhány érdekesség is lesz node.js-sel kapcsolatban.

Tanulás
   Szerencsére olyan világba élünk már ,ahol a web és webes technológiák nagyon gyorsan fejlődnek és ezért ezeknek a tanulása is egy fajta fejlődésen ment keresztül. Már nem könyvből kell tanulni ,hanem vannak olyan oldalak ahol interaktív módon lehet egy nyelvet megtanulni ,ami tökéletes a tanulás szempontjából. Előző cikkemben raktam be anyagokat ahhoz ,hogy mit érdemes elolvasni ,ha a tanuló inkább olvasós fajta és volt bent 2 interaktív.  Én például codecademy segítségével tanultam meg Jquery-t használni. Javascripthez Eloquent és codeacademy-t használtam.

   Mivel a Javascript elég megengedő ezért nagyon sok fajta stílusban kódolnak hozzá és ezek a stílusok  néha teljesen eltérőék. Szóval aki tanult már Java ,c vagy c++-t annak is lehet újdonság ,mivel ezeknél a nyelveknél nagyon szépen megv…