Jatkoin peliohjelmointiharjoituksia ja olen tutustunut oppaissa ja videoissa usein mainittuun finite-state machine (FSM) ideaan. Useimmissa toteutuksissa ajatuksena on se, että jokainen tila kirjoitetaan erilliseen tiedostoon. Sen päälle on sitten jonkinlainen tilojen kantatoteutus sekä varsinainen state machine, joka hanskaa tilasta toiseen siirtymisen.
Kaunis ajatus on se, että kun koodin pilkkoo tällaisiin pieniin palasiin, se tekee tilojen hallinnasta helpompaa ja jokaisen tilan tarvitsema koodi on selkeästi kapseloituna.
Muutin edellisen harjoituksen koodin noudattamaan FSM:ää ja täytyy kyllä todeta, että minusta ei tullut fani. Ymmärrän hyvin, että tällainen toteutus on paikallaan kun puhutaan valtavista peleistä, jossa erilaisia tiloja on kymmeniä ja pelissä on hahmoja, joilla voi olla erilainen yhdistelmä tiloja. Tälle on epäilemättä paikkansa.
Ainakin tämän yhden kokemuksen perusteella asioiden pilkkominen näin pieniin palasiin toi vaan tarpeetonta kompleksisuutta ja abstrahointia. Koodirivien määrä räjähti käsiin enkä kyllä voi käsi sydämellä sanoa, että toteutus on jotenkin helpompi ymmärtää tai ylläpitää. Kun yhtälöön lisää sen, että nämä tilat ovat joka tapauksessa varsin tiukasti sidottuja hahmoon, joka niitä käyttää, niin saatu hyöty tuntui aika olemattomalta.
Voi toki olla, että toteutin FSM:n ihan päin persettä, mutta tykkäsin itse paljon enemmän toteutuksesta, jossa tilakone oli rakennettu ihan vaan enumeilla ja selkeästi jäsennellyllä koodilla.

