Advertisement
AntonioVillanueva

BlackJack ensayo ...

Nov 23rd, 2019
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.31 KB | None | 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.  
  19. using namespace std;
  20. /**********************************************************************/
  21. //Inicializar numeros aleatorios
  22. void inicializa(){srand(time(NULL));}
  23. /**********************************************************************/
  24. //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
  25. int azar(){return 1+rand()%10;}
  26. /**********************************************************************/
  27. //Ha salido un AS su valor sera 1 o 11 segun sea lo + interesante sin pasarse de 21
  28. int as(int anterior ){
  29.     //Analiza jugada mas interesante para tener 21 o menor ..
  30.     cout <<"AS ! ";//DEBUG
  31.     if ( (11+anterior) <=21){ //Analiza el AS como 11, considera menor o igual a 21 como interesante
  32.         cout <<"Juega como 11"<<endl;
  33.         return 11;
  34.     }
  35.     return 1;//Aceptar el AS con valor 1       
  36. }
  37. /**********************************************************************/
  38. //Efectua un juego , es decir pide una carta y si es un AS (1 o 11) analiza la jugada mas interesante
  39. void juego(int &suma,string nombre){
  40.     int carta(azar());//Pide una carta al azar
  41.     suma+= carta==1 ? as(suma) :carta ;//Analiza si es un AS la jugada mas interesante, si no suma la carta por defecto
  42.     cout <<nombre <<" = "<<suma << " , carta que ha salido = " << carta<< endl;//DEBUG juegp
  43. }
  44. /**********************************************************************/
  45. //Lee el teclado ,si es 1 o s retorna TRUE , pedira una carta
  46. bool pideCarta(){
  47.     char tecla;//Lectura de una tecla
  48.     cout <<"Quiere otra carta ('1' o 's'=SI) ? ";
  49.     cin>>tecla;//Lee teclado
  50.     return tecla=='1' || tecla=='s'? true :false; //1 o s retorna TRUE
  51. }
  52. /**********************************************************************/
  53. //Muestra puntuaciones
  54. void muestraPuntuaciones(int &banca,int &jugador){
  55.     cout <<endl<<"Banca = "<<banca<<" ,Jugador ="<<jugador<<endl;
  56. }
  57. /**********************************************************************/
  58. /**********************************************************************/
  59. int main(){
  60.     int pc(0),jugador(0);//Un solo jugador y la banca
  61.     bool sigue(true);//opcion seguir jugando jugador
  62.    
  63.     inicializa();//Inicializa numeros aleatorios azar
  64.    
  65.     //Primeras dos cartas iniciales
  66.     for (int n=2;n>0;n--){ //Se reparten 2 cartas iniciales
  67.         juego(pc,"Banca" );//carta
  68.         juego(jugador,"Jugador");//carta           
  69.     }
  70.    
  71.     muestraPuntuaciones(pc,jugador);//Ver puntuaciones 
  72.    
  73.     if (jugador >=21 && pc >=21){//Hay un ganador o perdedor en las primeras 2 cartas
  74.         sigue=false;
  75.     }else{
  76.         sigue=pideCarta();//Jugador pide carta o considera que tiene un buen juego
  77.     }
  78.  
  79.    
  80.     //Mientras nadie gane o pierda ,la banca no se planta <17 y el jugador pide carta sigue
  81.     while (pc < 21 && jugador < 21 && (sigue || pc<=16) ){ 
  82.         muestraPuntuaciones(pc,jugador);           
  83.        
  84.         if (pc <=16) {//Grupier,banca si es menor o igual a 16 pide carta ,grupier se planta a 17
  85.             juego(pc,"Banca" );//Banca pide carta
  86.         }else {cout <<"*Banca Plantada a = "<<pc<<endl;}
  87.        
  88.         if (sigue) juego(jugador,"Jugador");//Jugador pide carta si lectura de tecla 1 o s
  89.        
  90.         if(pc<=20 && jugador<=20){//La banca y el jugador no han perdido ,jugador puede pedir carta
  91.             sigue=pideCarta();//Jugador pide carta ?,
  92.         }      
  93.     }
  94.    
  95.     //Analisis final de la partida
  96.     muestraPuntuaciones(pc,jugador);   
  97.     if (pc <=21 && (pc == jugador)) {cout <<"Empate !"<<endl;}
  98.     if (pc>21 && jugador >21){ cout <<"Pierden ambos"<<endl;}
  99.     //PC
  100.     if (pc <=21 && (pc >jugador || jugador>21 )){cout <<"Gana la banca"<<endl;}
  101.     //Jugador
  102.     if (jugador <=21 && (jugador >pc || pc > 21 )) {cout <<"Gana Jugador"<<endl;}  
  103.    
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement