Salve, lascio qui i miei commenti per la creazione di una (semplice) macchina a stati finiti universale
il mio target non è di realizzare l'irrealizzzabile o ottenere la luna, ma solo di indicare un modo, il mio (nostro, io e il fratello) modo
per prima cosa una FSM non può essere slegata dal "lavoro sporco" che deve fare, serve di avere un obiettivo
io ho preso come risultato da ottenere questo:
roba recente e quindi tutti la abbiamo in mente
e come lavoro teorico di partenza questo:
che non è mio, ma mi sembrava una buona base, anche se piuttosto datato
una FSM (o anche AFSD, automa a stati finiti deterministico) è composto da:
un insieme finito di stati
un insieme finito di condizioni che provocano la commutazione tra uno stato (definito) verso un'altro, definito anch'esso
un insieme finito di azioni che lo stato compie al suo ingresso
un insieme finito di azioni che lo stato compie alla sua uscita
un insieme finito di azioni che lo stato compie nel tempo intercorrente tra il suo inizio e la sua fine (mantenimento)
con tutte le "libertà" possibili in queste 5 righe
ad esempio ci possono essere più condizioni di uscita da uno stadio al successivo
ci possono essere più stati che evovlvono (per condizioni uguali o differenti) nello stesso stato
uno stato può evolvere (per condizioni necessariamente differenti, altrimenti saremmo in una AFSND) in stati differenti
uno stato potrebbe non evolvere, ovvero non avere una condizione di uscita (stato di stop finale)
uno stato potrebbe non avere una condizione di ingresso (stato di start iniziale, sarebbe inizializzato nel preambolo del programma)
uno stato potrebbe mancare di una o tutte le azioni da svolgere, che potrebbero anche esssere doppie rispetto ad altri stati
e via così...
mi toccherà quindi creare tre typedef per le tre categorie di oggetti che ho citato
1 -> stati
2 -> condizioni
3 -> azioni, che possono essere di ingresso, di uscita oppure di mantenimento
le più semplici sono le ultime
con una funzione di callback me la sono cavata, si scrive semplicemente la lista della azioni come se fossero funzioni void
e le facciamo eseguire in callback
invece le condizioni sono leggeremnte più complesse
perchè da una parte serve di definire la condizione vera e propria, squadra che vince non si cambia e uso ancora una callback, non void ma bool
di una funzione che esegua il test prescritto
ma serve anche definire da che stato a che stato provocano la commutazione
quindi sarà un dato strutturato
gli stati saranno anche loro un dato strutturato
perchè devono contenere il richiamo delle tre funzioni delle quali parlavamo prima
quindi una struttura a 4 membri, stato intero, e tre puntatori a funzione
mi sembra di aver ben inquadrato una (possibile) strada
cosa ne pensate, comincio a buttar giù codice e lo mostro qui?