Advertisement
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>
- 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
- 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){
- 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 juegp
- }
- /**********************************************************************/
- //Lee el teclado ,si es 1 o s retorna TRUE , pedira una carta
- bool pideCarta(){
- char tecla;//Lectura de una tecla
- cout <<"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,int &jugador){
- cout <<endl<<"Banca = "<<banca<<" ,Jugador ="<<jugador<<endl;
- }
- /**********************************************************************/
- /**********************************************************************/
- int main(){
- int pc(0),jugador(0);//Un solo jugador y la banca
- bool sigue(true);//opcion seguir jugando jugador
- inicializa();//Inicializa numeros aleatorios azar
- //Primeras dos cartas iniciales
- for (int n=2;n>0;n--){ //Se reparten 2 cartas iniciales
- juego(pc,"Banca" );//carta
- juego(jugador,"Jugador");//carta
- }
- muestraPuntuaciones(pc,jugador);//Ver puntuaciones
- if (jugador >=21 && pc >=21){//Hay un ganador o perdedor en las primeras 2 cartas
- sigue=false;
- }else{
- sigue=pideCarta();//Jugador pide carta o considera que tiene un buen juego
- }
- //Mientras nadie gane o pierda ,la banca no se planta <17 y el jugador pide carta sigue
- while (pc < 21 && jugador < 21 && (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;}
- if (sigue) juego(jugador,"Jugador");//Jugador pide carta si lectura de tecla 1 o s
- if(pc<=20 && jugador<=20){//La banca y el jugador no han perdido ,jugador puede pedir carta
- sigue=pideCarta();//Jugador pide carta ?,
- }
- }
- //Analisis final de la partida
- muestraPuntuaciones(pc,jugador);
- if (pc <=21 && (pc == jugador)) {cout <<"Empate !"<<endl;}
- if (pc>21 && jugador >21){ cout <<"Pierden ambos"<<endl;}
- //PC
- if (pc <=21 && (pc >jugador || jugador>21 )){cout <<"Gana la banca"<<endl;}
- //Jugador
- if (jugador <=21 && (jugador >pc || pc > 21 )) {cout <<"Gana Jugador"<<endl;}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement