Dados do Mentiroso é um jogo de dados bastante simples. Eu já vi algumas variações diferentes das regras, mas aqui está a versão com a qual estou mais familiarizado:
- Cada jogador começa com 5d6
- Exceto ao somar os dados no final de uma rodada, cada jogador pode ver seus próprios dados, mas não os de qualquer oponente
- No início de qualquer rodada, todos os jogadores jogam os dados que possuem atualmente
- Então, um jogador (normalmente, este é o vencedor da rodada anterior OU o jogador à esquerda do jogador que iniciou a última vez; usaremos o primeiro para este KotH; com um jogador aleatório iniciando a primeira rodada) faz um palpite sobre quantos números estão em cima da mesa (OS SÃO SELVAGENS)
- Os lances continuam à direita, aumentando cada vez mais (por exemplo; 3 cincos, 3 seis e 4 duplas são todos maiores que 3 quatrocentos, mas 3 três não é; 4 outros também são mais altos, mas a licitação de um provavelmente o coloca em um nível desvantagem); até que um jogador chame o mentiroso que o precede
- Neste ponto, todos os jogadores revelam seus dados e contam o número do último lance de número na mesa.
- Se o total for menor do que o lance, o jogador que fez o lance deve dar um dado ao jogador que os chamou de mentiroso; caso contrário, o jogador que chamou o lance de mentiroso deve dar um dado ao licitante (para que o licitante vença se eles tiverem pelo menos o número que ele havia solicitado, não precisa ser o número exato)
- Quando você fica sem dados, você perde
- O último jogador em pé vence
Por exemplo:
O jogador um tem 1,1,2,4,6 O jogador dois tem 1,2,2,3,5 O jogador três tem 1,3,3,4,6 Jogador um: três seis. Jogador dois: quatro pares. Jogador três: quatro trios. Jogador um: cinco duplas. Jogador dois: seis dois. Jogador três: seis trios. Jogador um: seis e quatro. Jogador dois: Mentiroso! Eles revelam seus dados e contam os (porque são selvagens) e os quatro. Acontece que existem, de fato, exatamente seis quatros. Então, o jogador dois dá ao jogador um um dado. Eles re-rolam e o jogador um começa a próxima rodada.
Você deve escrever um bot para jogar este jogo. Ele deve implementar a seguinte classe java abstrata:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Você deve implementar o método de lance
- O primeiro argumento é a posição atual do seu bot na ordem do turno, o segundo é uma matriz que mostra quantos dados cada jogador (incluindo você) possui atualmente, o terceiro é uma matriz que mostra os valores atualmente exibidos em seus próprios dados e a quarta é uma matriz de todos os lances feitos desde o início da rodada atual - terá o comprimento 0 se você estiver fazendo o primeiro lance da rodada
- A saída deve ser uma sequência do formato "número da face" ou a sequência "Mentiroso!" chamar o licitante anterior de mentiroso.
- Se sua saída for formatada ilegalmente, você será eliminado.
- Você pode substituir o método toString, mas não é necessário. No entanto, você não pode editá-lo de qualquer maneira que interfira na legibilidade da saída do controlador.
- Você tem permissão para chamar qualquer outro método público do controlador, mas não o método principal.
- Você pode ler e editar apenas arquivos no diretório em execução prefixado com o nome do seu bot
- Você não tem permissão para receber informações de nenhuma outra fonte
- Variáveis de instância são redefinidas no início de cada novo jogo, mas variáveis estáticas não são.
Pontuação
- Um conjunto de 1.000 jogos, com 3-5 jogadores em cada, será simulado cada vez que um bot for adicionado (assim que três ou mais bots forem enviados), pontuados conforme mostrado na fonte do controlador (em qualquer jogo, você receba 1 no início de cada turno, 10 sempre que capturar um dado e 1.000 de bônus se vencer); impor um limite de 5.000 TURNS (não rodadas) a cada jogo.
- Seu bot será pontuado pela pontuação do último conjunto de jogos; mais dez vezes sua pontuação de voto, se não negativo. (É improvável que este último tenha um efeito significativo na pontuação)
A fonte do controlador pode ser encontrada aqui.
Pontuações a partir de 19/06/2015:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
= seus dados contam e bids[yourId]
é sua primeira oferta (ou nulo se for sua primeira vez). Isso está correto?