public Action act() { reset(); for (LegalAction legalAction : legalActions) { if (legalAction.getType().equalsIgnoreCase("RAISE")) { raiseAction = legalAction; canRaise = true; } else if (legalAction.getType().equalsIgnoreCase("BET")) { betAction = legalAction; canBet = true; } else if (legalAction.getType().equalsIgnoreCase("CHECK")) { canCheck = true; } else if (legalAction.getType().equalsIgnoreCase("CALL")) { canCall = true; } else if (legalAction.getType().equalsIgnoreCase("DISCARD")) { canDiscard = true; if (chosenDiscardCard == null) chooseDiscardCard(); return discardCard(); } } for (PerformedAction performedAction : lastActions) { if (performedAction.getType().equalsIgnoreCase("DEAL")) { ec.setBoard(board); if (performedAction.getStreet().equalsIgnoreCase("FLOP")) { chooseDiscardCard(); // this will also update equity } else { equity = ec.calculateTotalEquity(); } } else if (performedAction.getType().equalsIgnoreCase("POST") && performedAction.getActor().equalsIgnoreCase(maj.myName)) { equity = ec.calculateTotalEquity(); } } maj.update(lastActions); dory.update(); if (board[2] == null) return actPreFlop(); else if (board[3] == null) { return actPostFlop(); } else if (board[4] == null) return actPostTurn(); else return actPostRiver(); }
private void chooseDiscardCard() { // assumes you have a three card hand EquityCalculator ec0 = new EquityCalculator(new Card[] {hand[1], hand[2]}, board); EquityCalculator ec1 = new EquityCalculator(new Card[] {hand[0], hand[2]}, board); EquityCalculator ec2 = new EquityCalculator(new Card[] {hand[0], hand[1]}, board); double equity0 = ec0.calculateTotalEquity(); double equity1 = ec1.calculateTotalEquity(); double equity2 = ec2.calculateTotalEquity(); equity = Math.max(Math.max(equity0, equity1), equity2); if (equity0 > equity1) { if (equity0 > equity2) { ec = ec0; chosenDiscardCard = hand[0]; } else { ec = ec2; chosenDiscardCard = hand[2]; } } else { if (equity1 > equity2) { ec = ec1; chosenDiscardCard = hand[1]; } else { chosenDiscardCard = hand[2]; ec = ec2; } } }