--
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;
}
}