A ideia deste desafio é simples: crie um bot para jogar o jogo de cartas Euchre.
Para aqueles de vocês que ainda não os conhecem, escrevi as regras para Euchre aqui no que se refere a esse desafio.
Eu recomendo usar python ou algo semelhante, mas a única restrição real é que ele deve ser compatível com o código do controlador
Entrada:
Seu bot de euchre receberá diferentes tipos de entrada, dependendo da fase atual do jogo ou rodada. De um modo geral, você terá a fase do jogo na primeira linha, seguida por uma vírgula e o número de pontos que sua equipe possui e, em seguida, os dados relevantes nas linhas a seguir.
Cronologicamente, seu bot receberá informações na seguinte ordem:
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
Resultado:
O seu euchre bot terá saídas diferentes, dependendo da fase atual do jogo ou rodada.
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
Pontuação:
A pontuação do seu bot é o número total de jogos que ele vence.
Seu bot jogará contra todos os outros bot e sempre será associado a uma cópia de si mesmo.
Notas:
Aqui está um modelo simples em 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)
Sempre haverá 4 respostas no total. Se alguém for sozinho, a resposta do parceiro será "p" por sua vez.
Tentei reduzir a quantidade de entrada redundante, para ficar mais claro:
2a Sua posição em relação ao dealer / líder e a carta que seu parceiro jogou podem ser determinadas pelo número de saídas anteriores. Há 1 jogador entre você e seu parceiro. Por exemplo, se você receber "td, 8h, p" como a última linha do seu turno, poderá ver que seu parceiro jogou 8h e o outro time tem um jogador que está indo sozinho.
Se você estiver curioso, o acordo é feito da maneira tradicional (em duas rodadas, pacotes alternados de 2 e 3 cartões), mas isso não é realmente relevante para o seu bot, então ...
Se o segundo jogador decidir fazer o pedido na fase de trunfo, essa fase continuará, mas suas saídas serão praticamente ignoradas. Em outras palavras, quem encomendar primeiro estará na equipe do Namers, independentemente de qualquer outra saída.
A seguir, são apresentados os padrões para as várias fases do jogo. Se você não der uma resposta válida para essa rodada, sua resposta será alterada para o que está abaixo.
Ordenação Trump: p
Nomeando Trump: p
Descartando: (a primeira carta na sua mão)
Sozinho: n
Sua vez: (a primeira carta legal na sua mão)
Aqui está o código do controlador para fins de teste.
6a Observe que você pode passar 2 ou 4 nomes de bots, se você der 4 bots, eles serão parceiros aleatoriamente e, com 2, eles serão parceiros com cópias de si mesmos.
6b Você precisa de um diretório 'bots' no mesmo diretório que o código do controlador, e seu código bot deve estar no diretório bots.
Para aqueles que querem que o bot se lembre de quais cartas foram jogadas, você terá a oportunidade durante a fase de "truques", que informa ao bot quais cartas foram jogadas. Você pode gravar em um arquivo no diretório de bots, desde que esse arquivo não exceda 1kb.
Placar:
Old Stager: 2
Marius: 1
Random 8020: 0