Example #1
0
def parser(string):
    global state, leftOp, rightOp, leftPlayerIn, rightPlayerIn, minBet, bluffer, averageWinPreFlop, averageWinPostFlop, averageLossPreFlop, opponents
    global numHands, bank, leftBank, rightBank, minimumRaise, canCheck, STACK, runningPot, newDealPot, averageLossPostFlop, smallPotPlayerLeft, newLeft, newRight
    global bigBlind, smallBlind, timeBank, position, hand, handID, stackSize, previousBet, lastOpBet, numberOfWins,numberOfPostFlopWins, smallPotPlayerRight
    global boardCards, previousActions, legalActions, amtToCall, potSize, currentStakePreFlop, currentStakePostFlop, numberPostFlopHands, leftOpAverageWin
    global totalWinPreFlop, totalWinPostFlop, totalLossPreFlop, totalLossPostFlop, finalPreFlopPotSize, madePastFlop, bankRollState, rightOpAverageWin
    
    stringSplit = string.split(' ')
    
    if stringSplit[0] == 'NEWGAME':
        
        averageWinPreFlop = 0
        averageWinPostFlop = 0
        averageLossPreFlop = 0
        averageLossPostFlop = 0
        
        numberOfWins = 0
        numberOfPostFlopWins = 0
        bank = 0
        leftBank = 0
        rightBank = 0
        state = stringSplit[0]
        numHands = int(stringSplit[4])
        leftOp = stringSplit[2]
        rightOp = stringSplit[3]
        if leftOp not in opponents:
            opponents[leftOp] = [0,0]
            newLeft = True
        else:
            newLeft = False
        if rightOp not in opponents:
            opponents[rightOp] = [0,0]
            newRight = True
        else:
            newRight = False
        
        STACK = int(stringSplit[5])
        
        bigBlind = int(stringSplit[6])
        smallBlind = int(stringSplit[7])
        
        timeBank = float(stringSplit[8])
        leftOpAverageWin = 0
        rightOpAverageWin = 0
        numberPostFlopHands = 0
        totalWinPreFlop = 0
        totalWinPostFlop = 0
        totalLossPreFlop = 0
        totalLossPostFlop = 0
        bankRollState = 'NEUTRAL', 'DEATH TO CHEESEBOT!!!!', 0

        bluffer = Bluffer()
        
    elif stringSplit[0] == 'NEWHAND':
        madePastFlop = False
        state = stringSplit[0]
        previousBet = 0
        bluffer.nextRound()
        finalPreFlopPotSize = 0
        handID = int(stringSplit[1])
        position = int(stringSplit[2])
        hand = [stringSplit[3], stringSplit[4]]
        stackSize = STACK

        runningPot = 0
        #bank += int(stringSplit[5])
        #leftBank += int(stringSplit[6])
        #rightBank += int(stringSplit[7])
        
        timeBank = float(stringSplit[8])

        leftPlayerIn,rightPlayerIn = True,True

        #May need to fix this
        
        if position == 0:
            currentStakePreFlop = 0
            currentStakePostFlop = 0
            amtToCall = bigBlind
            previousBet = 0
        elif position == 1:
            currentStakePreFlop = smallBlind
            currentStakePostFlop = 0
            amtToCall = bigBlind - smallBlind
            previousBet = smallBlind
        else:
            currentStakePreFlop = bigBlind
            currentStakePostFlop = 0
            amtToCall = 0
            previousBet = bigBlind
            


    elif stringSplit[0] == 'GETACTION':
        minBet = 0
        #I believe this should be...
        minimumRaise = 0
        canCheck = False
        offset = 0
        state = stringSplit[0]
        potSize = int(stringSplit[1])
        if stringSplit[2] == '0':
            offset -= 1
            boardCards = []
        else:
            boardCards = stringSplit[3].split(',')
        if stringSplit[4 + offset] == '0':
            offset -= 1
            actions = []
        else:
            actions = stringSplit[5 + offset].split(',')
        if stringSplit[6 + offset] == '0':
            offset -= 1
            legal = []
        else:
            legal = stringSplit[7 + offset].split(',')
        timeBank = stringSplit[8 + offset]


        previousActions = [action.split(':') for action in actions]
        legalActions = [action.split(':') for action in legal]
        
        
        maxBet = 0

        hasDealt = False
        postDealBets = 0
        for action in previousActions:
            if action[0] == 'FOLD':
                if action[1] == leftOp:
                    leftPlayerIn = False
                elif action[1] == rightOp:
                    rightPlayerIn = False
                    
            elif action[0] == 'RAISE' or action[0] == 'BET':
                if int(action[2]) > maxBet:
                    maxBet = int(action[2])
                if hasDealt:
                    postDealBets += int(action[2])
            elif action[0] == 'CALL' and hasDealt:
                postDealBets *= 2
                
            elif action[0] == 'DEAL' and len(boardCards) != 0:
                amtToCall = 0
                stackSize -= previousBet
                previousBet = 0
                maxBet = 0
                hasDealt = True
                runningPot = potSize
                if len(boardCards) == 3:
                    madePastFlop = True
                    numberPostFlopHands += 1 


                    if previousActions[-1][0] == 'DEAL':
                        finalPreFlopPotSize = potSize
                    elif previousActions[-2][0] == 'DEAL':
                        if previousActions[-1][0] == 'CHECK' or previousActions[-1][0] == 'FOLD':
                            finalPreFlopPotSize = potSize
                        else:
                            finalPreFlopPotSize = potSize - int(previousActions[-1][-1])
                    elif previousActions[-3][0] == 'DEAL':
                        diff = 0
                        if previousActions[-2][0] == 'CHECK' or previousActions[-2][0] == 'FOLD':
                            if previousActions[-1][0] == 'CHECK' or previousActions[-1][0] == 'FOLD':
                                finalPreFlopPotSize = potSize
                            else:
                                finalPreFlopPotSize = potSize - int(previousActions[-1][-1])
                        else:
                            diff = int(previousActions[-2][-1])
                            if previousActions[-1][0] == 'CALL':
                                diff *= 2
                            elif previousActions[-1][0] == 'RAISE':
                                diff += int(previousActions[-1][-1])
                        finalPreFlopPotSize  = potSize - diff
                
        if previousActions[-1][0] == 'BET' or previousActions[-1][0] == 'RAISE':
            lastOpBet = int(previousActions[-1][2])
        elif previousActions[-1][0] == 'CALL' or previousActions[-1][0] == 'FOLD':
            if previousActions[-2][0] == 'BET' or previousActions[-2][0] == 'RAISE':
                lastOpBet = int(previousActions[-2][2])
            else:
                lastOpBet = 0
        else:
            lastOpBet = 0
            

        if maxBet != 0:           
            amtToCall = maxBet - previousBet
            
        for action in legalActions:
            if action[0] == 'RAISE':
                minimumRaise = int(action[1])
            elif action[0] == 'CHECK':
                canCheck = True
            elif action[0] == 'BET':
                minBet = int(action[1])

                    
        newDealPot = potSize - runningPot + postDealBets
                

    else:
        offset = 0
        state = stringSplit[0]
        if bank < int(stringSplit[1]):
            if madePastFlop:
                totalWinPreFlop += finalPreFlopPotSize - currentStakePreFlop
                totalWinPostFlop += (int(stringSplit[1]) - bank) - (finalPreFlopPotSize - currentStakePreFlop)
                numberOfWins += 1
                numberOfPostFlopWins += 1
            else:
                win = int(stringSplit[1]) - bank
                totalWinPreFlop += win
                numberOfWins += 1
        else:
            if madePastFlop:
                totalLossPreFlop += currentStakePreFlop
                totalLossPostFlop += currentStakePostFlop
            else:
                loss = bank - int(stringSplit[1])
                totalLossPreFlop += loss
        
        bank = int(stringSplit[1])
        leftBank = int(stringSplit[2])
        rightBank = int(stringSplit[3])
        if stringSplit[4] == '0':
            offset -= 1
            previousActions = []
        else:
            previousActions = stringSplit[5].split(',')
        timeBank = stringSplit[6 + offset]

        previousActions = [action.split(':') for action in previousActions]

        if numberOfWins == 0:
            averageWinPreFlop = 0
        else:
            averageWinPreFlop = float(totalWinPreFlop)/numberOfWins
        if numberOfPostFlopWins == 0:
            averageWinPostFlop = 0
        else:
            averageWinPostFlop = float(totalWinPostFlop)/numberOfPostFlopWins
        if handID == numberOfWins:
            averageLossPreFlop = 0
        else:
            averageLossPreFlop = float(totalLossPreFlop)/(handID - numberOfWins)
        if numberPostFlopHands == numberOfPostFlopWins:
            averageLossPostFlop = 0
        else:
            averageLossPostFlop = float(totalLossPostFlop)/(numberPostFlopHands - numberOfPostFlopWins)

        OpBank = max(leftBank,rightBank)
        if bank < OpBank + 1000 and bank > OpBank - 1000:
            bankRollState = 'NEUTRAL', 'DEATH TO CHEESEBOT!!!!', bank - OpBank
        elif bank >= OpBank + 1000:
            if totalWinPostFlop > totalWinPreFlop:
                bankRollState = 'AHEAD', 'POST', bank - OpBank
            else:
                bankRollState = 'AHEAD', 'PRE', bank - OpBank
        else:
            if totalLossPostFlop > totalLossPreFlop:
                bankRollState = 'BEHIND', 'POST', bank - OpBank
            else:
                bankRollState = 'BEHIND', 'PRE', bank - OpBank


        for action in previousActions:
            if action[0] == 'WIN':
                if action[1] == leftOp:
                    
                    opponents[leftOp][0] += 1
                    opponents[leftOp][1] += int(action[2])
                
                    leftOpAverageWin = float(opponents[leftOp][1])/opponents[leftOp][0]
                elif action[1] == rightOp:
                    
                    opponents[rightOp][0] += 1
                    opponents[rightOp][1] += int(action[2])
                    
                    rightOpAverageWin = float(opponents[rightOp][1])/opponents[rightOp][0]
        if (float(handID)/numHands > .12 and newLeft) or not newLeft:
            if leftOpAverageWin < 50:
                smallPotPlayerLeft = True
            else:
                smallPotPlayerLeft = False
                
        if (float(handID)/numHands > .12 and newRight) or not newRight:
            if rightOpAverageWin < 50:
                smallPotPlayerRight = True
            else:
                smallPotPlayerRight = False


        
        if bluffer.wait == 0:
            bluffer.reset()
Example #2
0
#Player State

leftPlayerIn = True
rightPlayerIn = True

newLeft = True
newRight = True

#Actions

previousActions = []
legalActions = []


#Bluffer
bluffer = Bluffer()


#Parser
################################################################################
def parser(string):
    global state, leftOp, rightOp, leftPlayerIn, rightPlayerIn, minBet, bluffer, averageWinPreFlop, averageWinPostFlop, averageLossPreFlop, opponents
    global numHands, bank, leftBank, rightBank, minimumRaise, canCheck, STACK, runningPot, newDealPot, averageLossPostFlop, smallPotPlayerLeft, newLeft, newRight
    global bigBlind, smallBlind, timeBank, position, hand, handID, stackSize, previousBet, lastOpBet, numberOfWins,numberOfPostFlopWins, smallPotPlayerRight
    global boardCards, previousActions, legalActions, amtToCall, potSize, currentStakePreFlop, currentStakePostFlop, numberPostFlopHands, leftOpAverageWin
    global totalWinPreFlop, totalWinPostFlop, totalLossPreFlop, totalLossPostFlop, finalPreFlopPotSize, madePastFlop, bankRollState, rightOpAverageWin
    
    stringSplit = string.split(' ')
    
    if stringSplit[0] == 'NEWGAME':