Quindi sto lavorando a un roguelike e sto progettando di rappresentare i mostri usando una macchina a stati finiti
spot PC
wander------------------->move
^ ^ |
| \ |
| \ killed PC |
|evaded \ | close
| \ |
| hurt \ V
flee<-------------------attack
Tuttavia, volevo essere in grado di cambiare i mostri FSM, dato che il mostro è stato modificato. Ad esempio, nel gioco, è possibile che il mostro abbia una pozione salutare. In tal caso, l'FSM dovrebbe apparire come segue:
wander------------------->move
|
|
|
| close
used potion |
,-----------------V V
use potion attack
^-------------------'
hurt
E poi, una volta esaurita la pozione, torna al FSM precedente. Il mio pensiero è che dovrei cambiare l'FSM nel momento in cui la pozione viene assegnata al mostro, quindi potion.give(monster)
modifica l'FSM in quel momento e potion.use()
non lo modifica. Ma non sono sicuro di come implementarlo? In che modo l'oggetto pozione può sapere a quali stati dovrebbe legarsi o ritornare?
Un possibile pensiero era che il binding della transizione di stato FSM fosse uno stack. Quindi, raccogliendo una pozione, aggiungi use potion
allo stack di transizione attack['hurt']
.
Esiste una best practice o qualcuno può collegarsi a un esempio di come modificare un FSM in fase di runtime?