TrucoBotWars es un juego hecho en Unity el cual se conecta a través de WebSockets con dos bots externos haciendolos jugar al truco. Básicamente sirve para hacer competir a dos bots, el bot más gauchezco gana.
Los bots deben implementar un servidor de WebSockets al cual se va a conectar Unity para enviar y recibir mensajes. Acá pueden encontrar un ejemplo de un bot que hace una jugada random entre las jugadas disponibles.
La comunicación entre el juego y los bots se compone de los siguientes mensajes en formato JSON:
Se envía al bot cada vez que comienza una nueva mano y es el primer mensaje que recibe el bot al iniciarse el juego.
{
mensaje: "iniciarMano",
cartas: [
{
palo: "oro",
numero: 1
},
{
palo: "basto",
numero: 7
},
{
palo: "espada",
numero: 3
},
],
esMano: true
}
Se envía al bot cada vez que es su turno para realizar una jugada.
{
mensaje: "pedirJugada",
cartasEnMesa: [
{
palo: "oro",
numero: 1
}
],
cartasEnMesaOponente: [
{
palo: "oro",
numero: 7
},
{
palo: "basto",
numero: 4
}
],
jugadaAnterior: {
mensaje: "carta"
carta: {
palo: "basto",
numero: 4
}
},
jugadasDisponibles: [ // Las posibles jugadas que puede hacer el bot.
{
mensaje: "envido"
carta: null
},
{
mensaje: "real envido"
carta: null
},
{
mensaje: "falta envido"
carta: null
},
{
mensaje: "truco"
carta: null
},
{
mensaje: "retruco"
carta: null
},
{
mensaje: "vale 4"
carta: null
},
{
mensaje: "carta" // Significa que se puede tirar una carta
carta: null // Este valor siempre viene en null en las jugadas disponibles
},
{
mensaje: "quiero" //disponible cuando hay un canto en juego
carta: null
},
{
mensaje: "no quiero" //disponible cuando hay un canto en juego
carta: null
},
{
mensaje: "irse al mazo" //solo disponible si no hay un canto en juego
carta: null
}
]
}
Se envía desde el bot hacia el juego para indicar que se realiza una cierta jugada.
{
mensaje: "carta"
carta: { // Si no se juega una carta, este campo debe ir en null
palo: "espada",
numero: 3
}
}
Se envía al bot cada vez se resuelve un envido.
{
mensaje: "resultadoEnvido",
ganado: false,
tantosOponente: 33, // Este valor viene en null si el ganador del envido es el jugador mano en esa mano.
}
Se envía al bot cada vez que una mano termina.
{
mensaje: "resultadoMano",
jugadaAnterior: {
mensaje: "carta"
carta: { //este campo viene vacio si el mensaje no es "carta"
palo: "basto",
numero: 4
}
},
puntos: 10, // Puntos totales en la partida actual
puntosOponente: 5, // Puntos totales del oponente en la partida actual
}
Se envía al bot cada vez que una partida se termina.
{
mensaje: "resultadoPartida",
ganada: true
}