Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Revolviendo vectores

El otro día estaba tratando de hacer un programa que te permite jugar 21 (Blackjack), aunque no fuera de forma "completa", más bien como un ejercicio del uso de vectores, clases y objetos en C++.

Uno de los problemas era revolver una baraja. Como ya he hablado de cómo generar números aleatorios en C++, pensé una forma de generar números al azar e irlos cambiando con los que están, pero supuse que debía haber una mejor manera, algo más sencillo. Y sabía que en Java había forma de trabajar con ArrayLists, así que me puse a buscar cómo se puede hacer en C++. Y sí, hay una función que me puede "mezclar" al azar (o pseudoazar, como hemos dicho cuando hablé de números aleatorios) y aquí te explico cómo usarlo con un ejemplo.

El método en cuestión es el random_shuffle y para poderlo usar, tienes que incluir la librería algorithm>. Y necesita el uso de números aleatorios (si no sabes cómo funcionan, lee primero este post de mi blog), así que incluimos la librería para usar el srand y el rand, y la librería para obtener la hora del sistema para inicializar el generador de números pseudoaleatorios. Así que la pura parte de la declaración, quedaría así:

Después de esto, en el main() antes en hacer cualquier otra cosa, inicializo el generador de números aleatorios con el reloj del sistema, como se ve aquí:

Aquí viene una parte que va en el main() y también estoy mostrando el método de la clase Baraja (al rato pongo todo el código) que barajea (revuelve) los elementos del vector. También agrego una función, llamado myrandom, que no pertenece a ninguna clase, que genera los números aleatorios para ser usados en el método random_shuffle.

Aquí pongo el código completo. El archivo tiene una clase Carta que guarda el palo (corazones, trébol, etc.), el valor o rango (As, 2, 3, etc) y si está visible o no. Tiene un constructor que recibe dos cadenas (palo y rango) y métodos para voltear una carta, devolver los datos de una carta, saber si está visible o no y para devolver el valor (rango).

Luego tiene una clase Baraja que tiene un vector de objetos Carta, un constructor que inicializa el vector con todas las cartas de una baraja inglesa (para eso hay un par de arreglos para ayudar a inicializar) y métodos que te devuelve una carta (y lo quita del vector), para barajear la carta (lo que mostré en el código anterior), para imprimir todas las cartas en la baraja, y una que nos indica si la baraja está vacía o no.

También hay una clase Jugador que tiene las manos de cada jugador: guarda un vector de tipo Carta y una cadena con el nombre del jugador. No tiene constructor y tiene métodos para Agregar una carta al vector del jugador, devolver el número de cartas que tiene, mostrar sus cartas, asignar un nombre al jugador y para mostrar el nombre del jugador.

El main() declara una Baraja y un vector de Jugador, inicializa la baraja (con un código que mostré con anterioridad), pide número de jugadores, pide las cartas para cada jugador, revisa si alguien ganó justo después de repartir las cartas (poco probable, pero hay que revisar) e inicia un ciclo donde muestra cartas del jugador y le pregunta si desea otra carta, revisa si perdió o si ganó. Si nadie ha ganado, al final determina el ganador (el que más cera esté de sumar 21).

Con esa explicación, ahora sí les dejo el código completo del programa, esperando que les sea de utilidad. ¡Saludos!




This post first appeared on El Tony Y Sus Ondas..., please read the originial post: here

Share the post

Revolviendo vectores

×

Subscribe to El Tony Y Sus Ondas...

Get updates delivered right to your inbox!

Thank you for your subscription

×