1

#PlatziCodingChallenge - Blackjack

Este es un juego de cartas muy popular en el que consiste tomar cartas de una baraja hasta sumar 21 puntos o acercarse lo más posible. Así que crearás un programa donde jugarás contra la computadora tomando las siguientes consideraciones:

  • Cada jugar inicia con 2 cartas
  • Cada carta tiene un valor del 1 al 10.
  • Las cartas Jack, Queen, King valen 10 puntos cada una. Y su jerarquía va de menor a mayor respectivamente.
  • El As puede valer 1 u 11 según sea conveniente. Es decir que al tener un As en mano se pueden tomar más cartas si el jugador lo decide.
  • Un As y una carta con valor de 10 puntos equivale a victoria.
  • El jugador decide si tomar una carta adicional o no. En caso de no tomar alguna otra se comparan las manos.
  • En caso de empate se compara jerarquía de las cartas.
  • Pierde el jugador que tenga más de 21 puntos en mano inmediatamente.

https://platzi.com/blog/como-aprender-a-programar-desde-cero-platzi/

Escribe tu comentario
+ 2
Ordenar por:
1
19943Puntos

Blackjack en JavaScript:

// Blackjack en JavaScriptconst VALORES = {
  'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, 'J': 10, 'Q': 10, 'K': 10
}

class Carta {
  constructor(tipo, numero) {
    this.tipo = tipo
    this.numero = numero
    this.valor = VALORES[this.numero]
  }
  texto() {
    return`${this.numero} de ${this.tipo}`
  }
}

class Blackjack {
  constructor() {
    /* Creamos y mezclamos la baraja */this.nuevaBaraja()
    this.mezclarBaraja()
    /* Cada jugador empieza con 2 cartas */this.cartasJugador = [this.baraja.shift(), this.baraja.shift()]
    this.cartasComputadora = [this.baraja.shift(), this.baraja.shift()]
    do {
      /* Imprimiendo cartas del jugador */
      alert(`Jugador: ${this.imprimirCartas(this.cartasJugador)}`)
      /* Calculando puntos del jugador */let puntosJugador = this.obtenerPuntos(this.cartasJugador)
      if (puntosJugador === 21) {
        return alert('Usted ganó el juego')
      } elseif (puntosJugador > 21) {
        return alert('Usted perdió el juego')
      } else {
        /* Calculando puntos de la computadora */let puntosComputadora = this.obtenerPuntos(this.cartasComputadora)
        if (puntosComputadora === 21) {
          return alert(`Computadora: ${this.imprimirCartas(this.cartasComputadora)}\nLa computadora consiguió 21. Usted perdió el juego`)
        } elseif (puntosComputadora > 21) {
          return alert(`Computadora: ${this.imprimirCartas(this.cartasComputadora)}\nLa computadora pasó los 21. Usted ganó el juego`)
        } else {
          /* Preguntando si se va a tomar otra carta */let otraCarta = prompt('¿Quiere tomar otra carta?(S/n)') === 'S'if (otraCarta) {
            this.cartasJugador.push(this.baraja.shift())
            this.cartasComputadora.push(this.baraja.shift())
          } else {
            /* Calculando puntos de ambos para ver quien ganó */let puntosJugador = this.obtenerPuntos(this.cartasJugador)
            let puntosComputadora = this.obtenerPuntos(this.cartasComputadora)
            if (puntosJugador < puntosComputadora) {
              return alert(`Jugador: ${this.imprimirCartas(this.cartasJugador)}\nComputadora: ${this.imprimirCartas(this.cartasComputadora)}\nUsted perdió el juego`)
            } elseif (puntosJugador > puntosComputadora) {
              return alert(`Jugador: ${this.imprimirCartas(this.cartasJugador)}\nComputadora: ${this.imprimirCartas(this.cartasComputadora)}\nUsted ganó el juego`)
            } else {
              // verificar jerarquia
              alert(`Mismos puntos. Se verifica la jerarquia`)
              return alert(`Jugador: ${this.imprimirCartas(this.cartasJugador)}\nComputadora: ${this.imprimirCartas(this.cartasComputadora)}\n${this.verificarJerarquia()}`)
            }
          }
        }
      }
    } while (true);
  }
  nuevaBaraja() {
    let baraja = newArray()
    let tipos = ['corazones', 'espadas', 'treboles', 'dimantes']
    tipos.forEach(tipo => {
      baraja.push(new Carta(tipo, 'A'))
      for (let i = 2; i <= 10; i++) {
        baraja.push(new Carta(tipo, `${i}`))
      }
      baraja.push(new Carta(tipo, 'J'))
      baraja.push(new Carta(tipo, 'Q'))
      baraja.push(new Carta(tipo, 'K'))
    })
    this.baraja = baraja
  }
  mezclarBaraja() {
    let currentIndex = this.baraja.length, temporaryValue, randomIndex
    while (0 !== currentIndex) {
      randomIndex = Math.floor(Math.random() * currentIndex)
      currentIndex -= 1
      temporaryValue = this.baraja[currentIndex]
      this.baraja[currentIndex] = this.baraja[randomIndex]
      this.baraja[randomIndex] = temporaryValue
    }
  }
  imprimirCartas(cartas) {
    return cartas.map(carta => carta.texto())
  }
  obtenerPuntos(cartas) {
    let puntos = 0
    cartas = cartas.sort((a, b) => b.valor - a.valor)
    /* Cuantas cartas A se tiene */let cartasA = this.cantidadCarta(cartas, 'A')
    /* Sumando puntos */
    cartas.forEach(carta => {
      if (carta.numero === 'A' && cartasA === 1 && puntos === 10) {
        puntos += 11
      } else {
        puntos += carta.valor
      }
    })
    return puntos
  }
  cantidadCarta(cartas, numero) {
    let cantidad = 0
    cartas.forEach(carta => {
      if (carta.numero === numero) {
        cantidad++
      }
    })
    return cantidad
  }
  verificarJerarquia(numero = 'K') {
    let cartasXJugador = this.cantidadCarta(this.cartasJugador, numero)
    let cartasXComputadora = this.cantidadCarta(this.cartasComputadora, numero)
    if (cartasXJugador > cartasXComputadora) {
      return'Usted ganó el juego'
    } elseif (cartasXJugador < cartasXComputadora) {
      return'Usted perdió el juego'
    } else {
      switch (numero) {
        case'K': returnthis.verificarJerarquia('Q')
        case'Q': returnthis.verificarJerarquia('J')
        default: return'Empate'
      }
    }
  }
}

const juego = new Blackjack()
1

En Python 😃 Falta la prioridad de J,Q,K en cuanto esté lo corrigo de momento cumple con las demás condiciones:

import random
mensaje='''Este es un juego de cartas muy popular en el que consiste tomar
cartas de una baraja hasta sumar 21 puntos o acercarse lo más posible:
-Cada jugar inicia con 2 cartas
-Cada carta tiene un valor del 1 al 10.
-Las cartas Jack, Queen, King valen 10 puntos cada una.
 Y su jerarquía va de menor a mayor respectivamente.
-El As puede valer 1 u 11 según sea conveniente. Es decir que al tener un As
 en mano se pueden tomar más cartas si el jugador lo decide.
-Un As y una carta con valor de 10 puntos equivale a victoria.
-El jugador decide si tomar una carta adicional o no. En caso de no
 tomar alguna otra se comparan las manos.
-En caso de empate se compara jerarquía de las cartas.
-Pierde el jugador que tenga más de 21 puntos en mano inmediatamente. '''
print(mensaje)
baraja=['A','2','3','4','5','6','7','8','9','J','Q','K',]
mano1=[]
mano2=[]
sacar='Y'
cont=1defmain():
    elegido1=random.choice(baraja)
    mano1.append(elegido1)
    elegido1=random.choice(baraja)
    mano1.append(elegido1)
    print(mano1)
    jug2(mano1,mano2)

defjug2(mano1,mano2):global cont
    elegido1=random.choice(baraja)
    mano2.append(elegido1)
    cont=cont+1if cont==2:
        jug2(mano1,mano2)
    else:
        print(mano2)
        pregunta(mano1,mano2)


defpregunta(mano1,mano2):
    sacar=input('Quieres otra carta a tu baraja? Y/N: ')
    if sacar=='Y':
        jug2(mano1,mano2)
    else:
        print(mano2)
        ganador(mano1,mano2)

defganador(mano1,mano2):
    diccionario1={'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'J':10,'Q':10,'K':10}
    diccionario2={'A':1,'A':11}
    sum1=0
    sum2=0
    cont=0
    cont2=0for x in mano1:
        if x=='A':
            cont=cont+1if cont ==2:
                sum1=sum1+1else:
                sum1=sum1+11else:
            sum1=sum1+diccionario1[x]
    print(sum1)

    for y in mano2:
        if y=='A':
            cont2=cont2+1if cont2==2:
                sum2=sum2+1elif sum2>21:
                sum2=sum2+1else:
                sum2=sum2+11if sum2>21:
                    sum2=sum2-10else:
                    passelif cont2==1and sum2>21:
            sum2=sum2-10else:
            sum2=sum2+diccionario1[y]
            if sum2>21and cont ==1:
                sum2=sum2-10else:
                pass
    print(sum2)

    if sum1>sum2:
        print(f'El jugador CPU es el ganador por que {sum1} es mayor a tu mano {sum2}')
    elif sum1<sum2  and sum2<=21:
        print(f'Tu eres el ganador por que {sum2} es mayor a la mano de CPU {sum1}')
    elif sum2>21:
        print(f'Perdiste tu mano {sum2} es mayor a 21')
    else:
        passif __name__ == '__main__':
    main()```