La idea de este desafío es simple: crear un bot para jugar el juego de cartas Euchre.
Para aquellos de ustedes que aún no los conocen, he escrito las reglas a Euchre aquí en lo que respecta a este desafío.
Recomiendo usar Python o algo similar, pero la única restricción real es que tiene que ser compatible con el código del controlador
Entrada:
Su euchre bot recibirá diferentes tipos de entrada dependiendo de la fase actual del juego o ronda. En términos generales, obtendrá la fase del juego en la primera línea seguida de una coma y la cantidad de puntos que tiene su equipo, y luego los datos relevantes en las siguientes líneas.
Cronológicamente, su bot recibirá información en el siguiente orden:
Ordering Trump:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
ordering // the phase of the game
th // the turned up card
p,p // each previous player’s decision
Naming Trump:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
naming // the phase of the game
p // each previous player’s decision
Dealer Discarding:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
discard // the phase of the game
th // the card you will pick up
Going alone:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
alone // the phase of the game
h // the trump suit
n,n // each previous player’s decision
Your turn:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
turn // the phase of the game
h // the trump suit
td,8h,p // each previous player’s card
Trick data:
// the cards in your hand (none, since this happens at the end of a trick)
2 // number of points your team has
1 // number of tricks your team has taken
trick // the phase of the game
0 // the index of the following list that is your card
js,tc,4d,js // the cards played during the trick in the order they were played
Salida:
Su euchre bot tendrá diferentes salidas dependiendo de la fase actual del juego o ronda.
Ordering Trump:
p //for pass
OR
o //for order up
Naming Trump:
p //for pass
OR ANY OF
c,s,h,d //the suit you want to name
Going alone:
n // no
OR
y // yes
Your turn:
js //the card you want to play
Puntuación:
La puntuación de tu bot es el número total de juegos que gana.
Tu bot jugará contra cualquier otro bot, y siempre estará asociado con una copia de sí mismo.
Notas:
Aquí hay una plantilla simple en python2.7:
#!/usr/bin/python2.7
import sys
data = sys.stdin.readlines()
hand = data[0].strip().split(',') # Hand as a list of strings
points = int(data[1]) # Number of points
tricks = int(data[2]) # Number of tricks
out = ''
if data[3] == 'ordering':
card = data[4] # The upturn card
prev = data[5].strip().split(',') # The previous player's decisions as a list
# Ordering logic
out = # 'o' or 'p'
elif data[3] == 'naming':
prev = data[4].strip().split(',') # The previous player's decisions as a list
# Naming logic
out = # 'p', 'h', 's', 'c', or 'd'
elif data[3] == 'discard':
card = data[4] # The card you'll take
# Discarding logic
out = # The card you want to discard
elif data[3] == 'alone':
trump = data[4] # The trump suit
prev = data[5].strip().split(',') # The previous player's decisions as a list
# Alone logic
out = # 'y' for yes, 'n' for no
elif data[3] == 'turn':
trump = data[4] # The trump suit
prev = data[5].strip().split(',')
# Turn logic
out = # The card you want to play
elif data[3] == 'trick':
trump = data[5]
cards = data[6].strip().split(',')
my_card = cards[int(data[4])]
# Data logic
print(out)
Siempre habrá 4 respuestas totales. Si alguien va solo, entonces la respuesta de su compañero será "p" en su turno.
Traté de reducir la cantidad de entradas redundantes, para ser más claro:
2a. Tanto su posición con respecto al crupier / líder como la carta que jugó su compañero pueden determinarse por el número de salidas anteriores. Hay 1 jugador entre usted y su compañero. Por ejemplo, si obtienes "td, 8h, p" como la última línea de tu turno, puedes ver que tu compañero jugó 8h, y el otro equipo tiene un jugador que va solo.
Si tienes curiosidad, el trato se hace de la manera tradicional (en dos rondas alternando paquetes de 2 y 3 cartas) pero eso no es realmente relevante para tu bot, así que ...
Si el segundo jugador decide ordenar en la fase de triunfo, esa fase continuará, pero sus resultados serán ignorados. En otras palabras, quien ordene primero está en el equipo de Namers, independientemente de cualquier otro resultado.
Los siguientes son los valores predeterminados para las diversas fases del juego. Si no emite una respuesta válida para esa ronda, su respuesta cambiará a la siguiente.
Ordenar Trump: p
Nombramiento de Trump: p
Descarte: (la primera carta en tu mano)
Yendo solo: n
Tu turno: (la primera carta legal en tu mano)
Aquí está el código del controlador para sus propósitos de prueba.
6a. Tenga en cuenta que puede pasar 2 o 4 nombres de bot, si le da 4 bots, se asocian al azar, y con 2 se asocian con copias de sí mismos.
6b. Necesita un directorio 'bots' en el mismo directorio que el código del controlador, y su código bot debe estar en el directorio bots.
Para aquellos que quieren que su bot recuerde qué cartas se jugaron, se les da la oportunidad durante la fase de "truco", que le dice a su bot qué cartas se jugaron. Puede escribir en un archivo en el directorio de bots siempre que ese archivo no exceda 1kb.
Marcador:
Old Stager: 2
Marius: 1
Random 8020: 0
fuente
Respuestas:
Mario
Escribí ese bot en R. Hice algunas pruebas con su controlador y parecen comunicarse correctamente.
Probablemente lo modifique más tarde, ya que no implementé una lógica de "giro" para cuando el bot se defiende, pero lo estoy publicando ahora para que la gente tenga otro bot para probar.
Por ahora, solo implementa estrategias muy básicas como liderar con un as, un triunfo o cualquier otra carta alta; seguir con una carta más alta cuando sea posible o jugar la carta de menor valor si no; ordenar cuando la mano tiene un valor alto y nombrar el color en el que la mano habría tenido el valor más alto; ir solo cuando la mano tiene un valor muy alto. El "valor" de cada carta se calcula de manera muy simple: el valor de los triunfos comienza desde 7 para el primer jack y disminuye a lo largo del palo de triunfo.
fuente
Old Stager
Este bot sigue algunas reglas simples que le sirvieron durante mucho tiempo:
Aumenté el puntaje objetivo de 10 a 100 para probar en el controlador. Los resultados siguen siendo muy aleatorios, pero mucho más estables que antes.
fuente
Aleatorio 8020
Un bot aleatorio simple, que pasará el 80% del tiempo. Elimine el comentario de la última línea para ver la entrada (salida) borrada.
fuente