Juego de Craps

Capítulo 5 Funciones en C 143 en donde a es el valor de cambio (el cual es igual al primer número del rango deseado d

Views 8 Downloads 0 File size 38KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Capítulo 5

Funciones en C

143

en donde a es el valor de cambio (el cual es igual al primer número del rango deseado de enteros consecutivos), y b es el factor de escalamiento (que es igual a la longitud del rango deseado de enteros consecutivos). En los ejercicios, veremos que es posible elegir enteros de manera aleatoria a partir de conjuntos de valores diferentes a los rangos consecutivos de enteros. Error común de programación 5.11 Usar srand en un lugar de rand para generar números aleatorios.

5.10 Ejemplo: Un juego de azar Uno de los juegos de azar más populares es el juego de dados conocido como “craps”, el cual se juega en casinos y patios traseros alrededor del mundo. Las reglas del juego son simples. El jugador tira dos dados. Cada dado tiene seis caras. Estas caras contienen 1, 2, 3, 4, 5 y 6 puntos. Una vez que los dados caen, se calcula la suma de los puntos que se encuentran en las caras que ven hacia arriba. Si la suma es igual a 7 u 11 en el primer tiro, el jugador gana. Si la suma es 2, 3 o 12 en el primer tiro (llamado “craps”), el jugador pierde (es decir, la “casa” gana). Si la suma es 4, 5, 6, 8, 9, o 10 en el primer tiro, entonces la suma se convierte en el “punto” del jugador. Para ganar, usted debe continuar tirando los dados hasta que “haga su punto”. El jugador pierde si tira un 7 antes de hacer su punto.

La figura 5.10 simula el juego de craps, y la figura 5.11 muestra varias ejecuciones de ejemplo.

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

/* Figura 5.10: fig05_10.c Craps */ #include #include #include /* contiene el prototipo de la función time */ /* constantes de enumeración que representan el estado del juego */ enum Estatus { CONTINUA, GANA, PIERDE }; int tiraDados( void ); /* prototipo de la función */ /* la función main comienza la ejecución del programa */ int main() { int suma; /* suma del tiro de datos */ int miPunto; /* punto ganado */ enum Estatus estatusJuego /* puede contener CONTINUA, GANA o PIERDE */ /* randomiza el generador de números aleatorios mediante la función time */ srand( time( NULL ) ); suma = tiraDados(); /* primer tiro de los dados */ /* determina el estado del juego basado en la suma de los dados */ switch( suma ) { /* gana en el primer tiro */ case 7: case 11: estatusJuego = GANA;

Figura 5.10 Programa para simular el juego de craps. (Parte 1 de 3.)

144

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

Funciones en C

Capítulo 5

break; /* pierde en el primer tiro */ case 2: case 3: case 12: estatusJuego = PIERDE; break; /* recuerda el punto */ default: estatusJuego = CONTINUA; miPunto = suma; printf( “Su punto es %d\n”, miPunto ); break; /* opcional */ } /* fin de switch */ /* mientras el juego no se complete */ while ( estatusJuego == CONTINUA ) { suma = tiraDados(); /* tira de nuevo los dados */ /* determina el estatus del juego */ if ( suma == miPunto ) { /* gana por punto */ estatusJuego = GANA; /* fin del juego, el jugador gana */ } /* fin de if */ else { if ( suma == 7 ) { /* pierde al tirar 7 */ estatusJuego = PIERDE; /* termina el juego, el jugador pierde */ } /* fin de if */ } /* fin de else */ } /* fin de while */ /* despliega mensaje de triunfo o derrota */ if ( estatusJuego == GANA ) { /* ¿Ganó el jugador? */ printf( “El jugador gana \n” ); } /* fin de if */ else { /* el jugador pierde */ printf( “El jugador pierde\n” ); } /* fin de else */ return 0; /* indica terminación exitosa */ } /* fin de main */ /* tiro de dados, calcula la suma y despliega los resultados */ int tiraDados( void ) { int dado1; /* primer dado */ int dado2; /* segundo dado */ int sumaTemp; /* suma de los dados */

Figura 5.10 Programa para simular el juego de craps. (Parte 2 de 3.)

Capítulo 5

85 86 87 88 89 90 91 92 93 94 95

Funciones en C

145

dado1 = 1 + ( rand() % 6 ); /* toma el aleatorio para el dado1 */ dado2 = 1 + ( rand() % 6 ); /* toma el aleatorio para el dado2 */ sumaTemp = dado1 + dado2; /* suma el dado1 y el dado2 */ /* despliega los resultados de este tiro */ printf( “El jugador tiro %d + %d = %d\n”, dado1, dado2, sumaTemp ); return sumaTemp; /* devuelve la suma de los dados */ } /* fin de la función tiraDados */

Figura 5.10 Programa para simular el juego de craps. (Parte 3 de 3.) El jugador tiro 1 + 5 = 6 Su punto es 6

El El El El El El

jugador jugador jugador jugador jugador jugador

tiro tiro tiro tiro tiro gana

2 2 2 6 4

+ + + + +

1 6 3 2 2

= = = = =

3 8 5 8 6

El jugador tiro 1 + 1 = 2 El jugador pierde

El Su El El El El

jugador tiro punto es 8 jugador tiro jugador tiro jugador tiro jugador gana

5 + 3 = 8 2 + 4 = 6 5 + 4 = 9 5 + 3 = 8

Figura 5.11 Ejemplo de ejecuciones del juego Craps.

En las reglas del juego, observe que el jugador debe tirar dos dados en el primer tiro, y también lo debe hacer en los demás tiros subsecuentes. Definimos una función llamada tiraDados para lanzar los dados y calcular e imprimir la suma. La función tiraDados se define una sola vez, pero se invoca desde dos ubicaciones diferentes en el programa (líneas 23 y 51). De manera interesante, tiraDados no toma argumentos, así que indicamos void dentro de la lista de parámetros (línea 80). La función tiraDados devuelve la suma de los dos dados, por lo que indicamos el tipo de retorno int en el encabezado de la función. El juego es razonablemente complicado. El jugador puede ganar o perder en el primer tiro, o puede ganar o perder en cualquier tiro subsiguiente. La variable estatusJuego, definida para que sea de un nuevo tipo enum Estatus, almacena el estado actual. La línea 8 crea un tipo definido por el programador llamada enumeración. Una enumeración, definida mediante la palabra reservada enum, es un conjunto de constantes enteras representadas por medio de identificadores. En ocasiones, a las constantes de enumeración se les llama constantes simbólicas; esto es, constantes representadas por medio de símbolos. Los valores en una enumeración comienzan en 0 y se incrementan en 1. En la línea 8, la constante CONTINUA tiene el valor 0. GANA tiene el valor 1 y PIERDE tiene el valor 2. También, en un enum, es posible asignar un valor entero a cada identificador (revise el capítulo 13). Los identificadores de una enumeración deben ser únicos, pero los valores pueden estar duplicados.