XP : ClasseBaralhoIteracaoFinal

XP » XP » WebHome » TrabalhosFinais » JogoDoMeio » TestesParaOJogoDoMeio » ClasseBaralhoIteracaoFinal

-- AndreGermanoRegert - 07 Jul 2005


/*
 * Criado em 01/07/2005
 */
package jogoDoMeio;

import java.util.Random;

/**
 * @author André Germano Regert
 *          Jader Wallauer
 */
public class Baralho {
   
   final int maximoDeCartas;
   final int numeroDeNaipes;
   final int cartasPorNaipe;
   protected boolean embaralhado;
   int[] monte;
   public int totalDeCartas;
   
   public Baralho(int naipes, int cartas){
      assert naipes == 4 : "O baralho precisa ter 4 naipes";
      numeroDeNaipes = naipes;

      assert cartas == 52 : "O baralho precisa ter 52 cartas";
      maximoDeCartas = cartas;
      totalDeCartas = maximoDeCartas;
      cartasPorNaipe = maximoDeCartas/numeroDeNaipes;
      
      this.MontarMonte();
   }
   
   public boolean MonteEstaCompleto(){
      return totalDeCartas == 52;
   }
   
   private int TotalDeNaipes(){
      return numeroDeNaipes;
   }
   
   public void MontarMonte(){
      monte = new int[maximoDeCartas];
      for (int carta = 0; carta < maximoDeCartas; carta++) {
         monte[carta] = carta + 1;
      }
      embaralhado = false;
      totalDeCartas = 52;
   }
   
   public void Embaralha(){
      if (this.MonteEstaCompleto()) {
         Random proxima = new Random();
         for (int i = 0; i < 520; i++) {
            int umaCarta = proxima.nextInt(maximoDeCartas);
            int outraCarta = proxima.nextInt(maximoDeCartas);
            int carta = monte[umaCarta];
            monte[umaCarta] = monte[outraCarta];
            monte[outraCarta] = carta;
         }
         embaralhado = true;
      }
   }
   
   public boolean EstaEmbaralhado(){
      return embaralhado;
   }
   
   public int TiraCarta(){
      assert (totalDeCartas > 0) : "O baralho acabou!"; 
      return monte[--totalDeCartas];
   }
   
   public String QualEACarta(int carta){
      assert (1 <= carta) && (carta <= maximoDeCartas): "Esta carta não existe"; 
      String nomeDaCarta = new String();
      nomeDaCarta = this.IdentificaValor(carta);
      nomeDaCarta = nomeDaCarta + " de ";
      nomeDaCarta = nomeDaCarta + this.IdentificaNaipe(carta);
      return nomeDaCarta.toString();
   }
   
   public String IdentificaValor(int carta){
      int aCarta = valorInteiro(carta);
      String valor = new String();
      switch (aCarta) {
         case 1: valor = "Ás"; break;
         case 2: valor = "Dois"; break;
         case 3: valor = "Três"; break;
         case 4: valor = "Quatro"; break;
         case 5: valor = "Cinco"; break;
         case 6: valor = "Seis"; break;
         case 7: valor = "Sete"; break;
         case 8: valor = "Oito"; break;
         case 9: valor = "Nove"; break;
         case 10: valor = "Dez"; break;
         case 11: valor = "Valete"; break;
         case 12: valor = "Dama"; break;
         case 13: valor = "Rei"; break;
      default: 
         break;
      }
      return valor;
   }

   private String IdentificaNaipe(int carta){
      int naipe = carta / cartasPorNaipe;
      if ((carta % cartasPorNaipe) == 0){
         naipe--;
      }
      String valor = new String();
      switch (naipe) {
         case 0: valor = "Ouro"; break;
         case 1: valor = "Espada"; break;
         case 2: valor = "Copas"; break;
         case 3: valor = "Paus"; break;
      default: 
         break;
      }
      return valor;
   }

   public int valorInteiro(int carta) {
      int aCarta = carta % cartasPorNaipe;
      if (aCarta == 0) {
         aCarta = 13;
      }
      return aCarta;
   }
}

E D U G R A F - Laboratório de Software Educacional - UFSC - CTC - INE
Campus Universitário - Trindade, Florianópolis, SC, Brasil 88040-090
Fone: +55 48 331 9735 / Fax: +55 48 331-9770