Stato globale dei giochi (o altro). Esempio: Attesa, Scommessa, Battaglia nel gioco d'azzardo

0

Quindi sto facendo un bot per le scommesse IRC. Fondamentalmente il gioco / bot ha tre stati di chat di assunzione.

Stato 1: scommesse Se qualcuno dice "! Scommetti i soldi del team", analizzalo e registralo.

Stato 2: Combattimento Non prendere niente, non più! Scommessa, ecc. Basta guardare.

Stato 3: Waiting / Bank Non prendere scommesse. Prendi "! Bank" e stampa il conteggio dei soldi degli utenti.

In questo momento per ciascuno dei miei parser di messaggi per i bot ho un grosso grasso IF.

if (global_state == BETTING): 
    blah blah bah

E sto iniziando a dover far fare il mio bot quando lo stato cambia . Così ora sto iniziando a fare questo (che mi fa soffrire un po 'l'anima ogni volta che lo leggo)

if (global_state == BETTING && past_state == WAITING):
    do blah stuff like reset the bet money

Come alcuni di voi avranno notato che sto usando Python, ma sicuramente questo problema non è solo per Python. Cosa dovrei fare invece?

    
posta Louis Hong 15.01.2015 - 02:21
fonte

1 risposta

3

Sembra una buona applicazione delle idee di "Finite State Machine" e "Polymorphism".

Hai già definito i tuoi stati, quindi il prossimo passo è definire le transizioni tra stati e il comportamento del sistema quando si trova in ogni stato.

Ci sono molti modi per implementare macchine a stati, ma in questo caso potresti trarre beneficio da tre classi, una per ogni stato. Ognuno dovrebbe avere funzioni "parse (...)" e "transition (...)". Il metodo parse legge semplicemente una riga di input e fa la cosa giusta. La funzione di transizione decide cosa fare in base al nuovo stato in cui si trova e restituisce il nuovo oggetto di stato.

(Questo è un taglio molto approssimativo per la funzione di transizione, ci sono probabilmente modi migliori per farlo.)

Quindi la variabile di stato, invece di fare riferimento a una stringa, si riferisce effettivamente all'oggetto stato corrente. Quindi puoi usare una bella sintassi come "global_state.parse (...)" e "global_state = global_state.transition (...)"

Questa è una vista di altissimo livello, e ci sono molti modi per farlo, ma anche se fai così tanto, ti libererai di quasi tutti i grassi grassi del tuo programma, e il tuo cuore sarà sentirsi più leggeri.

    
risposta data 15.01.2015 - 03:02
fonte

Leggi altre domande sui tag