bingo

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package bingo; import java.util.*; //import java.lang.*; /** * * @author matricula */ public class Bingo { static Random rand = new Random(); /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here int ctDeCartones = 0, segundos; Dealer dler; Scanner sc = new Scanner(System.in); System.out.println("MAIN:Introduzca la cantidad de jugadores:"); ctDeCartones = sc.nextInt(); System.out.println("MAIN:Introduzca la cantidad máxima de segundos que esperará cada jugador:"); segundos = sc.nextInt(); // Creando un Dealer dler = new SubDealer(ctDeCartones); dler.start(); // Creando una variable para almacenar las referencias a los cartones Carton car; // Creando tantos cartones como indicó el usuario for (int i = 0; i < ctDeCartones; i++) { // Creando cartones. Parametros: nombre del jugador, dealer, segundos máximos que esperara para pedir bolos car = new Carton("CartonDelJugador" + i, dler, segundos); car.start(); } System.out.println("MAIN:>>>Terminado"); } } class Dealer extends Thread { int ctDeCartones, boloGenerado, solicitudesDelBolo; boolean hayGanador = false; boolean[] bolosGenerados = new boolean[75]; Dealer(int ctDeCartones) { this.ctDeCartones = ctDeCartones; } public void run() { while (!hayGanador) { do { boloGenerado = Bingo.rand.nextInt(75) + 1; } while ((bolosGenerados[boloGenerado - 1]) && !hayGanador); // } while (bolosGenerados[boloGenerado - 1]); bolosGenerados[boloGenerado - 1] = true; try { // while ((solicitudesDelBolo < ctDeCartones) && !hayGanador) { while ((solicitudesDelBolo < ctDeCartones) && !hayGanador) { Thread.sleep(500); } solicitudesDelBolo = 0; } catch (Exception e) { System.out.println("DEALER:Ha ocurrido un error"); } } System.out.println("DEALER:>>> Juego Terminado!"); } int obtenerBoloGenerado(String carton, int ultimoBoloRecibido) { System.out.println("DEALER:El carton " + carton + " solicito un bolo"); if (ultimoBoloRecibido == boloGenerado) { // -1 indica que no se ha generado un nuevo bolo System.out.println("DEALER:No hay un nuevo bolo para entregar al carton " + carton); return -1; } else { System.out.println("DEALER:Se entregó el bolo " + boloGenerado + " al carton " + carton); solicitudesDelBolo++; return boloGenerado; } } void cantarBingo(String carton) { System.out.println("DEALER:El carton " + carton + " canto BINGO!!!"); hayGanador = true; } // Funcion que retorna si hay un ganador boolean hayUnGanador() { return hayGanador; } } class SubDealer extends Dealer { SubDealer() { super(1); } SubDealer(int a) { super(a); } } class Carton extends Thread { Dealer dealer; String nombreDelCarton; int carton[][] = new int[5][5]; int ultimoBoloObtenido, segundos; Carton(String nombre, Dealer dlr, int segundos) { nombreDelCarton = nombre; dealer = dlr; this.segundos = segundos; // Generando carton int min, max, numero = 0; boolean numeroExistente; // Ciclo para generar los numeros de la primera columna for (int c = 0; c < 5; c++) { min = (c * 15) + 1; max = min + 14; for (int f = 0; f < 5; f++) { numeroExistente = true; while (numeroExistente) { numero = Bingo.rand.nextInt((max - min) + 1) + min; numeroExistente = false; for (int c1 = 0; c1 < 5; c1++) { for (int f1 = 0; f1 < 5; f1++) { if (numero == carton[f1][c1]) { numeroExistente = true; } } } } carton[f][c] = numero; } } System.out.println(Arrays.deepToString(carton)); } public void run() { int bolo; while (!dealer.hayUnGanador()) { // Esperando "segundos" segundos antes de pedir el bolo try { Thread.sleep((Bingo.rand.nextInt(segundos) + 1) * 1000); } catch (Exception e) { System.out.println("CARTON " + nombreDelCarton + ":Ha ocurrido un error!"); } if (!dealer.hayUnGanador()) { bolo = dealer.obtenerBoloGenerado(nombreDelCarton, ultimoBoloObtenido); if (bolo == -1) { System.out.println("CARTON " + nombreDelCarton + ":Aun no se ha generado un nuevo bolo. Sigo esperando."); } else { synchronized (System.out) { ultimoBoloObtenido = bolo; System.out.println("CARTON " + nombreDelCarton + ":El bolo obtenido fue: " + bolo); if (validarBolo(bolo)) { System.out.println("CARTON " + nombreDelCarton + ":Bolo encontrado en carton"); imprimirCarton(); if (validarCarton()) { dealer.cantarBingo(nombreDelCarton); } } else { System.out.println("CARTON " + nombreDelCarton + ":Bolo no encontrado en carton"); } } } } } System.out.println("CARTON " + nombreDelCarton + ":>>> Saliendo del código del carton"); } boolean validarBolo(int bolo) { boolean boloEncontrado = false; buscandoBolo: { for (int f = 0; f < 5; f++) { for (int c = 0; c < 5; c++) { if (carton[f][c] == bolo) { carton[f][c] = carton[f][c] * -1; boloEncontrado = true; break buscandoBolo; } } } } return boloEncontrado; } boolean validarCarton() { boolean cartonGanador = false; int contador_f = 0, contador_c = 0, contador_dp = 0, contador_ds = 0; validando: { for (int c1 = 0; c1 < 5; c1++) { contador_f = contador_c = 0; for (int c2 = 0; c2 < 5; c2++) { if (carton[c1][c2] < 0) { contador_f++; } if (carton[c2][c1] < 0) { contador_c++; } if (contador_f == 5 || contador_c == 5) { break validando; } } if (carton[c1][c1] < 0) { contador_dp++; } if (carton[c1][4 - c1] < 0) { contador_ds++; } } } if (contador_f == 5) { System.out.println("CARTON " + nombreDelCarton + ":Ganador por fila"); cartonGanador = true; } if (contador_c == 5) { System.out.println("CARTON " + nombreDelCarton + ":Ganador por columna"); cartonGanador = true; } if (contador_dp == 5) { System.out.println("CARTON " + nombreDelCarton + ":Ganador por diagonal principal"); cartonGanador = true; } if (contador_ds == 5) { System.out.println("CARTON " + nombreDelCarton + ":Ganador por diagonal secundaria"); cartonGanador = true; } /* // Vaidando si el carton es ganador en alguna de las filas for (int f = 0; f < 5; f++) { for (int c = 0; c < 5; c++) { if (carton[f][c] < 0) { contador++; } } } if (contador == 5) { cartonGanador = true; } // Validando si el carton es ganador en alguna de las columnas if (!cartonGanador) { contador = 0; for (int c = 0; c < 5; c++) { for (int f = 0; f < 5; f++) { if (carton[f][c] < 0) { contador++; } } } if (contador == 5) { cartonGanador = true; } } */ return cartonGanador; } void imprimirCarton() { System.out.println("\nCARTON " + nombreDelCarton + ":--------------------------"); for (int f = 0; f < 5; f++) { for (int c = 0; c < 5; c++) { if (c == 0) { System.out.print("CARTON " + nombreDelCarton + ":|"); } if (c == 2 && f == 2) { System.out.print("FREE"); } else if (carton[f][c] > 0) { System.out.printf(" %2d ", carton[f][c]); } else { System.out.printf("<%2d>", carton[f][c] * -1); } if (c == 4) { System.out.println("|"); System.out.println("CARTON " + nombreDelCarton + ":--------------------------"); } else { System.out.print('|'); } } } System.out.print('\n'); } }

1 Response

Que recuerdos!

Write a comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.