_______________________________________________________________________________
Solución:
Aparentemente la palabra craps proviene de una degeneración de la palabra inglesa crabs que significa sacar un par de unos en el juego de dados. Para entender las reglas del juego, tal vez sea de utilidad la figura siguiente:
La primera columna representa la suma que se puede obtener al lanzar un par de dados. El número más bajo es dos, el siguiente 3,.... y el mayor 12. Los extremos de esa columna (1 y 12) tienen menos probabilidades de ocurrir que el resto, ya que sólo hay un par de combinaciones para cada uno (1 y 1, para 2; y 6 y 6, para 12). A esto se refiere la segunda columna. El número formas en que se puede obtener el número de la columna Suma es el que aparece en la siguiente. Para los números que están en medio de 1 y 12, las combinaciones aumenta, hasta llegar a 7, que es el que más posibilidades tiene, con 5 pares. La siguiente columna, Probabilidad, es otra forma de escribir la segunda. Se puede ver esta tabla con la ley de los grandes números, de probabilidad. El valor esperado, cuando se lanza un dado es de 1/6 + 2/6 + 3/6 + 4/6 + 5/6 = 7/2 = 3.5 Así que si se lanzan dos dados, la esperanza es de 3.5 + 3.5 = 7 Así pues, la ley de los grandes números dice que cuando se lanzan dos dados, lo más probable es que el resultado sea 7, su media o valor esperado. Si se lanzan 3 dados, lo más probable será 10.5; si 4, 14; etc. Las reglas del craps dicen que un jugador gana a la primera si obtiene un 7 o un 11, o sea que tiene 6/36 + 2/36 = 2/9 como probabilidad de ganar a la primera. Por otro lado, pierde de inmediato si obtiene 2, 3 o 12, o sea que tiene una probabilidad de 1/36 + 2/36 + 1/36 = 1/9 de perder a la primera. En el primer lanzamiento la suerte favorece al jugador. En el resto de los casos, se obtiene "el punto", y es ahí donde el juego se vuelve a favor de la casa. Las probabilidades totales de ganar en el craps son de 49.2929, mientras que 50.7071 de las veces se pierde. El juego es bastante justo. Comparado con otros juegos de casino, la ruleta, por ejemplo, regresa más al jugador por cada peso que apueste. Sin embargo, a la larga, la casa gana. Esta es la razón por la que el juego de craps tiene unas reglas que parecen complicadas. En realidad ha evolucionado de manera empírica para hacerlo lo más atractivo posible para el jugador, sin que la casa pierda.
El siguiente archivo debe guardarse con el nombre UsaCraps.java
import java.util.Scanner; public class UsaCraps { // Abre clase UsaCraps private enum Estado {SI, NO}; ///////////////////////////////////////////// // MAIN ///////////////////////////////////////////// public static void main(String args[]) { // Abre main Scanner entrada = new Scanner(System.in); Craps juego = new Craps(); int saldoBanco = 1000; Estado continuar; continuar = Estado.SI; int apuesta = 2*saldoBanco; // Con esto se garantiza que la apuesta siempre sera // mayor que el saldo, y se entrara al while siguiente int x; int y; System.out.println("\nEste programa simula un juego de Craps."); while (apuesta > saldoBanco) { // Abre while System.out.printf("\nEl banco cuenta con un saldo de %d, por", saldoBanco); System.out.println("favor haga su apuesta: "); apuesta = entrada.nextInt(); } // Cierra while while (Estado.SI == continuar && 0 < saldoBanco) { // Abre while x = juego.jugar(); if (1 == x) { // Abre if saldoBanco -= apuesta; System.out.printf("Usted gano %d!\n", apuesta); juego.ImprimeVictoria(); } // Cierra if else { // Abre else saldoBanco += apuesta; System.out.printf("Usted perdio %d ", apuesta); juego.ImprimeDerrota(); } // Cierra else if ( 0 < saldoBanco ) { // Abre if System.out.println("\nEste programa simula un juego de Craps."); System.out.printf("\nEl banco cuenta con un saldo de %d, por", saldoBanco); System.out.println(" favor haga su apuesta o -1 para terminar."); y = entrada.nextInt(); while ( -1 != y && y > saldoBanco ) { // Abre while System.out.printf("\nEl banco cuenta con un saldo de %d, por", saldoBanco); System.out.println(" favor haga su apuesta o -1 para terminar."); y = entrada.nextInt(); } // Cierra while if ( -1 == y ) continuar = Estado.NO; else apuesta = y; } // Cierra if } // Cierra while } // Cierra main } // Cierra clase UsaCraps
El siguiente código debe guardarse con el nombre Craps.java
import java.util.Random; public class Craps { // Abre la clase publica Craps // Crea un generador de numeros aleatorios // para usarlo en el metodo TirarDado private Random numerosAleatorios = new Random(); // enumeracion con constantes que representan el estado // del juego private enum Estado {CONTINUA, GANO, PERDIO}; //constantes que representan tiros comunes del dado private final static int DOS_UNOS = 2; private final static int TRES = 3; private final static int SIETE = 7; private final static int ONCE = 11; private final static int DOCE = 12; //////////////////////////////////////// // Metodo Jugar //////////////////////////////////////// // Ejecutar un juego de Craps public int jugar() { // Abre metodo jugar int miPunto = 0; // punto si no gana o pierde en el primer tiro Estado estadoJuego; // Puede contener CONTINUA, GANA O PERDIO; int sumaDeDados = tirarDados(); // primer tiro de los dados // determina el estado del juego y el punto // en base en el primer tiro switch( sumaDeDados ) { // Abre switch case SIETE: // gana con 7 en el primer tiro case ONCE: // gana con once en el primer tiro estadoJuego = Estado.GANO; break; case DOS_UNOS: //Pierde con 2 en el primer tiro case TRES: //Pierde con 3 en el primer tiro case DOCE: // Pierde con 12 en el primer tiro estadoJuego = Estado.PERDIO; break; default: // No gano ni perdio, por lo que guarda el punto estadoJuego = Estado.CONTINUA; // No ha terminado el juego miPunto = sumaDeDados; // guarda el punto System.out.printf("El punto es %d\n", miPunto); break; // opcional al final del switch } // Cierra switch // mientras el juego no este terminado while( estadoJuego == Estado.CONTINUA ) { // Abre while sumaDeDados = tirarDados(); // determina el estado del juego if (sumaDeDados == miPunto) estadoJuego = Estado.GANO; else if (sumaDeDados == SIETE ) estadoJuego = Estado.PERDIO; } // Cierra while //muestra mensaje de que gano o perdio if ( estadoJuego == Estado.GANO ) { // Abre if System.out.println("El jugador gana"); return 1; } // Cierra if else { // Abre else System.out.println("El jugador pierde"); return -1; } // Cierra else } // Cierra metod jugar // tira los dados, calcula la suma // y muestra los resultados public int tirarDados() { // Abre metodo tirarDados // elige valores aleatorios para los dados int dado1 = 1 + numerosAleatorios.nextInt(6); int dado2 = 1 + numerosAleatorios.nextInt(6); int suma = dado1 + dado2; // muestra los resultados de ese tiro System.out.printf("El jugador tiro %d + %d = %d\n", dado1, dado2, suma); return suma; } // Cierra metodo tirarDados ///////////////////////////////////////// // ImprimeDerrota ///////////////////////////////////////// public void ImprimeDerrota() { // Abre metodo ImprimeDerrota int auxiliar = 1 + numerosAleatorios.nextInt( 5 ); switch (auxiliar) { // Abre switch case 1: System.out.println("\nLo siento. Siga intentando!"); break; case 2: System.out.println("\nSi no vuelve a jugar, no se recuperara"); break; case 3: System.out.println("\nPronto cambiara su suerte!"); break; case 4: System.out.println("\nOh, se esta yendo a la quiebra, verdad?"); break; case 5: System.out.println("\nMejor retirese y conserve algo de su dinero!"); break; default: System.out.println("\nRevise este metodo!"); break; } // Cierra switch } // Cierra metodo ImprimeDerrota ///////////////////////////////////////// // ImprimeVictoria ///////////////////////////////////////// public void ImprimeVictoria() { // Abre metodo ImprimeVictoria int auxiliar = 1 + numerosAleatorios.nextInt( 5 ); switch (auxiliar) { // Abre switch case 1: System.out.println("\nFelicidades!"); break; case 2: System.out.println("\nEsta usted acabando con la banca!"); break; case 3: System.out.println("\nEsto es una buena racha!"); break; case 4: System.out.println("\nHoy es su dia de suerte, verdad?"); break; case 5: System.out.println("\nYa puede cambiar sus fichas por mucho dinero!"); break; default: System.out.println("\nRevise este metodo!"); break; } // Cierra switch } // Cierra metod ImprimeVictoria } // Cierra la clase publica Craps
excelente aporte, me ayuda muchisimo, solo unas dudas, lo que pasa que soy nuevo en esto.
ResponderEliminarLa segunda parte debe ser generado como file dentro de la primera? o como va?
debo crearlo como java aplication, o aplet o de escritorio?
Olvidalo, pregunte antes de itentaarlo, ia agrego la clase, muchisimas gracias por el aporte esta perfectisimo!!!
ResponderEliminarGracias a ti. Para ejecutar yo sólo pongo los dos archivos en un mismo directorio y después de compilar con javac llamo con java al archivo que tiene main.
ResponderEliminarjeys men, gracias por este excelente aporte, me ha ayudado mucho, pero te queria preguntar como puedo enlazar estos archivos a mi pagina html??
ResponderEliminarEspero respuestas, gracias :D