Блэк Джек
Поскольку у меня был взрыв, работающий над оригинальным испытанием KOTH, я хотел придумать еще один. Для меня удовольствие от этих задач ИИ заключается в том, чтобы усовершенствовать сравнительно простого бота, который тонко играет в очень простую игру. Из-за вероятностного характера карточных игр, я думаю, что блэкджек может быть интересной игрой КОТ, как и TPD.
Все правила взяты из описания этого блэкджека с обувью на этом сайте.
Правила относительно карт и колоды
- Боты играют за столами четырех (4) участников и одного (1) дилера.
- Один (1) башмак (перемешанная колода) используется всеми игроками и дилером до тех пор, пока он не будет исчерпан, после чего будет добавлена новая случайно перемешанная колода и игра продолжится. Боты НЕ (в настоящее время) УВЕДОМЛЕНЫ о добавлении этой новой колоды. Такое уведомление может быть добавлено, если отсутствие этой функции вызывает достаточные проблемы / проблемы.
- Существует бай-ин в 10 за раунд, и карты бесплатны
- Идеальная / идеальная рука имеет счет 21
- Все лицевые карты имеют значение 10
- Все числовые карты стоят своих номеров
- Тузы стоят 11 или 1. Это будет решаться автоматически фреймворком, а не ботами.
- Согласно правилам , все карты игроков сдаются открытыми и видимыми. Одна из карт дилера закрыта, а другая - лицом вверх.
счет
- Баллы, превышающие 21, которые используют туза как 11, вынуждают туза уменьшиться до 1
- баллы, превышающие 21, которые не могут быть принуждены ниже порога 21 "перебить" бот
Дилер
- Дилер тянет до тех пор, пока не разорится или не наберет 17 очков, после чего он вынужден стоять
Ставки и фишки
- В начале каждого раунда, бай-ин 10 заряжена, так что минимальная ставка 10, а минимальная ставка на 1 Примечание - ставка является абсолютным значением ставки аргумента, так что не беспокойтесь пробовать отрицательные ставки.
- Боты, которые не могут позволить себе вступительный взнос, удаляются из конкурса
- Делая ставки, боты не могут ставить больше, чем у них есть фишки
- Если ставка возможна, ставка на фишки немедленно снимается с бота и добавляется к ставке.
- Выигрыш ставки дает боту ставку в 2 раза больше фишек. Однако, поскольку ставка вычитается из фишек бота, бот становится безубыточным, а затем выигрывает ставку в 1 раз.
- Боты выигрывают ставки только в том случае, если их рейтинг больше, чем у дилера.
Геймплей Breakdown
С одной стороны
- Когда игра начинается, каждому игроку итеративно сдается по одной карте, и из его фишек вычитается плата за вступительный взнос в размере 10 долларов США / минимальная ставка.
- Дилер рисует
- Выполняется второй пас, и всем игрокам раздается другая карта.
- Дилер рисует
- Затем (в том же порядке, в котором они действовали) каждый бот выполняется, как описано в разделе «Интерфейс программиста», и должен сделать ход или встать. Ставки считаются ходом. ЗАМЕТЬТЕ, ЧТО СТАВКА НЕ ВЛИЯЕТ НА СПОСОБНОСТЬ БОТОВ ДЕЛАТЬ ДАЛЬШЕ.Очень возможно сделать ставку, а затем взять карту, и можно взять несколько карт, и они делают ставку, прежде чем стоять.
- Когда все боты разорились или встали, дилер играет до своего порога 17
- Затем боты сравниваются с результатами дилера, ставки выигрываются и проигрываются.
Один раунд
Считается, что составляют пять (5) рук. В промежутках между руками список участников сортируется для удаления игроков, а затем подвергается дальнейшей обработке, чтобы гарантировать, что все боты разыгрывают одинаковое количество рук (условие того, что количество записей не будет равномерно распределяться между столами с четырьмя ботами ).
Интерфейс программиста и легальные ходы
Как указано в файле CardShark:
# DOCUMENTATION
# INPUT SPECIFICATION
# $ ./foo.bar <hand-score> <hand> <visible cards> <stake> <chips>
# <hand-score> is the present integer value of the player's hand.
# <hand> is a space-free string of the characters [1-9],A,J,Q,K
# <visible cards> every dealt card on the table. when new shoes are brought
# into play, cards drawn therefrom are simply added to this list
# NOTE: the first TWO (2) cards in this list belong to the dealer.
# one however will be "hidden" by a "#". the other is visible.
# !!! THE LIST IS CLEARED AT THE END OF HANDS, NOT SHOES !!!
# <stake> the number of chips which the bot has bet this hand
# <chips> the number of chips which the bot has
# SAMPLE INPUT
# $ ./foo.bar 21 KJA KQKJA3592A 25 145
#
# OUTPUT SPECIFICATION
# "H"|"S"|"D"|"B" (no quotes in output)
# "H" HIT - deal a card
# "S" STAND - the dealer's turn
# "D" DOUBLEDOWN - double the bet, take one card. FIRST MOVE ONLY
# "B 15" BET - raises the bot's stakes by $15.
Как (сейчас) задокументировано в файле Cards:
# class CARD
# card is a container for representing paper playing cards in
# otherwise fairly functional programming.
# letter()
# gets the letter used to identify the card in a string
# LETTER MAPPINGS
# Ace : 'A'
# Two : '2'
# Three : '3'
# Four : '4'
# Five : '5'
# Six : '6'
# Seven : '7'
# Eight : '8'
# Nine : '9'
# Ten : 'T'
# Jack : 'J'
# Queen : 'Q'
# King : 'K'
# "Hidden": '#'
Исходный код для системы скоринга ЗДЕСЬ
Образцы ботов
Lim 17
#!/usr/bin/env python
import sys
s = sys.argv
if int(s[1]) < 17:
print "H"
else:
print "S"
Языки входа
В настоящее время поддерживаются Java, c / c ++, Python и Lisp. Будут предприняты разумные усилия, чтобы включить материалы на других языках, но помните, что финальный конкурс будет проводиться на Linux-боксе.
Выбор победителя
Победителем станет автор бота, который последовательно набрал наибольшее количество фишек за определенное количество столов и раундов. Победитель будет объявлен 3 июня, но объявление может быть отложено, если еще поступят заявки. Конкурс продлен до бесконечности.