 /* -----------------------------------------------------------------
    Alunos = Igor Betim de Freitas, Celso Alves, Germano Cunha Diogo
    Turma  = Paradigmas de Programacao - 71
    Prof.  = Gerson Cavalheiro
    ------------------------------------------------------------------*/
   class banca{
      static double saldo; // Representa o Saldo Atual da Banca
      static double saldo_minimo; 
      /* ----------------------------------------------------------
         Criaremos um Vetor onde cada indice sera uma referencia
         para um objeto apostador.
         -----------------------------------------------------------*/
      apostador aposta[];

      /* -------------------------------------------
         Para inicio do jogo consideramos que o Sal
         do atual da banca herdado de outras corridas
         seje = 5000.
         -------------------------------------------*/
      public banca(){
         saldo_minimo = 2000;     // Construtor
         saldo        = 5000;   
      }

      /* -------------------------------------------------------------
         Uma nova corrida somente sera permitida  se houver saldo su-
         ficiente na banca. Este metodo garante isto.
         --------------------------------------------------------------*/
      public boolean existe_saldo(){
         boolean bexiste_saldo = false;
         if (saldo >= saldo_minimo){
            bexiste_saldo = true;
         }
         return bexiste_saldo;
      }

      /* -------------------------------------------------------------
         Para cada nova aposta temos que dar entrada no caixa da banca
         -------------------------------------------------------------*/
      static void entrada_caixa(double entrada){
         saldo = saldo + entrada;
      }

      /* -------------------------------------------------------------
         Apos terminada a corrida e apurado os acertadores, retira do
         caixa o valor necessario para pagar os mesmos.
         -------------------------------------------------------------*/
      static void saida_caixa(double saida){
         saldo = saldo - saida;
      }  

      /* ----------------------------------------------------
         Este metodo permite apostas. Cada objeto apostador e
         armazenado em um Vetor de Objetos Apostador.
         ----------------------------------------------------- */
      public void apostar(){
         /*----------------------------------------------------
           Inicializa uma referencia para cada indice do Vetor
           -----------------------------------------------------*/
         aposta = new apostador[50];
         for (int i = 0; i < 50; i++){
            aposta[i] = new apostador();
         }
         /* -----------------------------------------------------
             Possibilita a Banca cadastrar seus apostadores
            ----------------------------------------------------- */
         int opcao             = 0;
         String nome_apostador = " ";
         int competidor        = 0;
         double vlr_aposta     = 0;

         do{
            System.out.println("[1]  - Inserir  apostador");
            System.out.println("[99] - Terminar apostas");
            System.out.println("Digite sua opcao:");
            opcao = KBItf.geti();
            if (opcao == 99){
               break; // Sai do Bloco do while
            }

            System.out.println("---Codigo dos Competidores---");
            System.out.println("[1] - Cavalo");
            System.out.println("[2] - Moto");
            System.out.println("[3] - Jeep");
            System.out.println("[4] - Carro");
            System.out.println();
            System.out.println();                

            do{
               System.out.println("Digite o nome do Apostador");
               nome_apostador = KBItf.gets();
               if (nome_apostador == " "){
                   System.out.println("O nome nao pode ficar em branco.");
               }
            } while (nome_apostador == " ");

            do{
               System.out.println("Digite o valor da aposta:");
               vlr_aposta = KBItf.getd();
               if (vlr_aposta == 0){
                  System.out.println("O valor da aposta nao pode ser zero.");
               }
            } while(vlr_aposta == 0);

            do{
              System.out.println("Informe o codigo do competidor:");
              competidor = KBItf.geti();
              if (competidor == 0 | competidor > 4){
                 System.out.println("Competidor Invalido.");
              }
            } while(competidor == 0 | competidor > 4);

            /* -------------------------------------------------
               Atribui para a primeira referencia livre do vetor
               os atributos do apostador.
               --------------------------------------------------*/
            Insercao:
            for (int i = 0; i < 50; i++){
               if (aposta[i].vlr_aposta == 0){
                  aposta[i].nome       = nome_apostador;
                  aposta[i].vlr_aposta = vlr_aposta;
                  aposta[i].competidor = competidor;
                  entrada_caixa(vlr_aposta);
                  break Insercao;
               }
            }
         } while( opcao != 99 );          
      }

      /* ----------------------------------------------------------------
         Para apurar os acertadores e fazer o rateio do dinheiro foi ado-
         tado um criterio simples. Somamos o valor total das apostas e di
         vidimos entre os acertadores.
         Exemplo: Valor total das apostas = 100.
                  Ganhandor = 4(Carro)
                  Apostadores no 4 = 5 apostadores.
        Cada apostador ira receber 20 Reais
        -------------------------------------------------------------------*/
      public void apurar_ganhadores(int ganhador){
         double tot_apostado      = 0;
         int    acertadores       = 0;
         double vlr_rateado       = 0;
         String lista_acertadores = " ";

         for (int i = 0; i < 50; i++){
            if(aposta[i].vlr_aposta != 0){
               tot_apostado = tot_apostado + aposta[i].vlr_aposta;
               if (aposta[i].competidor == ganhador){
                  acertadores = acertadores + 1;
                  lista_acertadores = lista_acertadores + aposta[i].nome + ";";
               }
            }
         }
         if (acertadores == 0){
            System.out.println("Nao houve nenhum acertador");
            System.out.println("Pressione ENTER para continuar");
            String continuar = KBItf.gets();
         }
         else{
            saida_caixa(tot_apostado / acertadores);
            System.out.println("Os ganhadores sao:");
            System.out.println(lista_acertadores);
            System.out.println("Cada um ira receber: " + tot_apostado / acertadores);
            System.out.println("Pressione Enter para continuar");
            String continuar = KBItf.gets();
         }
      }

      public class apostador{
         public String nome;
         public double vlr_aposta;
         public int competidor;

         public apostador(){
            nome       = "";
            vlr_aposta = 0;
            competidor = 0;
         }
      }
   }

