AntonioVillanueva

Black Jack

Nov 25th, 2019 (edited)
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.53 KB | Gaming | 0 0
  1. /*
  2. Antonio Villanueva Segura ensayo de BlackJack
  3. BlackJack o 21 se juega con 52 cartas sin comodines
  4. Consiste en sumar 21 pero sin pasarse
  5. cada jugador juega contra el crupier
  6. El Crupier tiene reglas fijas pide carta si su puntuacion suma 16 o menos y se planta con 17 o mas
  7. Las cartas de 2 al 9 toman este valor
  8. Las cartas 10,J,Q,K toman valor 10
  9. Es AS(1) puede valer 1 o 11 segun interese ...p.e As + una carta de valor 10 (10,J,Q,K)
  10. Se reciben dos cartas iniciales
  11.  
  12. La modalidad más popular se juega con 6 barajas, un total de 312 cartas. 6x52
  13. Un dato importante a tener en cuenta es que en una baraja de 52 cartas hay 16 cartas que valen 10 puntos.
  14. Si se jugara con 6 barajas, esta cantidad es de 96 (16 x 6).
  15. */
  16. #include <iostream>
  17. #include <ctime>
  18. #include <vector>
  19.  
  20. using namespace std;
  21. /**********************************************************************/
  22. //Inicializar numeros aleatorios
  23. void inicializa(){srand(time(NULL));}
  24. /**********************************************************************/
  25. //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
  26. int azar(){return 1+rand()%10;}
  27. /**********************************************************************/
  28. //Ha salido un AS su valor sera 1 o 11 segun sea lo + interesante sin pasarse de 21
  29. int as(int anterior ){
  30.     //Analiza jugada mas interesante para tener 21 o menor ..
  31.     //cout <<"AS ! ";//DEBUG COMENTARIO
  32.     if ( (11+anterior) <=21){ //Analiza el AS como 11, considera menor o igual a 21 como interesante
  33.         cout <<"Juega como 11"<<endl;
  34.         return 11;
  35.     }
  36.     return 1;//Aceptar el AS con valor 1       
  37. }
  38. /**********************************************************************/
  39. //Efectua un juego , es decir pide una carta y si es un AS (1 o 11) analiza la jugada mas interesante
  40. void juego(int &suma,string nombre="jugador"){
  41.     int carta(azar());//Pide una carta al azar
  42.     suma+= carta==1 ? as(suma) :carta ;//Analiza si es un AS la jugada mas interesante, si no suma la carta por defecto
  43.     //cout <<nombre <<" = "<<suma << " , carta que ha salido = " << carta<< endl;////DEBUG COMENTARIO
  44. }
  45. /**********************************************************************/
  46. //Lee el teclado ,si es 1 o s retorna TRUE , pedira una carta
  47. bool pideCarta(string numero){
  48.     char tecla;//Lectura de una tecla
  49.     cout <<"Jugador "<<numero<<" Quiere otra carta ('1' o 's'=SI) ? ";
  50.     cin>>tecla;//Lee teclado
  51.     return tecla=='1' || tecla=='s'? true :false; //1 o s retorna TRUE
  52. }
  53. /**********************************************************************/
  54. //Muestra puntuaciones
  55. void muestraPuntuaciones(int &banca,vector<int> jugador){
  56.     int n(0);
  57.     cout <<endl<<"Banca = "<<banca<<"  ";
  58.     for (auto j:jugador){
  59.         cout <<"Jugador "<<n<<" = "<<j<<"  ";
  60.         n++;//Incrementa n° de jugador
  61.     }
  62.     cout <<endl;
  63. }
  64. /**********************************************************************/
  65. //Hay un jugador ganador ?
  66. bool hayGanador(vector<int> jugador){
  67.     bool ganador=false;
  68.     for (auto j:jugador){
  69.         ganador|= (j==21? true :false);//Hay un ganador TRUE si alguien tiene 21
  70.     }
  71.     return ganador;
  72. }
  73. /**********************************************************************/
  74. //Crea el numero cartas disponible una baraja es 14x4 =56
  75. vector<int> creaBaraja (vector <int> palo,int barajas=2){
  76.     vector <int> tmp;
  77.     while (barajas-->0){
  78.         for (auto carta:palo){
  79.             tmp.push_back(carta);//anade una cara
  80.         }      
  81.     }
  82.     return tmp;
  83. }
  84. /**********************************************************************/
  85. //Muestra un vector array funcion DEBUG
  86. void muestraVector(vector <int> v){
  87.     for (auto elem:v){
  88.         cout <<elem<<endl;
  89.     }
  90. }
  91. /**********************************************************************/
  92. /**********************************************************************/
  93. int main(){
  94.     int pc(0);
  95.     vector<int> jugador;//Declara un vector de jugadores
  96.     vector<int> palo{ 1,2,3,4,5,6,7,8,9,10,10,10,10 }; //Cartas disponible en un Palo  
  97.     vector <int> baraja=creaBaraja(palo);
  98.     muestraVector(baraja);
  99.  
  100.        
  101.     bool sigue(true);//opcion seguir jugando jugador   
  102.     int numero;//Lee teclado para numero jugadores
  103.    
  104.     inicializa();//Inicializa numeros aleatorios azar
  105.    
  106.     cout <<"Cuantos Jugadores ?";
  107.     cin>>numero;
  108.    
  109.     //Crea jugadores inicializados a 0
  110.     while(numero){
  111.         jugador.push_back(0);
  112.         numero--;
  113.     }  
  114.    
  115.     //Distribuye 2 cartas a cada jugador
  116.     for ( auto j=jugador.begin() ; j!=jugador.end();j++){
  117.         juego(*j,"Jugador "+to_string(numero));//Carta 1
  118.         juego(*j,"Jugador "+to_string(numero));//Carta 1   
  119.         numero++;//Una referencia para identificar jugadores ...   
  120.     }
  121.    
  122.     //2cartas de la banca
  123.     juego (pc,"banca");
  124.     juego (pc,"banca");
  125.        
  126.     //Mientras nadie gane o pierda ,la banca no se planta <17 y el jugador pide carta sigue
  127.     while (pc < 21  && ! hayGanador(jugador) && (sigue || pc<=16) ){
  128.         muestraPuntuaciones(pc,jugador);
  129.         if (pc <=16) {//Grupier,banca si es menor o igual a 16 pide carta ,grupier se planta a 17
  130.             juego(pc,"Banca" );//Banca pide carta
  131.         }else {cout <<"*Banca Plantada a = "<<pc<<endl;}       
  132.        
  133.         numero=0;//Inicializa contador numero  jugador, una referencia visual
  134.         sigue=false;
  135.         for ( auto j=jugador.begin() ; j!=jugador.end();j++){//Recorre los jugadores
  136.  
  137.            
  138.             if ( pideCarta(to_string(numero))){ //Pide una carta este jugador ?
  139.                 juego(*j,"Jugador "+to_string(numero));//Carta 1   
  140.                 sigue |=true;          
  141.             }else{ sigue|=false;}//Si nadie apuesta permite terminar
  142.             numero++;//Incrementa jugador
  143.         }
  144.     }
  145.    
  146.     //Analisis final del Juego
  147.     cout <<"*** Puntuaciones finales ****"<<endl;
  148.     muestraPuntuaciones(pc,jugador);
  149.    
  150. }
Add Comment
Please, Sign In to add comment