Liar's Dice es un juego de dados bastante simple. He visto algunas variaciones diferentes de las reglas, pero aquí está la versión con la que estoy más familiarizado:
- Cada jugador comienza con 5d6
- Excepto al contar los dados al final de una ronda, cada jugador puede ver sus propios dados, pero no los de ningún oponente.
- Al comienzo de cualquier ronda, todos los jugadores tiran cualquier dado que tengan actualmente
- Luego, un jugador (generalmente, este es el ganador de la ronda anterior O el jugador a la izquierda del jugador que comenzó la última vez; usaremos el primero para este KotH; con un jugador aleatorio que comienza la primera ronda) adivina cuántos de un número en particular hay en la mesa (UNOS SON SALVAJES)
- Las pujas continúan hacia la derecha, subiendo cada vez (por ejemplo; 3 cinco, 3 seises y 4 dos son más altos que 3 cuatros, pero 3 no lo es; 4 también es más alto, pero pujar por uno probablemente lo pondrá en un desventaja); hasta que cualquier jugador llame mentiroso al jugador que le precede
- En este punto, todos los jugadores revelan sus dados y cuentan el número del último número ofertado en la mesa por completo
- Si el total es menor que la oferta, el jugador que hizo la oferta debe dar un dado al jugador que los llamó mentiroso; de lo contrario, el jugador que llamó al postor mentiroso debe darle un dado al postor (para que el postor gane si hay al menos tantos de ese número como había ofertado, no tiene que haber el número exacto)
- Cuando te quedas sin dados, pierdes
- El último jugador en pie gana
Por ejemplo:
El jugador uno tiene 1,1,2,4,6 El jugador dos tiene 1,2,2,3,5 El jugador tres tiene 1,3,3,4,6 Jugador uno: tres seises. Jugador dos: cuatro dos. Jugador tres: cuatro tres. Jugador uno: cinco dos. Jugador dos: seis dos. Jugador tres: seis tres. Jugador uno: seis cuatro. Jugador dos: ¡Mentiroso! Revelan sus dados y cuentan los que están (porque son salvajes) y los cuatro. Resulta que hay, de hecho, exactamente seis cuatros. Entonces el jugador dos le da al jugador uno un dado. Se vuelven a tirar y el jugador uno comienza la siguiente ronda.
Debes escribir un bot para jugar este juego. Debe implementar la siguiente clase abstracta de Java:
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);
}
- Debe implementar el método de oferta
- El primer argumento es la posición actual de su bot en el orden de turno, el segundo es una matriz que muestra cuántos dados tiene actualmente cada jugador (incluido usted), el tercero es una matriz que muestra los valores que se muestran actualmente en sus propios dados, y el cuarto es un conjunto de todas las ofertas realizadas desde el inicio de la ronda actual: tendrá una longitud de 0 si realiza la primera oferta de la ronda
- El resultado debe ser una cadena de la forma "cara de número" o la cadena "¡Mentiroso!" llamar mentiroso al postor anterior.
- Si su salida está formateada ilegalmente, será eliminado.
- Puede anular el método toString, pero no es obligatorio. Sin embargo, no puede editarlo de ninguna manera que interfiera con la legibilidad de la salida del controlador.
- Se le permite llamar a cualquier otro método público del controlador, pero no a su método principal.
- Puede leer y editar solo archivos en el directorio en ejecución con el prefijo del nombre de su bot
- No tiene permiso para recibir información de ninguna otra fuente
- Las variables de instancia se restablecen al comienzo de cada nuevo juego, pero no las variables estáticas.
Tanteo
- Se simulará un conjunto de 1,000 juegos, con 3-5 jugadores en cada uno, cada vez que se agregue un bot (tan pronto como se hayan enviado tres o más bots), puntuado como se muestra en la fuente del controlador (en cualquier juego dado, usted obtenga 1 al comienzo de cada uno de sus turnos, 10 cada vez que capture un dado y 1,000 de bonificación si gana); aplicando un límite de 5,000 VUELTAS (no rondas) cada juego.
- Su bot será calificado por su puntaje del último conjunto de juegos; más diez veces su puntaje de voto, si no es negativo. (Es poco probable que este último tenga un efecto significativo en la puntuación)
La fuente del controlador se puede encontrar aquí.
Puntajes a partir del 2015-06-19:
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]
= su cuenta de dados, y bids[yourId]
es su primera apuesta (o nula si es su primer turno). ¿Es eso correcto?