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== maxBet)) {continue;}if (moneyOfPlayers[curPlayer] == 0) {continue;}Схема симулятораÌåòîä äëÿ îïðåäåëåíèÿ õîäà ïîëüçîâàòåëÿpublic int getAction(float p, float totalBet, floatcurBet, float pot, int betting, int minRaise) {if (curBet == 0) {btnCall.setText("Check");} else {btnCall.setText("Call " +String.valueOf(curBet));}btnCall.setVisible(true);btnFold.setVisible(true);btnRiase.setVisible(true);btnRiase.setText("Raise " +String.valueOf(curBet + minRaise));frame.repaint();action = -1;while (action == -1) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}frame.repaint();}btnCall.setVisible(false);btnFold.setVisible(false);btnRiase.setVisible(false);frame.repaint();return action;}— номер круга торговли. Это 1 (пре-флоп), 2 (флоп), 3 (терн), 4(ривер). В начале метода проверяем на первый круг торговли,и если да, то находим позиции малого и большого блайндови кладем деньги в банк. Далее происходит сам круг торговли.Непосредственно перед ходом каждого игрока проверяются следующиепараметры: больше ли одного игрока в игре, может литекущий игрок играть. При повторном круге торговли проверяется,не равна ли ставка текущего игрока максимальной ставке (тоесть нужно ли игроку еще вкладывать деньги в банк), и есть ли уигрока вообще деньги.Проверки перед началом торговли// óâåëè÷èâàåì íîìåð òåêóùåãî èãðîêàcurPlayer = (curPlayer + 1) % 9;if (getSinglePlayer() != -1) {break;}if (stateOfPlayers[curPlayer] == false) {continue;}if ((repeatTrade == true) && (betOfPlayers[curPlayer]После этих проверок можно переходить непосредственно к определениютекущего хода игрока. Для этого вычисляем вероятность выигрышаигрока на основе его карт, карт на столе и количества игроков ивызываем метод интерфейса ILogic для определения хода игрока:Вызов методов расчета вероятности и принятия решенийfloat p=logic.getProbabilityOfWin(handOfPlayers[curPlayer], board,getActivePlayers());int action=playersList.get(curPlayer).getAction(p,totalBet[curPlayer] + betOfPlayers[curPlayer],maxBet-betOfPlayers[curPlayer],pot,betting,maxBet==0?bigBlind:maxBet);Метод расчета вероятности вызывается со следующими параметрами:текущие карты игрока, карты на столе и количество активных (тех, ктоне сбросил карты) игроков в игре.Первый параметр в методе getAction — вероятность выигрыша;второй — сумма всех поставленных денег за прошлые круги торговлии поставленных денег на текущем круге торговли; третийпараметр — то количество денег, которое нужно поставить игроку,чтобы уравнять ставки, то есть разность между максимальнойставкой на текущем круге торговли и текущей ставкой игрока;четвертый параметр — размер банка; пятый — номер круга торговли,шестой — минимальное количество денег, которое нужнопоставить при рейзе. Здесь мы приняли его как значение максимальнойставки за текущий круг торговли или, если эта ставкаравна нулю, размер большого блайнда. После получения действияот игрока (переменная action) выполняем это действие. Алгоритмтаков: если игрок сделал fold, то делаем его неактивным; еслиcall, то сначала проверяем, может ли он поставить деньги, илисразу идет all-in, а потом выполняем требуемое действие, то естьили ставим часть денег, или ставим все, что есть; если raise, тосначала уравниваем ставку игрока до максимальной ставки, апотом ставим оставшуюся часть денег, требуемую для рейза. Вобщем случае при ставке следует проверять, есть ли требуемаясумма на счету у игрока, если нет, то ставим все оставшиеся деньги(all-in). После проведения ставок всех игроков проверяем, всели игроки поставили одинаковое количество денег. Если кто-то непоставил, и у него при этом еще есть деньги, проводим повторныйкруг торговли.ÑÈÌÓËßÖÈßПеред началом игры нужно добавить игроков. Это делается следующимобразом:Добавление игроков для игры в HoldemFormList playersList=new ArrayList();playersList.add(frame);playersList.add(new FoldLogic());playersList.add(new CautiousLogic());playersList.add(new CallLogic());playersList.add(new RationalLogic());playersList.add(new AggressiveLogic());playersList.add(new CautiousLogic());playersList.add(new AggressiveLogic());playersList.add(new RaiseLogic());Во второй строчке мы добавляем в качестве игрока текущую форму, этоозначает, что все методы принятия решений для первого игрока будут110 XÀÊÅÐ 08 /139/ 10

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

Saved successfully!

Ooh no, something went wrong!