Liar's Dice è un gioco di dadi abbastanza semplice. Ho visto alcune diverse varianti delle regole, ma ecco la versione con cui ho più familiarità:
- Ogni giocatore inizia con 5d6
- Tranne quando si calcola il dado alla fine di un round, ogni giocatore può vedere i propri dadi, ma non quelli di qualsiasi avversario
- All'inizio di un dato round, tutti i giocatori lanciano qualsiasi dado che abbiano attualmente
- Quindi, un giocatore (di solito, questo è il vincitore del round precedente O il giocatore alla sinistra del giocatore che ha iniziato l'ultima volta; useremo il primo per questo KotH; con un giocatore a caso che inizia il primo round) fa un'ipotesi sul numero di un determinato numero sul tavolo (ONES ARE WILD)
- Le offerte continuano a destra, andando sempre più in alto (per esempio; 3 cinque, 3 sei e 4 due sono tutti più alti di 3 quattro, ma 3 tre non lo sono; 4 uno è anche più alto, ma l'offerta su uno probabilmente ti metterà a un svantaggio); fino a quando un giocatore non lo chiama bugiardo
- A questo punto, tutti i giocatori rivelano i loro dadi e contano il numero dell'ultima offerta numerica sul tavolo
- Se il totale è inferiore all'offerta, il giocatore che ha fatto l'offerta deve dare un dado al giocatore che li ha definiti bugiardi, altrimenti il giocatore che ha definito l'offerente un bugiardo deve dare un dado all'offerente (quindi l'offerente vince se il loro numero è almeno pari a quello che aveva offerto, non deve esserci il numero esatto)
- Quando finisci i dadi, perdi
- Vince l'ultimo giocatore in piedi
Per esempio:
Il giocatore uno ha 1,1,2,4,6 Il giocatore due ha 1,2,2,3,5 Il giocatore tre ha 1,3,3,4,6 Giocatore uno: tre sei. Giocatore due: quattro due. Giocatore tre: quattro tre. Giocatore uno: cinque due. Giocatore due: sei due. Giocatore tre: sei tre. Giocatore uno: sei quattro. Giocatore due: bugiardo! Rivelano i loro dadi e contano quelli (perché quelli sono selvaggi) e i quattro. Si scopre che ci sono, in effetti, esattamente sei fours. Quindi il giocatore due dà al giocatore uno un dado. Ritirano e il giocatore uno inizia il round successivo.
Devi scrivere un bot per giocare a questo gioco. Deve implementare la seguente classe java astratta:
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);
}
- È necessario implementare il metodo di offerta
- Il primo argomento è la posizione corrente del tuo bot nell'ordine del turno, il secondo è un array che mostra quanti dadi ha attualmente ciascun giocatore (incluso te stesso), il terzo è un array che mostra i valori attualmente mostrati sui tuoi dadi, e il quarto è un array di tutte le offerte fatte dall'inizio del round corrente - avrà lunghezza 0 se stai facendo la prima offerta del round
- L'output dovrebbe essere una stringa del formato "numero faccia" o la stringa "Bugiardo!" per chiamare bugiardo il precedente offerente.
- Se il tuo output è formattato illegalmente, verrai eliminato.
- È possibile ignorare il metodo toString, ma non è necessario. Tuttavia, non è possibile modificarlo in alcun modo che interferisca con la leggibilità dell'output del controller.
- È consentito chiamare qualsiasi altro metodo pubblico del controller, ma non il suo metodo principale.
- Puoi leggere e modificare solo i file nella directory in esecuzione con il prefisso del nome del tuo bot
- Non è consentito ricevere input da qualsiasi altra fonte
- Le variabili di istanza vengono ripristinate all'inizio di ogni nuovo gioco, ma non le variabili statiche.
punteggio
- Un set di 1.000 giochi, con 3-5 giocatori ciascuno, verrà simulato ogni volta che viene aggiunto un bot (non appena sono stati inviati tre o più robot), segnato come mostrato nella fonte del controller (in ogni gioco, tu ottieni 1 all'inizio di ogni tuo turno, 10 ogni volta che catturi un dado e 1.000 bonus se vinci); imponendo un limite di 5.000 TURN (non round) per partita.
- Il tuo bot verrà segnato dal suo punteggio dell'ultimo set di giochi; più dieci volte il suo punteggio di voto, se non negativo. (È improbabile che quest'ultimo abbia un effetto significativo sul punteggio)
La fonte del controller può essere trovata qui.
Partiture al 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]
= il tuo dado conta, ed bids[yourId]
è la tua prima offerta (o nulla se è il tuo primo turno). È corretto?