logica_juego

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 23, 2022 License: MIT Imports: 8 Imported by: 0

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

View Source
const (
	PUNTOS_PERDER               = 10
	PUNTOS_GANAR                = 25
	HORAS_EXPULSION_INACTIVIDAD = 24
)
View Source
const (
	NOTIFICACION_AMISTAD = iota
	NOTIFICACION_TURNO
	NOTIFICACION_PUNTOS
	NOTIFICACION_EXPULSION
)
View Source
const (
	NUM_REGIONES = 42
)

Variables

View Source
var Continentes map[string]Continente

Continentes que componen el mapa del juego

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 Conectadas(region1 NumRegion, region2 NumRegion) bool

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()

func RetirarCartaPorID added in v0.1.5

func RetirarCartaPorID(id int, cartas []Carta) (carta Carta, cartasRes []Carta, err error)

RetirarCartaPorID retira la carta identificada por "id" del conjunto "cartas" en caso de que exista En cualquier otro caso devuelve un error. Usada para tests.

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"
  }

func NewAccionAtaque

func NewAccionAtaque(origen NumRegion, destino NumRegion, tropasPerdidasAtacante int, tropasPerdidasDefensor int, dadosAtacante []int, dadosDefensor []int, jugadorAtacante string, jugadorDefensor string) AccionAtaque

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

func NewAccionCambioCartas(numTropasObtenidas int, jugador string, bonificacionObtenida bool, regionesQueOtorganBonificacion []NumRegion, obligadoAHacerCambios bool) AccionCambioCartas

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

type AccionJugadorExpulsado struct {
	IDAccion         int
	JugadorEliminado string
}

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

type AccionMensaje struct {
	IDAccion      int
	JugadorEmisor string
	Mensaje       string
}

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

func NewAccionOcupar(origen NumRegion, destino NumRegion, tropasOrigen int, tropasDestino int, jugadorOcupante string, jugadorOcupado string) AccionOcupar

type AccionPartidaFinalizada added in v0.4.1

type AccionPartidaFinalizada struct {
	IDAccion       int
	JugadorGanador string
}

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 Carta

type Carta struct {
	IdCarta   int
	Tipo      TipoTropa
	Region    NumRegion
	EsComodin bool
}

type Continente added in v0.2.0

type Continente struct {
	Valor    int
	Regiones []NumRegion
}

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 EstadoJugador struct {
	Cartas            []Carta
	UltimoIndiceLeido int
	Tropas            int
}

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 (e *EstadoPartida) FortificarTerritorio(origen int, destino int, tropas int, jugador string) error

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 EstadoRegion struct {
	Ocupante  string
	NumTropas int
}

type Fase

type Fase int
const (
	IDAccionRecibirRegion Fase = iota
	IDAccionCambioFase
	IDAccionInicioTurno
	IDAccionCambioCartas
	IDAccionReforzar
	IDAccionAtaque
	IDAccionOcupar
	IDAccionFortificar
	IDAccionObtenerCarta
	IDAccionJugadorEliminado
	IDAccionJugadorExpulsado
	IDAccionPartidaFinalizada
	IDAccionMensaje
)
const (
	Inicio Fase = iota // Repartir regiones
	Refuerzo
	Ataque
	Fortificar
)

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
	Scandinavia
	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

func Adyacentes(region NumRegion) (regiones []NumRegion)

Adyacentes devuelve una lista de regiones aydacentes a "region" en el grafo

func (NumRegion) String

func (nr NumRegion) String() string

type TipoTropa

type TipoTropa int
const (
	Infanteria TipoTropa = iota
	Caballeria
	Artilleria
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL