Come diagrammi lo stato globale o condiviso?

2

Dì che stai costruendo un FSM per qualcosa come un gioco e hai stati come:

  • MainMenu
  • Opzioni
  • SinglePlayer
  • MultiPlayer

Il tuo diagramma di stato potrebbe essere simile a questo:

Ora dì che hai uno stato condiviso, DevConsole , (mostra la console quando viene premuto tilde e riceve l'input KB ecc. Sono sicuro che l'hai visto prima) in modo tale che non importa in che stato ti trovi , questo stato si applica.

Come lo descrivi?

* Modifica **

Un esempio di come funzionerebbe sarebbe come questo:

public class StateMachine
{
    protected State sharedState;
    protected State previousState;
    protected State currentState;

    public void Update()
    {
        if(this.hasSharedState)
            this.sharedState.Update();

        if (this.previousState != null && this.previousState.IsExiting)
            this.previousState.Update();
        else
            this.currentState.Update();
    }

    // called by individual states
    public void ChangeState<StateType>()
    {
        // creates a new state adn sets its state machine owner to this machine
        this.previousState = this.currentState;
        this.previousState.Exit();
        this.currentState = StateBuilder.Build<StateType>(this);
    }
}
    
posta Steven Evers 29.04.2011 - 05:20
fonte

1 risposta

1

Poiché il tuo FSM non ha memoria, per lo stato di CONSOLE avresti effettivamente bisogno di una "versione" diversa per ogni altro stato, altrimenti non ci sarebbe modo di determinare a quale stato tornare quando chiudi la console.

Sarai in grado di farlo con qualsiasi automa che abbia memoria, come un Pushdown Automata .

    
risposta data 29.04.2011 - 15:22
fonte

Leggi altre domande sui tag