Liar's Dice to dość prosta gra w kości. Widziałem kilka różnych odmian zasad, ale oto wersja, którą znam najbardziej:
- Każdy gracz zaczyna od 5d6
- Z wyjątkiem liczenia kości na końcu rundy każdy gracz może zobaczyć własne kości, ale nie kości dowolnego przeciwnika
- Na początku każdej rundy wszyscy gracze rzucają dowolnymi kostkami
- Następnie jeden gracz (zwykle jest to albo zwycięzca poprzedniej rundy LUB gracz po lewej stronie gracza, który zaczął ostatni raz; użyjemy tego pierwszego dla tego KotH; losowy gracz rozpocznie pierwszą rundę) zgaduje, ile konkretnej liczby jest na stole (ONES ARE WILD)
- Licytacja jest kontynuowana w prawo, za każdym razem rosnąc (na przykład; 3 piątki, 3 szóstki i 4 dwójki są wyższe niż 3 czwórki, ale 3 trójki nie są; 4 są również wyższe, ale licytacja na nich prawdopodobnie spowoduje niekorzyść); dopóki jakikolwiek gracz nie wezwie gracza poprzedzającego go kłamcą
- W tym momencie wszyscy gracze odkrywają swoje kości i liczą liczbę ostatniej liczby licytowanej na stole
- Jeśli suma jest niższa niż stawka, gracz, który złożył ofertę, musi dać kostkę graczowi, który nazwał ich kłamcą, w przeciwnym razie gracz, który nazwał licytatora kłamcą, musi dać kostkę licytującemu (więc licytujący wygrywa jeśli ich liczba jest co najmniej tyle, ile licytował, nie musi być dokładnej liczby)
- Kiedy skończą Ci się kości, przegrywasz
- Ostatni stojący gracz wygrywa
Na przykład:
Gracz pierwszy ma 1,1,2,4,6 Gracz drugi ma 1,2,2,3,5 Gracz trzeci ma 1,3,3,4,6 Gracz pierwszy: trzy szóstki. Gracz drugi: cztery dwójki. Gracz trzeci: cztery trójki. Gracz pierwszy: pięć dwójek. Gracz drugi: sześć dwójek. Gracz trzeci: sześć trójek. Gracz pierwszy: sześć czwórek. Gracz drugi: Kłamca! Odsłaniają swoje kości i liczą te (ponieważ są dzikie) i czwórki. Okazuje się, że w rzeczywistości jest dokładnie cztery czwórki. Gracz drugi daje graczowi jedną kość. Przewijają się ponownie, a gracz jeden rozpoczyna kolejną rundę.
Aby zagrać w tę grę, musisz napisać bota. Musi implementować następującą abstrakcyjną klasę 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);
}
- Musisz wdrożyć metodę licytacji
- Pierwszy argument to aktualna pozycja twojego bota w kolejności tury, drugi to tablica pokazująca, ile kości ma obecnie każdy gracz (w tym ty), trzeci to tablica pokazująca wartości aktualnie pokazane na twoich kościach, a czwarty to tablica wszystkich ofert złożonych od początku bieżącej rundy - będzie miała długość 0, jeśli złożysz pierwszą ofertę rundy
- Wynik powinien być ciągiem znaków „liczba twarzy” lub ciągiem „Kłamca!” nazwać poprzedniego oferenta kłamcą.
- Jeśli Twoje dane wyjściowe są sformatowane nielegalnie, zostaniesz wyeliminowany.
- Możesz zastąpić metodę toString, ale nie jest to wymagane. Nie można go jednak edytować w żaden sposób, który zakłóca czytelności danych wyjściowych kontrolera.
- Możesz wywoływać dowolne inne publiczne metody kontrolera, ale nie jego główną metodę.
- Możesz czytać i edytować tylko pliki w bieżącym katalogu poprzedzonym nazwą własnego bota
- Nie możesz pobierać danych z żadnego innego źródła
- Zmienne instancji są resetowane na początku każdej nowej gry, ale zmienne statyczne nie są.
Punktacja
- Za każdym razem, gdy dodawany jest bot (po przesłaniu trzech lub więcej botów), będzie symulowany jeden zestaw 1000 gier z 3-5 graczami, punktowany zgodnie ze źródłem kontrolera (w dowolnej grze zdobądź 1 na początku każdej tury, 10 za każdym razem, gdy złapiesz kostkę, i 1000 bonusów, jeśli wygrasz); egzekwowanie limitu 5000 TURN (nie rund) w każdej grze.
- Twój bot zostanie oceniony na podstawie wyniku z najnowszego zestawu gier; plus dziesięciokrotność wyniku głosowania, jeśli nieujemne. (Jest mało prawdopodobne, aby ten ostatni miał znaczący wpływ na wynik)
Źródło kontrolera można znaleźć tutaj.
Wyniki na dzień 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]
= liczą się twoje kości i bids[yourId]
jest to Twoja pierwsza oferta (lub zero, jeśli to twoja pierwsza tura). Czy to jest poprawne?