Documentation ¶
Overview ¶
Package logica_juego define estructuras y constantes para los diferentes elementos del juego, así como la lista de acciones y regiones a ser interpretada por los clientes.
Index ¶
- Constants
- Variables
- func AñadirASubGrafo(region NumRegion, subgrafo *simple.UndirectedGraph)
- func Conectadas(region1 NumRegion, region2 NumRegion) bool
- func InicializarContinentes()
- func InicializarGrafoMapa()
- func LanzarDados() int
- func RegistrarAcciones()
- func RegistrarNotificaciones()
- func RetirarCartaPorID(id int, cartas []Carta) (carta Carta, cartasRes []Carta, err error)
- type AccionAtaque
- type AccionCambioCartas
- type AccionCambioFase
- type AccionFortificar
- type AccionInicioTurno
- type AccionJugadorEliminado
- type AccionJugadorExpulsado
- type AccionMensaje
- type AccionObtenerCarta
- type AccionOcupar
- type AccionPartidaFinalizada
- type AccionRecibirRegion
- type AccionReforzar
- type Carta
- type Continente
- type EstadoJugador
- type EstadoPartida
- func (e *EstadoPartida) AsignarTropasRefuerzo(jugador string)
- func (e *EstadoPartida) Ataque(origen, destino NumRegion, numDados int, jugador string) error
- func (e *EstadoPartida) CambiarCartas(jugador string, ID_carta1, ID_carta2, ID_carta3 int) error
- func (e *EstadoPartida) ConsultarCartas(jugador string) []Carta
- func (e *EstadoPartida) ContarTerritoriosOcupados(jugador string) int
- func (e *EstadoPartida) EnviarMensaje(jugador, mensaje string)
- func (e *EstadoPartida) ExpulsarJugador(expulsado string)
- func (e *EstadoPartida) ExpulsarJugadorActual()
- func (e *EstadoPartida) FinDeFase(jugador string) error
- func (e *EstadoPartida) FortificarTerritorio(origen int, destino int, tropas int, jugador string) error
- func (e *EstadoPartida) HaSidoEliminado(jugador string) bool
- func (e *EstadoPartida) HaSidoExpulsado(jugador string) bool
- func (e *EstadoPartida) ObtenerJugadorTurno() string
- func (e *EstadoPartida) ObtenerSubgrafoRegiones(jugador string) *simple.UndirectedGraph
- func (e *EstadoPartida) Ocupar(territorio NumRegion, numEjercitos int, jugador string) error
- func (e *EstadoPartida) RecibirCarta(jugador string) error
- func (e *EstadoPartida) ReforzarTerritorio(idTerritorio int, numTropas int, jugador string) error
- func (e *EstadoPartida) RellenarRegiones()
- func (e *EstadoPartida) SiguienteJugador()
- func (e *EstadoPartida) SiguienteJugadorSinAccion()
- func (e *EstadoPartida) TerminadaPorExpulsiones() bool
- type EstadoRegion
- type Fase
- type NotificacionAmistad
- type NotificacionExpulsion
- type NotificacionPuntosObtenidos
- type NotificacionTurno
- type NumRegion
- type TipoTropa
Constants ¶
const ( PUNTOS_PERDER = 10 PUNTOS_GANAR = 25 HORAS_EXPULSION_INACTIVIDAD = 24 )
const ( NOTIFICACION_AMISTAD = iota NOTIFICACION_TURNO NOTIFICACION_PUNTOS NOTIFICACION_EXPULSION )
const (
NUM_REGIONES = 42
)
Variables ¶
var Continentes map[string]Continente
Continentes que componen el mapa del juego
var GrafoMapa *simple.UndirectedGraph
Functions ¶
func AñadirASubGrafo ¶ added in v0.3.0
func AñadirASubGrafo(region NumRegion, subgrafo *simple.UndirectedGraph)
AñadirASubGrafo añade una región dada al subgrafo del jugador, conectándola con el resto de regiones del subgrafo que se encontraran conectadas con ella en el grafo del mapa completo
func Conectadas ¶
func InicializarContinentes ¶ added in v0.2.0
func InicializarContinentes()
InicializarContinentes inicializa el mapa Continentes con cada uno de los continentes del mapa de juego
func InicializarGrafoMapa ¶
func InicializarGrafoMapa()
func LanzarDados ¶
func LanzarDados() int
LanzarDados devuelve un número entre [0-5] (utilizado para indexar, que se debe aumentar en una unidad a la hora de mostrarse al usuario)
func RegistrarAcciones ¶ added in v0.1.1
func RegistrarAcciones()
RegistrarAcciones registra las acciones en gob, para poder serializarlas y deserializarlas desde un array polimórfico (interface{})
func RegistrarNotificaciones ¶ added in v0.1.6
func RegistrarNotificaciones()
Types ¶
type AccionAtaque ¶
type AccionAtaque struct { IDAccion int // 5 Origen NumRegion // ID de región de la cual se origina el ataque (y usan sus tropas) Destino NumRegion // ID de región atacada TropasPerdidasAtacante int // Tropas perdidas por el atacante TropasPerdidasDefensor int // Tropas perdidas por el defensor DadosAtacante []int // Resultados de los dados lanzados por el atacante, ordenados de menor a mayor valor DadosDefensor []int // Resultados de los dados lanzados por el defensor, ordenados de menor a mayor valor JugadorAtacante string // Nombre del atacante JugadorDefensor string // Nombre del defensor }
AccionAtaque corresponde al ataque de una región por parte de un usuario dado
Ejemplo en JSON:
{ "IDAccion": 5, "Origen": 2, "Destino": 3, "TropasPerdidasAtacante": 15, "TropasPerdidasDefensor": 5, "DadosAtacante": {3, 4, 6}, "DadosDefensor": {2, 2, 5}, "JugadorAtacante": "usuario1", "JugadorDefensor": "usuario2" }
type AccionCambioCartas ¶
type AccionCambioCartas struct { IDAccion int // 3 Jugador string // Jugador que realizó el cambio de cartas NumTropasObtenidas int // Tropas obtenidas por el cambio BonificacionObtenida bool // Flag de si se ha recibido una bonificación de territorio de una de las cartas usadas RegionesQueOtorganBonificacion []NumRegion // ID de región que ha otorgado la bonificación, si se ha obtenido ObligadoAHacerCambios bool // Flag de si el usuario ha sido obligado a hacer el cambio, por tener más de 5 cartas }
AccionCambioCartas corresponde a un cambio de turno al usuario dado. El resto de usuarios no tendrán éxito en peticiones que no sean de solicitud de estado durante su turno.
Ejemplo en JSON:
{ "IDAccion": 3, "NumConjuntosCambiados": 1, "NumTropasObtenidas": 2, "BonificacionObtenida": true, "RegionQueOtorgaBonificacion": 2, "ObligadoAHacerCambios": false }
func NewAccionCambioCartas ¶
type AccionCambioFase ¶
type AccionCambioFase struct { IDAccion int // 1 Fase Fase // {0: Inicio (no usada), 1: Refuerzo , 2: Ataque , 3: Fortificar} Jugador string // Jugador del turno }
AccionCambioFase corresponde a un cambio de fase dentro del turno del jugador dado.
Ejemplo en JSON:
{ "IDAccion": 1, "Fase": 2, "Jugador": "usuario1" }
func NewAccionCambioFase ¶
func NewAccionCambioFase(fase Fase, jugador string) AccionCambioFase
type AccionFortificar ¶
type AccionFortificar struct { IDAccion int // 7 Origen NumRegion // ID de región desde la cual se han movido tropas Destino NumRegion // ID de región que ha recibido las tropas TropasOrigen int // Número de tropas que han quedado en la región desde la cual se originó el movimiento TropasDestino int // Número de tropas que hay en la región fortificada tras la acción Jugador string // Jugador que ha fortificado }
AccionFortificar corresponde a la fortificación de un territorio de un jugador
Ejemplo en JSON:
{ "IDAccion": 7, "Origen": 7, "Destino": 9, "TropasOrigen": 10, "TropasDestino": 8, "Jugador": "usuario1" }
func NewAccionFortificar ¶
func NewAccionFortificar(origen, destino NumRegion, tropasOrigen, tropasDestino int, jugador string) AccionFortificar
type AccionInicioTurno ¶
type AccionInicioTurno struct { IDAccion int // 2 Jugador string // Jugador del nuevo turno TropasObtenidas int // Tropas obtenidas durante el nuevo turno RazonNumeroTerritorios int // Número de territorios debido a los cuales ha recibido dicho número de tropas RazonContinentesOcupados int // Número de continentes debido a los cuales ha recibido dicho número de tropas }
AccionInicioTurno corresponde a un cambio de turno al usuario dado. El resto de usuarios no tendrán éxito en peticiones que no sean de solicitud de estado durante su turno.
Ejemplo en JSON:
{ "IDAccion": 2, "Jugador": "usuario1", "TropasObtenidas": 2, "RazonNumeroTerritorios": 12, "RazonContinentesOcupados": 1 }
func NewAccionInicioTurno ¶
func NewAccionInicioTurno(jugador string, tropasObtenidas int, razonNumeroTerritorios int, razonContinentesOcupados int) AccionInicioTurno
type AccionJugadorEliminado ¶ added in v0.4.1
type AccionJugadorEliminado struct { IDAccion int JugadorEliminado string JugadorEliminador string CartasRecibidas int }
AccionJugadorEliminado corresponde a la eliminación de un jugador del juego, por haber perdido todos los territorios
Ejemplo en JSON:
{ "IDAccion": 9, "JugadorEliminado": "usuarioEliminado", // Jugador que ha sido eliminado "JugadorEliminador": "usuario1", // Jugador que ha conquistado el último territorio del eliminado "CartasRecibidas": 3 // Número de cartas que ha recibido el jugador eliminador }
func NewAccionJugadorEliminado ¶ added in v0.4.1
func NewAccionJugadorEliminado(jugadorEliminado string, jugadorEliminador string, cartasRecibidas int) AccionJugadorEliminado
type AccionJugadorExpulsado ¶ added in v0.6.0
AccionJugadorExpulsado corresponde a la eliminación de un jugador del juego, por haber estado ausente demasiado tiempo
Ejemplo en JSON:
{ "IDAccion": 10, "JugadorEliminado": "usuarioEliminado", // Jugador que ha sido expulsado }
func NewAccionJugadorExpulsado ¶ added in v0.6.0
func NewAccionJugadorExpulsado(jugadorEliminado string) AccionJugadorExpulsado
type AccionMensaje ¶ added in v0.6.4
AccionMensaje representa un mensaje enviado por un jugador a través del chat de la partida.
Ejemplo en JSON:
{ "IDAccion": 12, "JugadorGanador": "mapachin" // Jugador que envía el mensaje "Mensaje": "Bien jugado // Contenido del mensaje }
func NewAccionMensaje ¶ added in v0.6.4
func NewAccionMensaje(jugadorEmisor string, mensaje string) AccionMensaje
type AccionObtenerCarta ¶
type AccionObtenerCarta struct { IDAccion int // 8 Carta Carta // Carta recibida Jugador string // Jugador receptor }
AccionObtenerCarta corresponde a la recepción de una carta por parte de un jugador
Ejemplo en JSON:
{ "IDAccion": 8, "Carta": { "Tipo": 0, // {0: Infanteria, 1: Caballeria, 2: Artilleria} "Region": 29, // ID de región de la carta "EsComodin": false // Flag de si la carta es un comodín (tiene cualquier tipo de tropa y no tiene región) }, "Jugador": "usuario1" }
func NewAccionObtenerCarta ¶
func NewAccionObtenerCarta(carta Carta, jugador string) AccionObtenerCarta
type AccionOcupar ¶
type AccionOcupar struct { IDAccion int // 6 Origen NumRegion // ID de región desde la cual se originó el ataque (y usaron sus tropas) Destino NumRegion // ID de región ocupada TropasOrigen int // Número de tropas que han quedado en la región desde la cual se originó el ataque TropasDestino int // Número de tropas asignadas a la región ocupada JugadorOcupante string // Nombre del atacante JugadorOcupado string // Nombre del defensor que ha perdido el territorio }
AccionOcupar corresponde a la ocupación de una región por un jugador tras un ataque con éxito.
Ejemplo en JSON:
{ "IDAccion": 6, "Origen": 2, "Destino": 3, "TropasOrigen": 10, "TropasDestino": 5, "JugadorOcupante": "usuario1", "JugadorOcupado": "usuario2" }
func NewAccionOcupar ¶
type AccionPartidaFinalizada ¶ added in v0.4.1
AccionPartidaFinalizada corresponde a la finalización de una partida, con el jugador que la ha ganado. No habrá más acciones tras recibir esta.
Ejemplo en JSON:
{ "IDAccion": 10, "JugadorGanador": "usuarioEliminado" // Jugador que ha ganado la partida }
func NewAccionPartidaFinalizada ¶ added in v0.4.1
func NewAccionPartidaFinalizada(jugadorGanador string) AccionPartidaFinalizada
type AccionRecibirRegion ¶
type AccionRecibirRegion struct { IDAccion int // 0 Region NumRegion // Región asignada TropasRestantes int // Tropas que tiene el jugador una vez asignado el territorio TerritoriosRestantes int // Territorios restantes en el mapa sin asignar Jugador string // Nombre de jugador receptor del territorio }
AccionRecibirRegion corresponde a la asignación automática de un territorio a un jugador dado durante el inicio de la partida.
Ejemplo en JSON:
{ "IDAccion": 0, "Region": 1, "TropasRestantes": 4, "TerritoriosRestantes": 8, "Jugador": "usuario1" }
func NewAccionRecibirRegion ¶
func NewAccionRecibirRegion(region NumRegion, tropasRestantes int, territoriosRestantes int, jugador string) AccionRecibirRegion
type AccionReforzar ¶
type AccionReforzar struct { IDAccion int // 4 Jugador string // Jugador que ha reforzado el territorio TerritorioReforzado NumRegion // ID de región que ha sido reforzada TropasRefuerzo int // Número de tropas de refuerzo asignadas a la región }
AccionReforzar corresponde a un refuerzo de una región por un jugador
Ejemplo en JSON:
{ "IDAccion": 4, "Jugador": "usuario1", "TerritorioReforzado": 1, "TropasRefuerzo": 20 }
func NewAccionReforzar ¶
func NewAccionReforzar(jugador string, territorioReforzado NumRegion, tropasRefuerzo int) AccionReforzar
type Continente ¶ added in v0.2.0
Continente define el tipo utilizado para representar cada continente. Se almacenará el valor de dicho continente, que corresponde con el número de tropas de bonificación recibidas al ocuparlo, además de la lista de regiones que lo compone
type EstadoJugador ¶
type EstadoPartida ¶
type EstadoPartida struct { Acciones []interface{} // Acciones realizadas durante la partida Jugadores []string EstadosJugadores map[string]*EstadoJugador // Mapa de nombres de los jugadores en la partida y sus estados TurnoJugador int // Índice de la lista que corresponde a qué jugador le toca // Vector de booleanos con una entrada por cada jugador // Si el jugador sigue en la partida, su entrada valdrá true // Si ha sido derrotado, será false JugadoresActivos []bool Fase Fase EstadoMapa map[NumRegion]*EstadoRegion // Baraja Cartas []Carta Descartes []Carta NumCambios int // Recibir carta HaConquistado bool // True si ha conquistado algún territorio en el turno HaRecibidoCarta bool // True si ya ha robado carta, para evitar más de un robo HaFortificado bool // True si ya ha fortificado en el turno // Información sobre el último ataque RegionUltimoAtaque NumRegion // Región desde la que se inició el último ataque DadosUltimoAtaque int // Número de dados que lanzo el atacante en el último ataque TropasPerdidasUltimoAtaque int // Número de tropas que perdió el atacante en el último ataque HayTerritorioDesocupado bool // True si hay algún territorio sin ocupar UltimoDefensor string // Nombre del jugador defensor en el último ataque // Flag de partida terminada, pendiente por ser tener su estado consultado por todos los jugadores // previo a su eliminación Terminada bool JugadoresRestantesPorConsultar []string // Timestamp de la última acción realizada en el juego por el usuario del turno actual, para // tratar la eliminación de usuarios inactivos UltimaAccion time.Time // Flag de si se ha enviado una alerta por inactividad al jugador actual AlertaEnviada bool }
func CrearEstadoPartida ¶
func CrearEstadoPartida(jugadores []string) (e EstadoPartida)
func (*EstadoPartida) AsignarTropasRefuerzo ¶ added in v0.2.0
func (e *EstadoPartida) AsignarTropasRefuerzo(jugador string)
AsignarTropasRefuerzo otorga un número de ejércitos al jugador que comienza un turno, dependiendo del número de territorios que ocupa. El número de ejércitos será la división entera del número de territorios ocupados entre 3. Cabe destacar que como mínimo, se otorgarán 3 ejércitos al principio de cada turno, independientemente de los territorios. Además, si el jugador controla por completo un continente, recibirá ejércitos extra. El número de ejercitos dependerá del continente:
- 2 ejércitos para Oceanía y América del Sur
- 3 ejércitos para África
- 5 ejércitos para América del Norte y Europa
- 7 ejércitos para Asia
func (*EstadoPartida) Ataque ¶ added in v0.4.0
func (e *EstadoPartida) Ataque(origen, destino NumRegion, numDados int, jugador string) error
Ataque permite a un usuario atacar a un territorio adyacente a alguna de sus regiones. Para ello, debe de tener por lo menos dos ejércitos en el territorio desde el que ataca. Al atacar deberá elegir el número de dados a lanzar, entre 1 y 3. Cabe destacar que será necesario tener al menos un ejército más que el número de dados a lanzar, por ejemplo, si quiero lanzar 3 dados, el territorio tendrá que tener 4 ejércitos por lo menos. Por otro lado el defensor tirará 2 dados si tiene 2 ejércitos o más, o 1 en el caso contrario.
Para calcular el resultado del ataque, se compararán los dados con mayor valor de ambos jugadores. Si el atacante consigue un resultado mayor, el territorio defensor perderá una tropa. Por otro lado, si empatan o gana el defensor el territorio atacante perderá un ejército. En caso de que ambos jugadores hayan lanzado más de un dado, se repetirá el mismo proceso comparando el valor del segundo dado más alto de cada uno
No se puede atacar en los siguientes casos: no es el turno del jugador, no es la fase de ataque, el jugador tiene más de 4 cartas, hay algún territorio sin ocupar, el territorio atacado no es adyacente, el territorio atacado no es de un rival, el número de dados no está entre 1 y 3 o el número de ejércitos no supera el número de dados.
func (*EstadoPartida) CambiarCartas ¶ added in v0.1.5
func (e *EstadoPartida) CambiarCartas(jugador string, ID_carta1, ID_carta2, ID_carta3 int) error
CambiarCartas permite al jugador cambiar un conjunto de 3 cartas por ejércitos. Los cambios válidos son los siguientes:
- 3 cartas del mismo tipo
- 2 cartas del mismo tipo más un comodín
- 3 cartas, una de cada tipo
Los cambios se realizarán durante la fase de refuerzo, o en fase de ataque, si el jugador tiene más de 4 cartas tras derrotar a un rival. Si alguno de los territorios de las cartas cambiadas están ocupados por el jugador, recibirá tropas extra. El número de tropas recibidas dependerá del número de cambios totales:
- En el primer cambio se recibirán 4 cartas
- Por cada cambio, se recibirán 2 cartas más que en el anterior
- En el sexto cambio se recibirán 15 cartas
- A partir del sexto cambio, se recibirán 5 cartas más que en el cambio anterior
func (*EstadoPartida) ConsultarCartas ¶ added in v0.2.0
func (e *EstadoPartida) ConsultarCartas(jugador string) []Carta
ConsultarCartas devuelve un slice que contiene las cartas que posee el usuario "jugador"
func (*EstadoPartida) ContarTerritoriosOcupados ¶ added in v0.4.1
func (e *EstadoPartida) ContarTerritoriosOcupados(jugador string) int
ContarTerritoriosOcupados cuenta el número de territorios que ocupa un jugador determinado
func (*EstadoPartida) EnviarMensaje ¶ added in v0.6.4
func (e *EstadoPartida) EnviarMensaje(jugador, mensaje string)
EnviarMensaje encola una acción en la lista de acciones de la partida, que representa el envío de un mensaje por parte de "jugador", con el contenido "mensaje"
func (*EstadoPartida) ExpulsarJugador ¶ added in v0.6.0
func (e *EstadoPartida) ExpulsarJugador(expulsado string)
ExpulsarJugador contabiliza un jugador dado como expulsado (derrotado), añade una acción de expulsión y pasa al siguiente jugador si era el actual y es posible
func (*EstadoPartida) ExpulsarJugadorActual ¶ added in v0.6.4
func (e *EstadoPartida) ExpulsarJugadorActual()
ExpulsarJugadorActual contabiliza el jugador del turno actual (derrotado), añade una acción de expulsión y pasa al siguiente jugador si es posible
func (*EstadoPartida) FinDeFase ¶ added in v0.2.0
func (e *EstadoPartida) FinDeFase(jugador string) error
FinDeFase permite al jugador terminar la fase actual de su turno y pasar a la siguiente. Para ello, el jugador que quiera cambiar de fase deberá ser aquel que tenga el turno actual. Cada fase tendrá unas condiciones especiales para el cambio de turno. En el refuerzo, no podrá cambiar de fase si tiene más de 4 cartas o si le quedan tropas por asignar En el ataque, no podrá cambiar de fase si tiene más de 4 cartas o si tiene que ocupar un territorio y aún no lo ha hecho. En la fortificación podrá cambiar de fase (dándole el turno a otro jugador) libremente
func (*EstadoPartida) FortificarTerritorio ¶ added in v0.3.0
func (*EstadoPartida) HaSidoEliminado ¶ added in v0.6.0
func (e *EstadoPartida) HaSidoEliminado(jugador string) bool
HaSidoEliminado devuelve true si el usuario ha sido eliminado por otro jugador, false en otro caso El nombre de jugador indicado debe existir en la partida
func (*EstadoPartida) HaSidoExpulsado ¶ added in v0.6.0
func (e *EstadoPartida) HaSidoExpulsado(jugador string) bool
HaSidoExpulsado devuelve true si el usuario ha sido eliminado por inactividad, false en otro caso El nombre de jugador indicado debe existir en la partida
func (*EstadoPartida) ObtenerJugadorTurno ¶
func (e *EstadoPartida) ObtenerJugadorTurno() string
func (*EstadoPartida) ObtenerSubgrafoRegiones ¶ added in v0.3.0
func (e *EstadoPartida) ObtenerSubgrafoRegiones(jugador string) *simple.UndirectedGraph
ObtenerSubgrafoRegiones devuelve un subgrafo de GrafoMapa con únicamente las regiones/nodos controladas por el jugador TODO: La librería de grafos no exporta sus campos y no se puede serializar junto al resto del estado, TODO: por lo que se tienen que recrear o almacenar cacheados en otra estructura que no se serialice TODO: Valorar el coste de almacenamiento vs. recreación en cada llamada a fortificar (el coste es de TODO: NumRegiones*factor_ramificacion_maximo (máximo número de aristas en un nodo) iteraciones, exactamente)
func (*EstadoPartida) Ocupar ¶ added in v0.4.0
func (e *EstadoPartida) Ocupar(territorio NumRegion, numEjercitos int, jugador string) error
Ocupar permite a un usuario ocupar un territorio sin tropas, especificando el territorio a ocupar y el número de tropas que quiere mover a él. Dichas tropas se moverán desde el territorio con el que conquistó la región a ser ocupada.
Para ocupar se deben cumplir las siguientes condiciones: hay alguna región sin tropas, dicha región es adyacente a la región desde la que se inició el último ataque, la ocupación se realiza durante el turno del jugador y en la fase de ataque, el número de tropas asignadas por la ocupación no deja al territorio origen sin tropas, el número de tropas asignadas es mayor al número de dados usados en el último ataque menos el número de ejércitos que perdió el atacante en dicho ataque.
Cabe destacar que siempre que un territorio quede sin tropas tras un ataque, el juego no permitirá continuar atacando ni cambiar de fase o turno hasta que dicho territorio sea ocupado, de manera que solo podrá haber un territorio sin ocupar a la vez.
func (*EstadoPartida) RecibirCarta ¶ added in v0.1.5
func (e *EstadoPartida) RecibirCarta(jugador string) error
RecibirCarta da una carta a un jugador en caso de que haya conquistado un territorio durante su turno
func (*EstadoPartida) ReforzarTerritorio ¶
func (e *EstadoPartida) ReforzarTerritorio(idTerritorio int, numTropas int, jugador string) error
ReforzarTerritorio refuerza un territorio dado su id con numTropas para un jugador dado. Si la acción tiene éxito, se emite una acción de refuerzo, o nada y se devuelve un error ya formateado en caso contrario.
Se hacen checks de:
Región incorrecta Región ocupada por otro jugador Jugador fuera de turno Jugador con tropas insuficientes
func (*EstadoPartida) RellenarRegiones ¶
func (e *EstadoPartida) RellenarRegiones()
RellenarRegiones rellena las regiones del estado de la partida equitativa y aleatoriamente entre los usuarios, consumiendo una tropa por cada región para controlarla. Aunque se emite una acción de asignación de territorio por cada uno de ellos asignado, no se emiten acciones de cambio de turno durante el proceso.
Una vez terminado el proceso, se emite una acción de cambio de turno a un nuevo jugador. TODO: RellenarRegiones más elaborado (pseudo-random teniendo en cuenta adyacencias, recorridos por el grafo, etc.)
func (*EstadoPartida) SiguienteJugador ¶
func (e *EstadoPartida) SiguienteJugador()
SiguienteJugador cambia el turno a otro jugador, emitiendo la acción correspondiente. TODO SiguienteJugador no debería ser pública, lo es por necesidad dentro del test
func (*EstadoPartida) SiguienteJugadorSinAccion ¶
func (e *EstadoPartida) SiguienteJugadorSinAccion()
SiguienteJugadorSinAccion cambia el turno a otro jugador sin emitir ninguna acción. Usar únicamente al rellenar regiones.
func (*EstadoPartida) TerminadaPorExpulsiones ¶ added in v0.6.0
func (e *EstadoPartida) TerminadaPorExpulsiones() bool
TerminadaPorExpulsiones devuelve true si la partida ha terminado por tener todos sus jugadores expulsados, false en otro caso
type EstadoRegion ¶
type NotificacionAmistad ¶ added in v0.1.6
type NotificacionAmistad struct { IDNotificacion int // 0 Jugador string // Jugador que ha enviado la solicitud de amistad }
NotificacionAmistad representa una notificación de solicitud de amistad pendiente
Ejemplo en JSON:
{ "IDNotificacion": 1, "Jugador": "usuario6" }
func NewNotificacionAmistad ¶ added in v0.1.6
func NewNotificacionAmistad(jugador string) NotificacionAmistad
type NotificacionExpulsion ¶ added in v0.6.0
type NotificacionExpulsion struct {
IDNotificacion int // 3
}
NotificacionExpulsion representa una notificación de que se ha sido expulsado de una partida por inactividad
Ejemplo en JSON:
{ "IDNotificacion": 3, }
func NewNotificacionExpulsion ¶ added in v0.6.0
func NewNotificacionExpulsion() NotificacionExpulsion
type NotificacionPuntosObtenidos ¶ added in v0.5.0
type NotificacionPuntosObtenidos struct { IDNotificacion int // 2 Puntos int // Puntos obtenidos PartidaGanada bool // Razón para la obtención de los puntos (false: por perder una partida, true: por ganar una partida) }
NotificacionPuntosObtenidos representa una notificación de obtención de nuevos puntos, por ganar o perder una partida
Ejemplo en JSON:
{ "IDNotificacion": 2, "Puntos": "usuario6", "PartidaGanada": false }
func NewNotificacionPuntosObtenidos ¶ added in v0.5.0
func NewNotificacionPuntosObtenidos(puntos int, partidaGanada bool) NotificacionPuntosObtenidos
type NotificacionTurno ¶ added in v0.1.6
type NotificacionTurno struct { IDNotificacion int // 1 JugadorPrevio string // Jugador del turno anterior }
NotificacionTurno representa una notificación de que es el turno del jugador en la partida en la que está jugando
Ejemplo en JSON:
{ "IDNotificacion": 1, "JugadorPrevio": "usuario6" }
func NewNotificacionTurno ¶ added in v0.1.6
func NewNotificacionTurno(jugadorPrevio string) NotificacionTurno
type NumRegion ¶
type NumRegion int
const ( Eastern_australia NumRegion = iota Indonesia New_guinea Alaska Ontario Northwest_territory Venezuela Madagascar North_africa Greenland Iceland Great_britain Japan Yakursk Kamchatka Siberia Ural Afghanistan Middle_east India Siam China Mongolia Irkutsk Ukraine Southern_europe Western_europe Northern_europe Egypt East_africa Congo South_africa Brazil Argentina Eastern_united_states Western_united_states Quebec Central_america Peru Western_australia Alberta )
func Adyacentes ¶ added in v0.6.0
Adyacentes devuelve una lista de regiones aydacentes a "region" en el grafo