Игра 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
popularity-contest
king-of-the-hill
java
SuperJedi224
источник
источник
diceEachPlayerHas[yourId]
= количество ваших кубиков иbids[yourId]
ваша первая ставка (или ноль, если это ваш первый ход). Это верно?Ответы:
Никто
Пытается угадать кости от других игроков. Называет других ботов лжецами, если не знает, что делать.
Изменить: Исправлена проблема, когда никто не будет делать ставки вечно, никогда не вызывая лжеца.
источник
Badnomial, бот, который принимает неверные решения на основе биномиальных распределений: Edit: Исправлена глупая ошибка в вычислениях вероятности, теперь учитывает как следующего Bidder, так и предыдущего.
Он пытается определить, должен ли он блефовать или коллировать на лжеца, основываясь на оценочных кумулятивных биноминальных распределениях для себя и шансов предыдущего и следующего претендента на наличие необходимых костей.
По сути, он называет Лжецом, если предыдущий Участник, скорее всего, является Лжецом, или если он чувствует, что и он, и следующий Участник скорее лгут, чем нет.
источник
Стрелок прямо
Он играет прямо и не блефует. Он также достаточно наивен, чтобы думать, что это делают и другие, поэтому он никогда не называет лжецом, если ставка не превысит общее количество игральных костей (минус его собственные кости, которые не соответствуют ставке).
Чтобы быть немного более консервативным, чем точное ожидаемое число для каждого кубика, он не считает свои собственные джокеры, но предполагает, что другие имеют равномерное распределение. С нынешними четырьмя игроками он или MostlyHonestAbe выходили первыми каждый раз с довольно близкими результатами.
Я предполагаю, что минимальная ставка
2 2
. Если разрешена ставка в один кубик (или в торгах), дайте мне знать, чтобы я мог внести это изменение.источник
MostlyHonestAbe
Эйб делает консервативные предположения о том, что остальные оппоненты умирают, а затем остается честным, пока не решит, что на текущей ставке достаточно костей. В этот момент он блефует один раз, а в следующий раз коллирует.
источник
Доктор Дом
Все лгут!
источник
Fidelio
Этот бот знает, что только его самая постоянная ценность приведет его к победе, поэтому он придерживается ее. Он предполагает, что есть часть всех игральных костей, которые совпадают с его, если кто-то предложит больше, чем эта часть, он предполагает, что он лжец.
Я надеюсь, что он сделает хорошую работу :).
источник
статистик
У вас есть 1/3 шансов получить любое количество, кроме тузов. Один парень однажды сказал мне, что если вы не проверяете ваши кубики и не знаете, что такое шансы, вы можете выиграть эту игру. РЕДАКТИРОВАТЬ: Это было слишком высокой ставкой. Но это не сильно улучшит счет.
источник
Абсурд Бот
Делает заявление, что все кости - 6, если это не может. Если бот не может этого сделать, это означает, что это невозможная ситуация или почти невозможная ситуация. Из-за этого он называет лжецом. Мне интересно, насколько эффективным будет этот бот.
источник
Пиратский
Я сделал несколько простых ботов во время тестирования контроллера, и это единственный, который действительно хорош.
Скорее всего будет улучшено позже.
источник