Всем привет!
Мои друзья покеристы раскрывают некоторые секреты игры в покер для заработка на ней в интернете*.
Дабы лучше освоить методический материал, и кроме того, подтянуть свои навыки программирования, я решил разработать онлайн-сервис, который бы показывал возможности игры тех или иных рук
("рука" - это те две карты, что сдаются игроку перед раздачей).
В покере много вариантов игр, но мы сосредоточились на конкретном - spin&go. Суть его в том, что участвуют три человека - 3max, и HU - (handsup), когда остаются 2 игрока, побеждает один, а игра движется очень быстро за счет быстрого увеличения уровней блайндов (о блайндах и вообще о покере лучше прочитать отдельно, так как тут нет возможности все объяснить).
Еще одно, что необходимо упомянуть перед постановкой задачи, это позиции. У нас их три (BU- button, SB - small blind, BB - big blind) и каждый раунд они передвигаются по кругу.
В зависимости от позиции, количества игроков за столом и полученных карт в руке, мы играем одной из четырех ключевых опций: fold (пас), call ("сухой" вход в игру), raise (повышение ставки) и all-in (ставим на кон все свои фишки). Общая стратегия - сыграть с более лучшей рукой, чем у оппонентов или же поставить такую ставку, что бы оппоненты играли в пас, отдав банк нам.
Что бы знать как играть в какой позиции и с какими картами, мои друзья составили специальные чарты (в экселе), которые я и хочу развернуть на своем сайте.
Я уже сделал первый прототип, где можно переключать свою позицию, выбирать размер стека (
"стэк" - количество фишек при игроке) и в соответствии с этим отображается тот или иной чарт.
http://pokergo.su/v1/
Тот уровень низкого программирования, что вы наблюдаете на этом сайте - это и есть я
Сам оцениваю себя как новичка, но хочу развиваться в сторону ООП, и надеюсь с этим проектом и с вашей помощью продвинуться в этом направлении.
Итак, задача!
Проект: покерные чарты онлайн.
Элементы: матрица карт (пустой чарт) и контроллеры (кнопки).
Действия: контроллеры должны динамично выделять те или иные руки в матрице карт.
Пример:
На этом чарте выделены руки, которые мы играем на позиции BU с размером нашего стека от 20бб и больше (
игра начинается с 25бб у каждого игрока).
Красным выделены те, что играем повышением, зеленым - те, что играем в PUSH (all-in), синим - call, (фиолетовый цвет не считаем). Все что без цвета - в пас.
Обратите внимание на то, как составлена матрица, это стандарт в покерном мире. Она делится пополам на две части - одномастные руки и разномастные, по диагонали располагаются парные карты.
Собственно это первая часть задачи -
генерация подобной матрицы.
За сим я вынужден передать пальму лидерства вам, так как мои знания в ООП явно меньше чем в покере
Нам нужно сгенерировать все эти руки, что бы в дальнейшем каждой из них можно было управлять по средствам контроллеров.
Как визуально собрать это в html - наверное самая легкая подзадача, лучше обычными дивами по-порядку друг за другом, дальше по средствам CSS я придам нужный вид матрице, но это потом.
Очень сложная для генерации матрица (имхо), и самый простой способ что я вижу, это просто вручную забить все в HTML с навешиванием айдишников на каждый для дальнейшего контроля. Но этот подход из прошлого века мне претит, я чувствую, что должны быть более изящные способы.
Возможно, будет удобно, если каждая рука будет описана в виде объекта, в котором будут указаны все необходимые свойства.
Такой пример:
sAK = {
'name': 'AKs',
'is_suited': 'true',
'is_pair': 'false'
}
oKQ = {
'name': 'KQo',
'is_suited': 'true',
'is_pair': 'false'
}
pQQ = {
'name': 'QQ',
'is_suited': 'false',
'is_pair': 'true'
}
Поправьте меня, если я думаю не в том направлении, но мне кажется, что тут же - для каждой руки, будет уместно описать и поведение в тех или иных контрллерах.
pQQ = {
'name': 'QQ',
'is_suited': 'false',
'is_pair': 'true',
'players_3max' : {
'position_BU': {
'bb20': 'call',
'bb15': 'raise',
'bb10': 'push',
'bb5': 'push',
},
'position_BB': {
'bb20': 'raise',
'bb15': 'raise',
'bb10': 'push',
'bb5': 'push',
},
'position_SB': {
'bb20': 'raise',
'bb15': 'push',
'bb10': 'push',
'bb5': 'push',
}
},
'players_HU' : {
'position_BU': {
'bb20': 'call',
//и тд
},
'position_SB': {
'bb20': 'raise',
//и тд
},
}
Так как я слаб в ООП (читал кое-что), то и не могу точно предположить, что подобная архитектура будет удачной.
Как лучше создавать все эти сущности - руками или хитрым циклом, я не знаю. Как контроллеры будут работать с ними - тоже слабо представляю.
Важно то, что приложение должно быть расширяемым, будет больше контроллеров и больше опций для каждой руки, поэтому сейчас важно создать устойчивую базу.
В дальнейшем подобный проект может стать популярным, если у посетителей будет возможность создания и сохранения собственных чартов.
Вот собственно все на пока, надеюсь на помощь, на советы, на javascript
(Примечание: "проф.покер", это когда вы играете математически правильно на протяжении тысяч игр и имеете с этого 0-10% прибыли с оборота, за счет игроков, которые играют на удачу или же просто не правильно).