Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Antonio Villanueva Segura ensayo de BlackJack
- BlackJack o 21 se juega con 52 cartas sin comodines
- Consiste en sumar 21 pero sin pasarse
- cada jugador juega contra el crupier
- El Crupier tiene reglas fijas pide carta si su puntuacion suma 16 o menos y se planta con 17 o mas
- Las cartas de 2 al 9 toman este valor
- Las cartas 10,J,Q,K toman valor 10
- Es AS(1) puede valer 1 o 11 segun interese ...p.e As + una carta de valor 10 (10,J,Q,K)
- Se reciben dos cartas iniciales
- La modalidad más popular se juega con 6 barajas, un total de 312 cartas. 6x52
- Un dato importante a tener en cuenta es que en una baraja de 52 cartas hay 16 cartas que valen 10 puntos.
- Si se jugara con 6 barajas, esta cantidad es de 96 (16 x 6).
- */
- #include <iostream>
- #include <ctime>
- #include <vector>
- using namespace std;
- /**********************************************************************/
- //Inicializar numeros aleatorios
- void inicializa(){srand(time(NULL));}
- /**********************************************************************/
- //Genera una carta entre 1 y 10 incluido , el 1 puede valer 1 o 11 segun interese ;) son 13 pero las 4 ultimas valen 10
- int azar(){return 1+rand()%10;}
- /**********************************************************************/
- //Ha salido un AS su valor sera 1 o 11 segun sea lo + interesante sin pasarse de 21
- int as(int anterior ){
- //Analiza jugada mas interesante para tener 21 o menor ..
- //cout <<"AS ! ";//DEBUG COMENTARIO
- if ( (11+anterior) <=21){ //Analiza el AS como 11, considera menor o igual a 21 como interesante
- cout <<"Juega como 11"<<endl;
- return 11;
- }
- return 1;//Aceptar el AS con valor 1
- }
- /**********************************************************************/
- //Efectua un juego , es decir pide una carta y si es un AS (1 o 11) analiza la jugada mas interesante
- void juego(int &suma,string nombre="jugador"){
- int carta(azar());//Pide una carta al azar
- suma+= carta==1 ? as(suma) :carta ;//Analiza si es un AS la jugada mas interesante, si no suma la carta por defecto
- //cout <<nombre <<" = "<<suma << " , carta que ha salido = " << carta<< endl;////DEBUG COMENTARIO
- }
- /**********************************************************************/
- //Lee el teclado ,si es 1 o s retorna TRUE , pedira una carta
- bool pideCarta(string numero){
- char tecla;//Lectura de una tecla
- cout <<"Jugador "<<numero<<" Quiere otra carta ('1' o 's'=SI) ? ";
- cin>>tecla;//Lee teclado
- return tecla=='1' || tecla=='s'? true :false; //1 o s retorna TRUE
- }
- /**********************************************************************/
- //Muestra puntuaciones
- void muestraPuntuaciones(int &banca,vector<int> jugador){
- int n(0);
- cout <<endl<<"Banca = "<<banca<<" ";
- for (auto j:jugador){
- cout <<"Jugador "<<n<<" = "<<j<<" ";
- n++;//Incrementa n° de jugador
- }
- cout <<endl;
- }
- /**********************************************************************/
- //Hay un jugador ganador ?
- bool hayGanador(vector<int> jugador){
- bool ganador=false;
- for (auto j:jugador){
- ganador|= (j==21? true :false);//Hay un ganador TRUE si alguien tiene 21
- }
- return ganador;
- }
- /**********************************************************************/
- //Crea el numero cartas disponible una baraja es 14x4 =56
- vector<int> creaBaraja (vector <int> palo,int barajas=2){
- vector <int> tmp;
- while (barajas-->0){
- for (auto carta:palo){
- tmp.push_back(carta);//anade una cara
- }
- }
- return tmp;
- }
- /**********************************************************************/
- //Muestra un vector array funcion DEBUG
- void muestraVector(vector <int> v){
- for (auto elem:v){
- cout <<elem<<endl;
- }
- }
- /**********************************************************************/
- /**********************************************************************/
- int main(){
- int pc(0);
- vector<int> jugador;//Declara un vector de jugadores
- vector<int> palo{ 1,2,3,4,5,6,7,8,9,10,10,10,10 }; //Cartas disponible en un Palo
- vector <int> baraja=creaBaraja(palo);
- muestraVector(baraja);
- bool sigue(true);//opcion seguir jugando jugador
- int numero;//Lee teclado para numero jugadores
- inicializa();//Inicializa numeros aleatorios azar
- cout <<"Cuantos Jugadores ?";
- cin>>numero;
- //Crea jugadores inicializados a 0
- while(numero){
- jugador.push_back(0);
- numero--;
- }
- //Distribuye 2 cartas a cada jugador
- for ( auto j=jugador.begin() ; j!=jugador.end();j++){
- juego(*j,"Jugador "+to_string(numero));//Carta 1
- juego(*j,"Jugador "+to_string(numero));//Carta 1
- numero++;//Una referencia para identificar jugadores ...
- }
- //2cartas de la banca
- juego (pc,"banca");
- juego (pc,"banca");
- //Mientras nadie gane o pierda ,la banca no se planta <17 y el jugador pide carta sigue
- while (pc < 21 && ! hayGanador(jugador) && (sigue || pc<=16) ){
- muestraPuntuaciones(pc,jugador);
- if (pc <=16) {//Grupier,banca si es menor o igual a 16 pide carta ,grupier se planta a 17
- juego(pc,"Banca" );//Banca pide carta
- }else {cout <<"*Banca Plantada a = "<<pc<<endl;}
- numero=0;//Inicializa contador numero jugador, una referencia visual
- sigue=false;
- for ( auto j=jugador.begin() ; j!=jugador.end();j++){//Recorre los jugadores
- if ( pideCarta(to_string(numero))){ //Pide una carta este jugador ?
- juego(*j,"Jugador "+to_string(numero));//Carta 1
- sigue |=true;
- }else{ sigue|=false;}//Si nadie apuesta permite terminar
- numero++;//Incrementa jugador
- }
- }
- //Analisis final del Juego
- cout <<"*** Puntuaciones finales ****"<<endl;
- muestraPuntuaciones(pc,jugador);
- }
Add Comment
Please, Sign In to add comment