BlackJack
Como eu me diverti muito trabalhando no desafio KOTH original, eu queria criar outro. Para mim, a diversão desses desafios de IA é refinar um bot comparativamente simples que joga um jogo muito simples sutilmente. Devido à natureza probabilística dos jogos de cartas, acho que o blackjack poderia ser um jogo KOTH interessante, como o TPD.
Todas as regras são derivadas da descrição deste site do BlackJack com sapatos
Regras relativas às cartas e ao baralho
- Bots jogam em mesas de quatro (4) competidores e um (1) croupier
- Um (1) sapato (um baralho embaralhado) é compartilhado por todos os jogadores e pelo dealer até que se esgote; nesse ponto, um novo baralho embaralhado aleatoriamente será adicionado e o jogo continuará. Os bots NÃO SÃO (atualmente) NOTIFICADOS com a adição deste novo baralho. Essa notificação pode ser adicionada se a falta desse recurso causar sofrimento / problemas suficientes.
- Há um buy-in de 10 por rodada e os cartões são gratuitos
- A mão perfeita / ideal tem uma pontuação de 21
- Todas as cartas de cara têm um valor de 10
- Todos os cartões numéricos valem seu número
- Ases valem 11 ou 1. isso será tratado automaticamente pela estrutura, não pelos bots.
- De acordo com as regras , todas as cartas dos jogadores são viradas para cima e são visíveis. Uma das cartas do dealer está voltada para baixo e a outra, voltada para cima.
Pontuação
- Pontuações acima de 21 que usam um ás como 11 forçam o ás a reduzir em valor para 1
- pontuações acima de 21, que não podem ser coagidas abaixo do limiar de 21, "rebentam" o bot
O negociante
- O carteador empata até que ele bote ou ultrapasse uma pontuação de 17 , quando é forçado a ficar
Apostas e fichas
- No início de cada rodada, é cobrado um buy-in de 10, para que haja uma aposta mínima de 10 e uma aposta mínima de 1. NOTA - a aposta é o valor absoluto do argumento da aposta, portanto, não se preocupe tentando apostas negativas.
- Bots que não podem pagar o buy-in são removidos do concurso
- Ao fazer apostas, os bots não podem apostar mais do que as fichas que possuem
- Se a aposta for possível, as fichas apostadas são removidas imediatamente do bot e adicionadas à aposta
- Ganhar uma aposta dá ao bot 2x fichas. No entanto, como a aposta é subtraída das fichas do bot, o bot é equilibrado e ganha 1x a aposta.
- Os bots vencem apostas apenas se a pontuação for maior que a do croupier
Repartição da jogabilidade
Uma mão
- Quando o jogo começa, cada jogador recebe iterativamente uma carta e tem a taxa de buy-in de $ 10 / aposta mínima subtraída de suas fichas.
- O revendedor desenha
- Um segundo passe é feito e outra carta é distribuída a todos os jogadores.
- O revendedor desenha
- Então (na mesma ordem em que foram distribuídos) cada bot é executado conforme descrito na seção "Interface do programador" e deve fazer um movimento ou permanecer em pé. Apostar é considerado uma jogada. OBSERVAÇÃO QUE A APOSTA NÃO AFETA A CAPACIDADE DO BOTS DE FAZER MAIS MOVIMENTOS. É muito possível apostar e depois comprar uma carta, e é possível comprar várias cartas e elas apostam antes de ficar de pé.
- Quando todos os bots foram eliminados, o dealer joga até o limiar de 17
- A pontuação dos bots é então comparada com a do dealer, as apostas são ganhas e perdidas
Uma rodada
É considerado constituído por cinco (5) mãos. Entre as mãos, a lista de participantes é classificada para remover jogadores e depois processada para garantir que todos os bots joguem o mesmo número de mãos (uma provisão para o fato de que o número de entradas não será dividido igualmente entre as mesas de quatro bot )
Interface do programador e movimentos legais
Conforme documentado no arquivo CardShark:
# DOCUMENTATION
# INPUT SPECIFICATION
# $ ./foo.bar <hand-score> <hand> <visible cards> <stake> <chips>
# <hand-score> is the present integer value of the player's hand.
# <hand> is a space-free string of the characters [1-9],A,J,Q,K
# <visible cards> every dealt card on the table. when new shoes are brought
# into play, cards drawn therefrom are simply added to this list
# NOTE: the first TWO (2) cards in this list belong to the dealer.
# one however will be "hidden" by a "#". the other is visible.
# !!! THE LIST IS CLEARED AT THE END OF HANDS, NOT SHOES !!!
# <stake> the number of chips which the bot has bet this hand
# <chips> the number of chips which the bot has
# SAMPLE INPUT
# $ ./foo.bar 21 KJA KQKJA3592A 25 145
#
# OUTPUT SPECIFICATION
# "H"|"S"|"D"|"B" (no quotes in output)
# "H" HIT - deal a card
# "S" STAND - the dealer's turn
# "D" DOUBLEDOWN - double the bet, take one card. FIRST MOVE ONLY
# "B 15" BET - raises the bot's stakes by $15.
Como (agora) documentado no arquivo Cards:
# class CARD
# card is a container for representing paper playing cards in
# otherwise fairly functional programming.
# letter()
# gets the letter used to identify the card in a string
# LETTER MAPPINGS
# Ace : 'A'
# Two : '2'
# Three : '3'
# Four : '4'
# Five : '5'
# Six : '6'
# Seven : '7'
# Eight : '8'
# Nine : '9'
# Ten : 'T'
# Jack : 'J'
# Queen : 'Q'
# King : 'K'
# "Hidden": '#'
O código fonte do sistema de pontuação está AQUI
Bots de amostra
Lim 17
#!/usr/bin/env python
import sys
s = sys.argv
if int(s[1]) < 17:
print "H"
else:
print "S"
Idiomas de Entrada
Atualmente, Java, c / c ++, Python e Lisp são suportados. Será feito um esforço razoável para incluir envios em outros idiomas, mas lembre-se de que o concurso final será realizado em uma caixa Linux.
Seleção de Vencedores
O vencedor seria o autor do bot, que acumulava consistentemente o maior número de fichas em um número ainda determinado de mesas e rodadas. O vencedor será anunciado em 3 de junho, mas o anúncio poderá ser adiado se ainda houver envios. Concurso prorrogado por tempo indeterminado.