Pergunta

Eu estou tentando construir um jogo de tabuleiro ... e parece que tem de ser implementada utilizando uma máquina de estado ..

Eu sei do Estado padrão de GoF, mas estou certo de que deve haver outra maneiras de implementar máquina de estado. Por favor, deixe-me saber .. se você souber de qualquer artigos ou livros que contém detalhes sobre implementação diferente (trade off de cada um deles), por favor me dirigir .. obrigado

Foi útil?

Solução

Confira Ragel .

Outras dicas

Nós usamos statecharts de Harel (semelhante / equivalente a máquinas de estado, mas um pouco mais fácil para pensar), há um bom livro chamado Statecharts práticas em C / C ++ .

Aqui está uma implementação FSM muito simples:

public delegate void ProcessEvent<TEvent>(TEvent ev);

public abstract class StateMachine<TEvent>
{
    private ProcessEvent<TEvent> state;

    protected ProcessEvent<TEvent> State
    {
        get { return this.state; }
        set { this.state = value; }
    }

    public void ProcessEvent(TEvent ev)
    {
        this.state(ev);
    }
}

Você iria utilizá-lo da seguinte forma:

public class MyFsm : StateMachine<byte>
{
    public MyFsm()
    {
        this.State = this.Started;
    }

    private void Started(byte ev)
    {
        Console.WriteLine(ev);

        if (ev == 255)
        {
            this.State = this.Stopped;
        }
    }

    private void Stopped(byte ev) { }
}

class Program
{
    static void Main(string[] args)
    {
        MyFsm fsm = new MyFsm();
        fsm.ProcessEvent((byte) 0);
        fsm.ProcessEvent((byte) 255);
        fsm.ProcessEvent((byte) 0);
    }
}

Máquinas de Estados Finitos fornecer a melhor plataforma para implementar jogos que são todos os eventos acionados.

Desde que seu objetivo é construir a máquina de estado pode utilizar uma estrutura existente e que tudo o que você precisa é adicionar seus eventos extratores e ações.

Um quadro exemplo pode ser visto em:

http://www.StateSoft.org

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top