Exemplo n.º 1
0
class Mesa(object):
    '''
    Manejadora del juego
    
    the person with the dealer button posts the small blind, 
    while his/her opponent places the big blind.
    The dealer acts first before the flop. After the flop, 
    the dealer acts last and continues to do so for the remainder of the hand.
    '''


    def __init__(self, ciega, jugadores):
        '''
        Constructor
        p es un número entre 0 y 1 para determinar la estrategia de juego del bot
        '''
        self.ciega = ciega
        self.mazo = Mazo()
        self.bote = 0
        self.jugadores = jugadores
        self.dealer = 0 #posicion en la lista jugaores
        self.comunitarias = [None, None, None, None, None]
        self.ronda_actual = None
        self.nro_jugadores = 2
        self.jugador_actual = 0
        self.allin = False
        
    def juego(self):
        '''
        Devuelve el resultado de juego en una lista
        la primera posición es True si el juego continúa
        la segunda es la posición en la lista de jugadores de la mesa
        del jugador que ganó esta iteración del juego y la 
        tercera posición indica el nombre de la jugada 
        ganadora.
        '''         
            
        for tipo in range(1,5): #iterador de rondas
            self.ronda(tipo)
            
    
    
    def ronda(self, tipo_ronda):
        if tipo_ronda == 1: #pre-flop, juega primero el dealer, tiene la ciega chica
            self.poner_ciegas()
            self.croupier(tipo_ronda) #acciones del croupier
            
            for nro_apuesta in range(0, 4):
                for i in range(0, self.nro_jugadores):
                    if not self.allin:
                        ronda = Ronda(tipo_ronda, nro_apuesta, self.ciega, self.bote)
                        nro_jugador = self.siguiente_jugador()
                        jugada = self.jugadores[nro_jugador].obtener_jugada(ronda, self.comunitarias)
                        self.actualizar_mesa(jugada, nro_apuesta, self.jugadores[nro_jugador].dealer)
                '''
                if not self.allin:
                    ronda = Ronda(tipo_ronda, nro_apuesta, self.ciega, self.bote)
                    jugada = self.jugadores[self.dealer].obtener_jugada(ronda, self.comunitarias)
                    self.actualizar_mesa(jugada, nro_apuesta, self.jugadores[self.dealer])
                    if not self.allin:
                        jugada = self.jugadores[self.obtener_no_dealer()].obtener_jugada(ronda, self.comunitarias)
                        self.actualizar_mesa(jugada, nro_apuesta, self.jugadores[self.dealer])
                '''
        
        elif tipo_ronda == 2:#flop, juega primero el que no es dealer.

        elif tipo_ronda == 3:#turn, juega primero el que no es dealer.
            self.croupier(tipo_ronda)
            
        elif tipo_ronda == 4:#river, juega primero el que no es dealer.
            self.croupier(tipo_ronda) 
    
    def actualizar_mesa(self, jugada, nro_apuesta, dealer):
        if jugada == "apostar":
            
    def siguiente_jugador(self):
        retorno = self.jugador_actual
        if self.jugador_actual == self.dealer:
            self.jugador_actual =  self.obtener_no_dealer()
        else:
            self.jugador_actual = self.dealer
        return retorno
          
    def poner_ciegas(self):
        self.bote = 0
        #el dealer pone la ciega chica.
        if self.jugadores[self.dealer].verficar_allin():
            self.establecer_allin(self.dealer)
        else:
            self.jugadores[self.dealer].fichas -= self.ciega / 2
        #el otro pone la ciega grande.
        if self.jugadores[self.obtener_no_dealer()].verficar_allin():
            self.establecer_allin(self.obtener_no_dealer())
        else:
            self.jugadores[self.obtener_no_dealer()].fichas -= self.ciega
 
    def establecer_allin(self, jugador):
        self.allin = True   
        self.bote += self.jugadores[jugador].fichas
        self.jugadores[jugador].fichas = 0
            
    def establecer_siguiente_dealer(self):
        if self.dealer == 0:
            self.dealer = 1
        else:
            self.dealer = 0
    
    def obtener_no_dealer(self):
        if self.dealer == 0:
            return 1
        else:
            return 0  
                
    def croupier(self, tipo_ronda):
        if tipo_ronda == 1: #pre-flop, repartir dos cartas a cada jugador
            self.mazo.mezclar()
            for i in range(0, self.nro_jugadores):
                for jug in self.jugadores:
                    self.jugadores[jug].mano[i] = self.mazo.obtener_siguiente()
        elif tipo_ronda == 2:#flop
            for i in range(0, 3):
                self.comunitarias[i] = self.mazo.obtener_siguiente()
                elif tipo_ronda == 3:#turn
            self.comunitarias[3] = self.mazo.obtener_siguiente()