12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

codingФорма HoldemConsoleФорма HoldemFormрешений формулу p*pot = win и сравнивает win со своими ставками. Иначеговоря, использует формулу, которую мы обсуждали в прошлой статье (еслихочешь освежить память — вставь в свою ЭВМ диск к этому журналу изачитай ее). Единственное, что — CautiousLogic уменьшает вероятность,чтобы разыгрывать меньше рук, а AggressiveLogic увеличивает, чтобыразыгрывать больше. Оболочка HoldemForm рисует форму на swing’e иреализует два интерфейса — IEventSimulation и ILogic. Первый интерфейснужен для того, чтобы отображать на форме все события симуляции — раздачукарт, сообщения дилера, изменения состояний игроков и т.д. Второйинтерфейс мы создаем, чтобы пользователь мог сообщать симулятору своидействия — Fold, Call или Raise. Форма отображает все карты игроков ивероятности их выигрыша, поэтому она не подходит для честной игры скомпьютером, но зато идеально подходит для отладки симулятора.HoldemConsole просто выводит все сообщения дилера на экран.ÏÎÐßÄÎÊ ÑÈÌÓËßÖÈÈДля начала — небольшой алгоритм. Итак:1) Поставить большой и малый блайнды;2) Раздать карты игрокам (Пре флоп);3) Провести круг торговли;4) Положить три карты на стол (Флоп);5) Провести круг торговли;6) Положить четвертую карту на стол (Терн);7) Провести круг торговли;8) Положить пятую карту на стол (Ривер);9) Провести круг торговли;10) Открыть карты и определить выигрышную комбинацию.Соответственно, после каждого круга торговли нужно проверять, неостался ли в игре только один игрок. Если да, то весь банк уходит ему.Количество игроков, которые будут играть, равно девяти. Во времяигры их может стать меньше, но в начале их будет именно девять. Этосделано в целях упрощения симуляции — не надо заботиться о длинахмассивов.XÀÊÅÐ 08 /139/ 10ÊÎÄ ÑÈÌÓËßÒÎÐÀОпределимся с тем, что должен знать симулятор. Во-первых, симулятордолжен иметь следующие данные об игроках: их деньги(moneyOfPlayers), карты (handOfPlayers) и их состояние (в игре иливышли) — stateOfPlayers. Во-вторых, должен знать позицию дилера(posOfDealer), количество денег в банке (pot), размер большого блайнда(bigBlind) и текущие карты на столе (board). Для работы логикипринятия решений нужно также запоминать, сколько денег положилв банк каждый из игроков за текущую игру(totalBet). И самое главное— симулятор должен знать, что за игроки играют за столом, тоесть у него должен быть список всех игроков (playersList). Методы,нужные для симуляции: trade(int betting) — метод торговли,startGame() — главный метод, в котором происходит игра, intgetSinglePlayer() — если в игре остался один игрок, то методвернет индекс этого игрока, int getActivePlayer() — количествоактивных игроков в игре. К этим методам добавляются несколько setметодовдля изменения значений по умолчанию — setBigBlind(intbigBlind), setRoundCount(int roundCount). Можно сделатьметод по изменению количества денег перед игрой, но я считаю, этоне критично, ведь, в конце концов, это симулятор для тестированияалгоритмов, а там не важно, сколько денег у игроков в начале игры.Хотя, если делать на основе этого симулятора приложение для игры впокер, то стоит реализовать данный метод, плюс сделать возможностьизменения количества игроков в начале игры. Теперь рассмотрим подробнееметоды игры и торговли.STARTGAMEШаги симуляции в теории расписаны выше, на практике же к нимдобавляются следующие действия: обнуление переменных передначалом каждого раунда, перемешивание карт перед началом каждогораунда, проверка на наличие более одного игрока в игре после каждогокруга торговли. Небольшое замечание: хотя перемешивание карти занимает больше времени, чем вытаскивание случайной карты (какбыло сделано при определении вероятности выигрыша в прошлой статье),более наглядно и удобно это демонстрируется при сдаче карт. Еслипроизводительности будет не хватать, то можно будет оптимизироватьэтот алгоритм.Еще можно свернуть код проведения игры в цикл, поскольку сейчас тамимеют место повторяющиеся участки с проверками и проведение кругаторговли. Однако, их всего четыре, они не занимают много места, и присворачивании в цикл нужно будет изменять алгоритм раздачи карт настол, поэтому пока оставим все как есть.В исходном коде часто встречается такая конструкция:x = (x + 1) % 9;Эта массивная конструкция представляет собой всего лишь циклическоеувеличение значения переменной x от 0 до 8-9. В данном случаеоно означает количество игроков за столом.TRADEВходной параметр в методе, которой проводит круг торговли109

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!