Игра Liar's Dice - довольно простая игра в кости. Я видел несколько разных вариантов правил, но вот версия, с которой я наиболее знаком:
- Каждый игрок начинает с 5d6
- За исключением случаев подсчета игральных костей в конце раунда, каждый игрок может видеть свои собственные кубики, но не у любого оппонента.
- В начале любого раунда все игроки бросают любые кости, которые у них есть в данный момент.
- Затем один игрок (обычно это либо победитель предыдущего раунда, либо игрок слева от игрока, начавшего в прошлый раз; мы будем использовать первого для этого KotH; случайный игрок начинает первый раунд) делает предположение о том, сколько из определенного числа на столе (ОДИН ДИКИЙ)
- Торги продолжаются вправо, повышаясь каждый раз (например, 3 пятерки, 3 шестерки и 4 двойки выше 3 четверок, а 3 тройки - нет; 4 также выше, но ставки на них, вероятно, приведут вас к недостаток); пока любой игрок не называет игрока, предшествующего ему, лжецом
- В этот момент все игроки показывают свои кости и подсчитывают количество последних ставок на столе.
- Если общая сумма ниже, чем ставка, игрок, сделавший ставку, должен дать кубик игроку, который назвал их лжецом, в противном случае игрок, который назвал участника аукциона лжецом, должен дать кубик игроку (так что участник выигрывает если их хотя бы столько, сколько он предлагал, точного числа не должно быть)
- Когда у вас кончаются кости, вы теряете
- Последний стоящий игрок выигрывает
Например:
У первого игрока 1,1,2,4,6 Второй игрок имеет 1,2,2,3,5 Игрок третий имеет 1,3,3,4,6 Первый игрок: три шестерки. Второй игрок: четыре пары. Игрок третий: четыре тройки. Первый игрок: пять двойок. Второй игрок: шесть двойок. Игрок третий: шесть троек. Первый игрок: шесть четверок. Игрок второй: Лжец! Они показывают свои кости и подсчитывают (потому что они дикие) и четверки. Оказывается, на самом деле ровно шесть четверок. Таким образом, игрок два дает игроку один кубик. Они перебираются, и игрок 1 начинает следующий раунд.
Вы должны написать бота, чтобы играть в эту игру. Он должен реализовывать следующий абстрактный класс 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);
}
- Вы должны реализовать метод ставок
- Первый аргумент - это текущая позиция вашего бота в порядке хода, второй - массив, показывающий, сколько кубиков у каждого игрока (включая вас) в данный момент, третий - массив, показывающий значения, отображаемые в данный момент на ваших собственных костях, а четвертый - массив всех ставок, сделанных с начала текущего раунда - будет иметь длину 0, если вы делаете первую ставку в раунде
- Вывод должен быть либо строкой вида «число лиц», либо строкой «Лжец!» называть предыдущего претендента лжецом.
- Если ваш вывод отформатирован незаконно, вы будете устранены.
- Вы можете переопределить метод toString, но это не обязательно. Тем не менее, вы не можете редактировать его любым способом, который мешает удобочитаемости выходных данных контроллера.
- Вам разрешено вызывать любые другие открытые методы контроллера, но не его основной метод.
- Вы можете читать и редактировать только файлы в рабочем каталоге с префиксом собственного имени вашего бота
- Вам не разрешено принимать входные данные из любого другого источника
- Переменные экземпляра сбрасываются в начале каждой новой игры, но статические переменные - нет.
счет
- Один набор из 1000 игр с 3-5 игроками в каждой будет симулироваться при каждом добавлении бота (как только будет представлено три или более ботов), как показано в источнике контроллера (в любой данной игре вы получить 1 в начале каждого вашего хода, 10 каждый раз, когда вы захватываете кубик, и 1000 бонусов, если вы выиграете); соблюдение лимита в 5000 TURNS (не раундов) в каждой игре.
- Ваш бот будет оцениваться по его счету из последних игр; плюс в десять раз больше его голосов, если он не отрицательный. (Последнее вряд ли окажет существенное влияние на оценку)
Источник контроллера можно найти здесь.
Результаты по состоянию на 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]
= количество ваших кубиков и bids[yourId]
ваша первая ставка (или ноль, если это ваш первый ход). Это верно?