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/
Alguna vez ya hice un reto parecido con un video de youtube, pero esta vez lo hice todo yo 😁😁 Es mucho código por lo que lo pueden revisar en la carpeta de BlackJack de mi repositorio https://github.com/Edmundo0994/PlatziCodeChallenge
Si quieres probarlo ingresa a https://blackjackchallenge.imfast.io/
Solamente no hice el primer punto :v creo que no es como muy importante, y la verdad es por que no me acorde 😂😂
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()
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()```