packagemainimport"fmt"// código disponible para ejecutar desde el navegador en https://play.golang.org/p/YGem8KTfNr// Aplicación de prueba de concepto para la retención de estados. La idea es// poder servir a varios usuarios a la vez según el contexto de las acciones// que han realizado anteriormente sin complicadas selvas de sentencias `if`,// mi objetivo es simplificar la implementación de "bots" para Telegram// Messenger.// Este código toma inspiración en el concepto "actor model"// Mesa define un objeto que representa un juego de cartastypeMesastruct{Jugadores[]string// mantiene una lista de jugadores que podemos ciclarJugadorint// Indica qué jugador posee el turnoFasefunc(messagestring)}func(m*Mesa)a(messagestring){fmt.Printf("Fase a de %s\n",m.Jugadores[m.Jugador])// dentro de cada una de estas funciones alguna computación debería// llevarse a cabo, luego establecemos el comportamiento el cual deberá// procesar el siguiente mensajem.Fase=m.b}func(m*Mesa)b(messagestring){fmt.Printf("Fase b de %s\n",m.Jugadores[m.Jugador])m.Fase=m.c}func(m*Mesa)c(messagestring){fmt.Printf("Fase c de %s\n",m.Jugadores[m.Jugador])fmt.Printf("Mensaje: %s\n",message)m.Fase=m.d}func(m*Mesa)d(messagestring){fmt.Printf("Fase d de %s\n",m.Jugadores[m.Jugador])fmt.Printf("Fin del turno de %s\n\n",m.Jugadores[m.Jugador])// calculamos cual es el siguiente jugador con el derecho al siguiente// turnoifm.Jugador<len(m.Jugadores){m.Jugador++}else{m.Jugador=0}// establecemos la función a manejar el siguiente mensajem.Fase=m.a}funcmain(){mesa1:=Mesa{Jugadores:[]string{"Marcos","Mateo","Lucas","Juan"},Jugador:0,}// iniciamos el juegomesa1.a("Inicio del juego")// hacemos que los jugadores "jueguen", para que todos puedan jugar// debería haber 4 fases por jugador, el primer jugador ya ha jugado la// primer fase, lo cual quiere decir que hay (4 * 4) - 1 movimientos// por hacer.fori:=(4*4)-1;i>0;i--{mesa1.Fase("comando sin importancia")}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.