12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CODINGАверин «Tim» Евгений timreset@mail.ru, javatalks.ruÑÈÌÓËßÖÈßÏÎÊÅÐÍÎÃÎ ÎÐÃÀÇÌÀÂêóðèâàåì â êîäèíã ïîêåðíûõ áîòîâ:ñîçäàåì ñèìóëÿòîð òðåíèðîâêè ýòîé ñòàòüå ìû ðàññìîòðèì ñîçäàíèå ñèìóëÿòîðà ïîêåðà. Òàê êàêïðàâèëà ïîêåðà íåìíîãî îòëè÷àþòñÿ ìåæäó ñîáîé, òî â êà÷åñòâåïðàâèë äëÿ ñèìóëÿöèè ìû âîçüìåì ïðàâèëà Holdem No Limit Pokerñ ñàéòà PokerStars. Íà îñíîâå ñèìóëÿòîðà ìû ñäåëàåì äâå èãðû — èãðàêîìïüþòåðà ñ æèâûì èãðîêîì è ïðîñòî èãðà êîìïüþòåðíûõ èãðîêîâìåæäó ñîáîé. Ïåðâàÿ èãðà íàì ïîíàäîáèòñÿ äëÿ òåñòèðîâàíèÿ.ÈÍÒÅÐÔÅÉÑÛСоздадим два интерфейса — Ilogic и IEventSimulation. Первый интерфейснужен для того, чтобы унифицировать вызов различных логик.То есть у нас имеется один интерфейс, который реализует различныелогики, и нам не нужно беспокоиться о хранении различных логик— мы храним только массив интерфейсов ILogic и вызываем методэтого интерфейса. У данного интерфейса есть только один метод —int getAnswer(float p, float totalBet, float curBet,float pot, int betting, int minRaise), он возвращает 0,когда нужно сбросить (fold), 1 при принятии ставки (call) и 2 приувеличении ставки (raise). Немного упростим модель — при рейзене будем выставлять значение ставки, а просто увеличим ставку наминимально возможное значение.Рассмотрим параметры этого метода: p — вероятность выигрыша (пронее читай в статье «Натягиваем сетевые poker room’ы» в июньском ][ или на диске к этому номеру), totalBet — все поставленные игрокомденьги за игру, curBet — текущее количество денег, которое нужнопоставить, pot — размер банка, betting — номер круга торговли,minRaise — минимальное количество денег, на которое нужно повыситьставку при рейзе. Второй интерфейс нужен для создания различныхоболочек для симулятора. В нашем случае будет две оболочки — дляигры компьютерных игроков с человеком и для игры компьютерныхигроков между собой. В интерфейсе IEventSimulation определены методы,которые позволяют сообщать оболочке обо всех изменениях в игре.Перечислим эти методы:changeBoardCard(int[] board) — метод вызывается приизменении карт на столе, changePot(int pot) вызываетсяпри изменении размера банка, changeMoneyOfPlayers(int[]money)вызывается при изменении количества денег игроков,postDillerMessage(String message)вызывается приотправке сообщений дилера, changeDillerPosition(intposOfDealer)вызывается при изменении позиции дилера,changePlayerStatus(int player, int status, int[] hand)вызывается при изменении статуса игрока.ÑÕÅÌÀ ÑÈÌÓËßÒÎÐÀКак известно, правила покера неоднородны и склонны друг от другаотличаться. Например, в круге торговли. Так, по правилам с сайтаPokerStars после первого круга торговли первым ходит активный игрокслева от дилера, а по другим правилам первым ходит игрок слева отигрока, который ходил первым на прошлом круге торговли. В симуляторереализованы правила Holdem Poker с сайта PokerStars. По размеруставок будем делать не NoLimit и не Limit, а кое-что свое — ограничимразмер рейза текущей ставкой.Всего логик семь: AggressiveLogic (разыгрывает даже слабые руки),CautiousLogic (разыгрывает только сильные руки), RationalLogic (действуетрационально), RaiseLogic (все время повышает ставку), CallLogic(все время поддерживает ставку), FoldLogic (все время сбрасывает),RandomLogic (случайно ходит).AggressiveLogic, CautiousLogic и RationalLogic используют в принятии108 XÀÊÅÐ 08 /139/ 10

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

Saved successfully!

Ooh no, something went wrong!