Как кодировать руки в покере - сравнение рук для получения высокой карты

В последней статье вы познакомились с написанием кода для сравнения двух покерных рук.

В последней статье вы познакомились с написанием кода для сравнения двух покерных рук. Вы узнали, что при сравнении покерных комбинаций разных рангов побеждает та, у которой более высокий ранг (фулл-хаус лучше тройки). Но что происходит, когда у вас есть покерные руки одного ранга? 🤔

В этой статье вы узнаете, как сравнить покерную комбинацию с самым низким рейтингом и старшей картой.

Рука с высокой картой не попадает ни в одну из других категорий, таких как пара, две пары, тройка одного сорта, стрит и т. Д. При определении типа руки, если она не соответствует ни одной из покерных рук , это автоматически рука старшей карты.

Когда вы сравниваете руки со старшими картами, побеждает тот, у кого карта самого высокого ранга. Если у них одна и та же карта с самым высоким рейтингом, вы сравниваете следующую карту с самым высоким рейтингом и так далее.

Прежде чем сравнивать руки, сортировка карт в порядке убывания ранга делает сравнение намного проще. Но вместо того, чтобы ставить дикие карты в конце, они идут в начале. Мы рассмотрим это более подробно позже в этой статье.

Давайте посмотрим на эти две руки:

Как видите, первые четыре карты обеих рук имеют одинаковое значение. Мы переходим к последней карте, и тройка второй руки бьет две карты первой руки. Таким образом, рука второй старшей карты бьет первую.

Настраивать

Примечание. Первые этапы настройки можно найти на вводной странице для сравнения покерных рук здесь.

Во многих сравнениях рук дикие карты можно рассматривать как наивысшее значение карты, потому что они могут принимать любое значение. Таким образом, он будет принимать максимально возможное значение карты, при этом удовлетворяя покерную комбинацию (это уже было бы определено при сопоставлении покерной руки). Как вы помните, при сопоставлении комбинаций в покере мы отсортировали карты в порядке убывания, причем символы wild были наименьшими значениями, расположив их в конце отсортированной руки. Однако при сравнении покерных комбинаций наибольшее значение будут иметь дикие карты, расположенные в начале отсортированной руки.

Оттуда вам понадобится новая, хотя и более простая функция сортировки. И поскольку эта сортировка будет использоваться при нескольких сравнениях покерных комбинаций, вы можете поместить ее в свой класс CardMatchUtils как функцию:

СортироватьКартыПоУбываниюЗначениеВысокийДикие
OnSortCardsByDescendingValueHighWilds

В основной функции SortCardsByDescendingValueHighWilds - копия параметра руки, который представляет собой массив объектов Card.

Функция сортировки вызывается в массиве вместе с функцией обратного вызова OnSortCardsByDescendingValueHighWilds, которая определяет порядок расположения карточек. Когда эта функция возвращает число больше нуля, card2 следует поместить перед card1 (card2 имеет более высокое значение). Если функция возвращает число меньше нуля, card1 должна идти первой. А если функция возвращает ноль, то обе карты имеют равное значение, и их порядок сортировки относительно друг друга не имеет значения.

Написание кода для сравнения рук со старшими картами

Поскольку эта статья фокусируется только на руке со старшими картами, предполагается, что из функции GetWinningHand руки в покере имеют один и тот же ранг, что и является старшей картой.

Функция GetWinningHand в конечном итоге вызовет FindWinnerHighCard для сравнения двух комбинаций старших карт. FindWinnerHighCard - основная тема обсуждения в этой статье. Он принимает два параметра, руку для обоих игроков, и возвращает идентификатор игрока, у которого есть выигрышная рука с высокой картой. Если обе руки равны, он вернет 0 (что мы будем использовать для обозначения ничьей). Итак, давайте погрузимся в псевдокод. 🙂

НайтиПобедительHighCard

Эта функция сначала сортирует карты по убыванию их достоинства, причем сначала в порядке убывания значения подстановочных знаков. Затем он сравнивает первую карту каждой руки, чтобы определить победителя. Если обе карты одинаковые, сравнивается вторая карта и так далее. Он делает это до тех пор, пока не найдет выигрышную карту или пока все карты в обеих руках не будут сравнены. В последнем случае обе карты имеют одинаковый ранг, и функция возвращает 0.

Это почти все для сравнения двух рук для получения старшей карты. ✔

Сравните свои руки

Вы можете использовать элементы управления ниже, чтобы собрать свои собственные руки и сравнить высокие карты. Повеселитесь поиграться с ним, и если вы обнаружите проблему, дайте мне знать!