Liar's Dice ist ein ziemlich einfaches Würfelspiel. Ich habe einige verschiedene Variationen der Regeln gesehen, aber hier ist die Version, mit der ich am vertrautesten bin:
- Jeder Spieler beginnt mit 5W6
- Außer wenn die Würfel am Ende einer Runde gezählt werden, kann jeder Spieler seine eigenen Würfel sehen, jedoch nicht die eines Gegners
- Zu Beginn einer beliebigen Runde würfeln alle Spieler mit den Würfeln, die sie gerade haben
- Dann ein Spieler (normalerweise ist dies entweder der Gewinner der vorherigen Runde ODER der Spieler links von dem Spieler, der das letzte Mal gestartet ist. Wir werden den ersteren für diese KotH verwenden. Ein zufälliger Spieler beginnt die erste Runde.) errät, wie viele von einer bestimmten Zahl auf dem Tisch sind (ONES ARE WILD)
- Das Bieten geht nach rechts weiter und wird jedes Mal höher (zum Beispiel: 3 Fünfer, 3 Sechsen und 4 Zweier sind alle höher als 3 Vierer, aber 3 Dreier sind nicht; 4 ist ebenfalls höher, aber das Bieten auf einen bringt Sie wahrscheinlich zu einem Nachteil); bis ein Spieler den vorhergehenden Spieler als Lügner bezeichnet
- Zu diesem Zeitpunkt decken alle Spieler ihre Würfel auf und zählen die Nummer des letzten auf den Tisch gebotenen Gebots
- Wenn die Summe niedriger als das Gebot ist, muss der Spieler, der das Gebot abgegeben hat, dem Spieler, der sie als Lügner bezeichnet hat, einen Würfel geben, ansonsten muss der Spieler, der den Bieter als Lügner bezeichnet hat, dem Bieter einen Würfel geben (damit der Bieter gewinnt) Wenn es mindestens so viele von dieser Zahl gibt, wie er geboten hat, muss es nicht die genaue Zahl sein.
- Wenn Sie keine Würfel mehr haben, verlieren Sie
- Der letzte Spieler gewinnt
Beispielsweise:
Spieler eins hat 1,1,2,4,6 Spieler zwei hat 1,2,2,3,5 Spieler drei hat 1,3,3,4,6 Spieler eins: drei Sechser. Spieler zwei: vier Zweien. Spieler drei: vier Dreien. Spieler eins: fünf Zweien. Spieler zwei: sechs Zweien. Spieler drei: sechs Dreien. Spieler eins: sechs Vierer. Spieler zwei: Lügner! Sie decken ihre Würfel auf und zählen die (weil die wild sind) und die Vierer. Es stellt sich heraus, dass es tatsächlich genau sechs Vierer gibt. Spieler zwei gibt Spieler eins einen Würfel. Sie wiederholen und Spieler eins beginnt die nächste Runde.
Sie müssen einen Bot schreiben, um dieses Spiel zu spielen. Es muss die folgende abstrakte Java-Klasse implementieren:
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);
}
- Sie müssen die Bid-Methode implementieren
- Das erste Argument ist die aktuelle Position Ihres Bots in der Zugreihenfolge, das zweite ist ein Array, das angibt, wie viele Würfel jeder Spieler (einschließlich Sie selbst) aktuell hat, das dritte ist ein Array, das die aktuell auf Ihren eigenen Würfeln angezeigten Werte anzeigt, und das vierte ist Ein Array aller Gebote, die seit Beginn der aktuellen Runde abgegeben wurden, hat die Länge 0, wenn Sie das erste Gebot der Runde abgeben
- Die Ausgabe sollte entweder eine Zeichenfolge der Form "Zahlengesicht" oder die Zeichenfolge "Lügner!" den vorherigen Bieter als Lügner bezeichnen.
- Wenn Ihre Ausgabe illegal formatiert ist, werden Sie eliminiert.
- Sie können die toString-Methode überschreiben, müssen dies jedoch nicht. Sie dürfen sie jedoch nicht in einer Weise bearbeiten, die die Lesbarkeit der Controller-Ausgabe beeinträchtigt.
- Sie dürfen andere öffentliche Methoden des Controllers aufrufen, jedoch nicht dessen Hauptmethode.
- Sie können nur Dateien im laufenden Verzeichnis lesen und bearbeiten, denen der Name Ihres Bots vorangestellt ist
- Es ist Ihnen nicht gestattet, Eingaben von anderen Quellen zu übernehmen
- Instanzvariablen werden zu Beginn jedes neuen Spiels zurückgesetzt, statische Variablen jedoch nicht.
Wertung
- Jedes Mal, wenn ein Bot hinzugefügt wird (sobald drei oder mehr Bots eingereicht wurden), wird ein Satz von 1.000 Spielen mit jeweils 3-5 Spielern simuliert Holen Sie sich zu Beginn jedes Spielzugs 1, jedes Mal 10, wenn Sie einen Würfel erobern, und 1.000 Bonus, wenn Sie gewinnen. Erzwingen eines Limits von 5.000 TURNS (keine Runden) pro Spiel.
- Ihr Bot wird nach seiner Punktzahl aus der letzten Reihe von Spielen gewertet. plus das Zehnfache der Stimmenzahl, wenn nicht negativ. (Letzteres wird wahrscheinlich keinen signifikanten Einfluss auf die Punktzahl haben.)
Die Controller-Quelle finden Sie hier.
Stand vom 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]
= Ihre Würfel zählen und bids[yourId]
Ihr erstes Gebot ist (oder null, wenn Sie zum ersten Mal an der Reihe sind). Ist das korrekt?