Clase Numero 13 – Clases, objetos, Metodos

Recursos

http://pensandocomoprogramador.blogspot.com/2012/07/c3-cartas-mazos-y-juegos-python.html

https://towardsdatascience.com/lets-play-blackjack-with-python-913ec66c732f

https://medium.com/@samarakoon.gayan/a-game-of-black-jack-on-python-as-a-fun-exercise-3cd54efb9d83

Ejercicio mezclar cartas usando modulos ITERTOOLS y RANDOM

"""
importo modulos
creo mazo
mezclo mazo
barajo 5 cartas
"""
# importo modulos
import itertools as IT, random as R

# crear mazo de cartas y mostrarlo - ordenado
mazo = list (IT.product(range(1, 14) , ["♥", "♦", "♣", "♠"]))

print ("Mazo Ordenado \n \n" , mazo)

print ("\n \n")

# mezclar las cartas y mostrarlo - ,mezclado
R.shuffle(mazo)
print ("Mazo Mezclado \n\n" , mazo)

print ("\n \n")

# sacar 5 cartas
print ("Sacaste estas 5 cartas: \n")
for i in range (5):
    print (mazo[i] [0], "de" , mazo [i] [1])
    
    

Resultado

>>> %Run mezlar_cartas.py
Mazo Ordenado 
 
 [(1, '♥'), (1, '♦'), (1, '♣'), (1, '♠'), (2, '♥'), (2, '♦'), (2, '♣'), (2, '♠'), (3, '♥'), (3, '♦'), (3, '♣'), (3, '♠'), (4, '♥'), (4, '♦'), (4, '♣'), (4, '♠'), (5, '♥'), (5, '♦'), (5, '♣'), (5, '♠'), (6, '♥'), (6, '♦'), (6, '♣'), (6, '♠'), (7, '♥'), (7, '♦'), (7, '♣'), (7, '♠'), (8, '♥'), (8, '♦'), (8, '♣'), (8, '♠'), (9, '♥'), (9, '♦'), (9, '♣'), (9, '♠'), (10, '♥'), (10, '♦'), (10, '♣'), (10, '♠'), (11, '♥'), (11, '♦'), (11, '♣'), (11, '♠'), (12, '♥'), (12, '♦'), (12, '♣'), (12, '♠'), (13, '♥'), (13, '♦'), (13, '♣'), (13, '♠')]

 

Mazo Mezclado 

 [(7, '♦'), (13, '♥'), (4, '♦'), (6, '♥'), (12, '♠'), (2, '♣'), (6, '♠'), (13, '♦'), (8, '♦'), (1, '♣'), (11, '♥'), (7, '♣'), (11, '♦'), (10, '♠'), (4, '♥'), (7, '♥'), (9, '♣'), (5, '♦'), (5, '♣'), (4, '♠'), (12, '♥'), (3, '♣'), (11, '♠'), (5, '♠'), (1, '♥'), (8, '♣'), (1, '♦'), (6, '♣'), (3, '♦'), (5, '♥'), (9, '♠'), (8, '♠'), (10, '♥'), (1, '♠'), (7, '♠'), (8, '♥'), (12, '♣'), (4, '♣'), (9, '♥'), (3, '♥'), (6, '♦'), (2, '♥'), (12, '♦'), (10, '♦'), (13, '♠'), (11, '♣'), (10, '♣'), (13, '♣'), (3, '♠'), (2, '♦'), (2, '♠'), (9, '♦')]

 

Sacaste estas 5 cartas: 

7 de ♦
13 de ♥
4 de ♦
6 de ♥
12 de ♠
>>> 

Ejercicio Black jack con funciones

"""
juego de black jack
"""


import random as R
class Carta:
    def __init__(self,numero,palo):
        self.numero=numero
        self.palo=palo
    
    def elPalo(self):
        losPalos = ["","♥","♦","♣","♠"]
        return losPalos [self.palo]

    def elNumero(self):
        losNumeros = ["","A","2","3","4","5","6","7","8","9","10","J","Q","K"]
        return losNumeros[self.numero]
    
    def __str__(self):
        return "[" + self.elNumero() + " "+self.elPalo() + "]"


class Mazo:
    def __init__(self):
        self.lasCartas=[]
    
    def llenar(self):
        for mazo in range(0,10):
            for numero in range(1,14):
                for palo in range(1,5):
                    self.lasCartas.append(Carta(numero,palo)) 

    def __len__(self):
        return len(self.lasCartas)

    def to_list(self):
        return self.lasCartas


    def __str__(self):
        cad = ""
        for carta in self.lasCartas:
            cad += str(carta)+","
        return cad

    def sacar(self):
        return self.lasCartas.pop(0)
    
    def poner(self,carta):
        self.lasCartas.append(carta)

    def mezclar(self):
        R.shuffle(self.lasCartas)
    
    def mezclarr(self):

        for i in range(500):
            p = R.randint(0,len(self.lasCartas)-1)
            u = R.randint(0,len(self.lasCartas)-1)
            aux = self.lasCartas[p]
            self.lasCartas[p] = self.lasCartas[u]
            self.lasCartas[u] = aux
    def laSuma(self):
        sum = 0
        con = 0
        for car in self.lasCartas:
            if car.numero == 1:
                con += 1
            else:
                if car.numero < 10:
                    sum +=  car.numero
                else:
                    sum += 10
        
        while (con > 0) and (sum + 11 < 21):
            con -= 1
            sum += 11
        return sum + con #RENGO!!!!!
    def hayCartas(self):
        return len(self.lasCartas) > 0




class JugadorH:#HUMANO

    def __init__(self,fichas,nombre):
        self.nombre = nombre
        self.mano = Mazo()
        self.fichas = fichas

    def sePlanta(self):
        
        suma =  self.mano.laSuma() 
        if suma > 21:
            print(self.nombre,"  ",str(self.mano) , " ",suma," SE PASO!!!")    
            return True
        
        print(self.nombre,"  ",str(self.mano) , " ",suma)
        respuesta = input("SE PLANTA ? (S/N)").upper()
        if respuesta == 'S':
            return True
        return False

    def apuesta(self):
        pass

class JugadorC:#CROUPIER

    def __init__(self,nombre="SR. CROUPIER"):
        self.nombre = nombre
        self.mano = Mazo()

    def sePlanta(self):
        suma = self.mano.laSuma()

        if suma > 21:
            print(self.nombre,"  ",str(self.mano) , " ",suma," SE PASO!!!")    
            return True
        else:
            if suma >= 16:
                print(self.nombre,"  ",str(self.mano) , " ",suma," SE PLANTA!!!") 
                return True   
        return False

class JugadorB:#COMPUTADORA

    def __init__(self,fichas,nombre="COMPUTADORA"):
        self.nombre = nombre
        self.mano = Mazo()
        self.fichas= fichas

    def sePlanta(self):
        pass
    
    def apuesta(self):
        pass

class BlackJack:

    def __init__(self):
        self.croupier = JugadorC()
        self.losJugadores = []
        self.elMazo = Mazo()
        
    def agregarJugadorH(self,nombreJugador,fichas):
        jugador = JugadorH(fichas,nombreJugador)
        self.losJugadores.append(jugador)
    
    def agregarJugadorB(self,nombreJugador,fichas):
        self.losJugadores.append(JugadorB(fichas,nombreJugador))
    
    def hayJugadores(self):
        return len(self.losJugadores) > 0

    def repartirCartas(self):
        for jug in self.losJugadores:
            jug.mano.poner(self.elMazo.sacar())
        for jug in self.losJugadores:
            jug.mano.poner(self.elMazo.sacar())
        self.croupier.mano.poner(self.elMazo.sacar())
        self.croupier.mano.poner(self.elMazo.sacar())

    def descartar(self):
        for jug in self.losJugadores:
            while jug.mano.hayCartas():
                self.elMazo.poner(jug.mano.sacar())
        
        while self.croupier.mano.hayCartas():
                self.elMazo.poner(self.croupier.mano.sacar())

    def jugar(self):
        self.elMazo.llenar()
        self.elMazo.mezclar()
        while self.hayJugadores():
            print("REPARTIENDO CARTAS")
            self.repartirCartas()
            for jug in self.losJugadores:
                print(jug.nombre,"  ",str(jug.mano) , " " ,jug.mano.laSuma())
            print(self.croupier.nombre,"  ",str(self.croupier.mano)," ",self.croupier.mano.laSuma())
            for jug in self.losJugadores:
                while not jug.sePlanta():
                    jug.mano.poner(self.elMazo.sacar())
            while not self.croupier.sePlanta():
                self.croupier.mano.poner(self.elMazo.sacar())

            self.descartar()

        





def main():
    """
    m = Mazo()
    m.llenar()
    print(str(m))
    m.mezclar()
    print(str(m))
    """
    juego = BlackJack()
    juego.agregarJugadorH("juan",100)
    juego.agregarJugadorH("pinchame",33)
    juego.agregarJugadorH("pepe",33)
    juego.agregarJugadorH("raul",33)
    juego.jugar()


main()

Resultado

>>> %Run cartas_black_jack.py
REPARTIENDO CARTAS
juan    [5 ♦],[10 ♣],   15
pinchame    [Q ♣],[9 ♣],   19
pepe    [8 ♥],[2 ♣],   10
raul    [9 ♣],[5 ♠],   14
SR. CROUPIER    [7 ♦],[A ♠],   18
juan    [5 ♦],[10 ♣],   15
SE PLANTA ? (S/N)n
juan    [5 ♦],[10 ♣],[K ♦],   25  SE PASO!!!
pinchame    [Q ♣],[9 ♣],   19
SE PLANTA ? (S/N)s
pepe    [8 ♥],[2 ♣],   10
SE PLANTA ? (S/N)n
pepe    [8 ♥],[2 ♣],[2 ♣],   12
SE PLANTA ? (S/N)n
pepe    [8 ♥],[2 ♣],[2 ♣],[8 ♣],   20
SE PLANTA ? (S/N)s
raul    [9 ♣],[5 ♠],   14
SE PLANTA ? (S/N)n
raul    [9 ♣],[5 ♠],[7 

Leave a Reply

Your email address will not be published. Required fields are marked *