Реализация государственной машины - PullRequest
4 голосов
/ 29 декабря 2008

Я пытаюсь создать настольную игру ... И похоже, что она должна быть реализована с использованием конечного автомата ..

Я знаю о шаблоне состояния от GoF, но я уверен, что должны быть другие способы реализации конечного автомата. Пожалуйста, дайте мне знать ... если вам известны какие-либо статьи или книги, которые содержат подробную информацию о различных реализациях (компромисс каждой из них), пожалуйста, направьте меня ... спасибо

Ответы [ 4 ]

3 голосов
/ 29 декабря 2008

Выезд Рагель .

2 голосов
/ 30 декабря 2008

Мы использовали диаграммы состояний Харела (похожие / эквивалентные конечным автоматам, но несколько проще для понимания), есть хорошая книга под названием Практические диаграммы состояний на C / C ++ .

1 голос
/ 29 декабря 2008

Вот очень простая реализация FSM:

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);
    }
}

Вы бы использовали его следующим образом:

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);
    }
}
0 голосов
/ 17 января 2012

Finite State Machines предоставляют лучшую платформу для реализации игр, в основе которых лежат события.

Поскольку ваша цель состоит в том, чтобы создать конечный автомат, вы можете использовать существующую инфраструктуру, и все, что вам нужно, - это добавить свои экстракторы событий и действия.

Один пример структуры можно увидеть по адресу:

http://www.StateSoft.org

...