Показать сообщение отдельно
  #1 (permalink)  
Старый 25.03.2016, 13:54
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Создание матрицы карт (покер)
Всем привет!
Мои друзья покеристы раскрывают некоторые секреты игры в покер для заработка на ней в интернете*.

Дабы лучше освоить методический материал, и кроме того, подтянуть свои навыки программирования, я решил разработать онлайн-сервис, который бы показывал возможности игры тех или иных рук ("рука" - это те две карты, что сдаются игроку перед раздачей).

В покере много вариантов игр, но мы сосредоточились на конкретном - 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% прибыли с оборота, за счет игроков, которые играют на удачу или же просто не правильно).
Ответить с цитированием