Galera,
Já pesquisei no Google, aqui no fórum e não consegui vencer a minha ignorancia! Como eu faria um método para embaralhar um HashMap de cartas?
Eu tinha achado uns tutos falando do método shuffle() de Collections, mas ele não funciona quando uso HasMap, só funciona com ArrayList. É isso mesmo?
O gargalo do meu código está no método “public void embaralharCartas()”.
[size=9]P.S: Não reparem na documentação, é a primeira vez que eu estou fazendo comentários assim, então se tiver muito ruim, peguem leve! Rsrsrsrs. Brincadeira. Pode escraxar![/size]
[code]import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/**
- Classe responsável pela criação de um baralho.
/
public class Baralho {
/*
* HashMap de Carta
* @access private
* @var Carta
*/
private HashMap<String, Carta> cartas = new HashMap<String, Carta>();
/**
* Construtor da classe Baralho.<p>
* Inicializa o Atributo <b>cartas</b>.
*/
public Baralho(){
//naipe de copas
this.cartas.put("acopas", new Carta("Copas","acopas.gif", 14, 11));
this.cartas.put("2copas", new Carta("Copas","2copas.gif", 2, 0));
this.cartas.put("3copas", new Carta("Copas","3copas.gif", 3, 0));
this.cartas.put("4copas", new Carta("Copas","4copas.gif", 4, 0));
this.cartas.put("5copas", new Carta("Copas","5copas.gif", 5, 0));
this.cartas.put("6copas" ,new Carta("Copas","6copas.gif", 6, 0));
this.cartas.put("7copas", new Carta("Copas","7copas.gif", 7, 10)) ;
this.cartas.put("jcopas", new Carta("Copas","jcopas.gif", 12, 3));
this.cartas.put("qcopas", new Carta("Copas","qcopas.gif", 11, 2));
this.cartas.put("kcopas", new Carta("Copas","kcopas.gif", 13, 4));
//naipe de paus
this.cartas.put("apaus", new Carta("Paus","apaus.gif", 14, 11));
this.cartas.put("2paus", new Carta("Paus","2paus.gif", 2, 0));
this.cartas.put("3paus", new Carta("Paus","3paus.gif", 3, 0));
this.cartas.put("4paus", new Carta("Paus","4paus.gif", 4, 0));
this.cartas.put("5paus", new Carta("Paus","5paus.gif", 5, 0));
this.cartas.put("6paus" ,new Carta("Paus","6paus.gif", 6, 0));
this.cartas.put("7paus", new Carta("Paus","7paus.gif", 7, 10)) ;
this.cartas.put("jpaus", new Carta("Paus","jpaus.gif", 12, 3));
this.cartas.put("qpaus", new Carta("Paus","qpaus.gif", 11, 2));
this.cartas.put("kpaus", new Carta("Paus","kpaus.gif", 13, 4));
}
/**
* Método que retorna um Hashmap com o baralho completo.
* @return Baralho completo.
* @access public
*/
public HashMap getBaralho(){
return this.cartas;
}
/**
* Método que recupera uma carta específica do baralho da chave do HasMap
* @param chave Chave do HashMap.
* @return Objeto Carta.
* @access public
*/
public Carta getCarta(String chave){
return this.cartas.get(chave);
}
/**
* Método que embaralha as cartas
* @return HashMap de cartas.
* @access public
*/
public void embaralharCartas(){
//Aqui que o bicho pega!!!Socorrroo!!
}
}
[/code]
Classe Carta:
[code]public class Carta {
/**
* Valor de pontuação da carta.
* @access private
* @var int
*/
private int valorPontuacao;
/**
* Número de ordem da carta em relação ao baralho convencional. No caso do jogo Sueca esta ordem é alterada
* para respeitar as regras do jogo.
* @access private
* @var int
*/
private int numeroCarta;
/**
* Indica qual o naipe da carta.
* @access private
* @var String
*/
private String naipe;
/**
* Recebe o nome do arquivo de imagem que representa a carta na interface gráfica.
* @access private
* @var String
*/
private String nomeDoArquivo;
/**
* Construtor da classe Carta.
* Inicializa as variáveis de classe com os valores passados pelo parâmetro.
* @param naipe Passa um String com o valor do naipe da carta.
* @param nomeDoArquivo Passa um String com o valor do nome do arquivo de imagem.
* @param numeroCarta Passa um Int com o número de ordem da carta em relação ao baralho convencional.
* @param valorPontuacao Passa um Int com o valor de pontos que a carta representa.
*/
public Carta(String naipe,String nomeDoArquivo, int numeroCarta, int valorPontuacao){
this.naipe = naipe;
this.numeroCarta = numeroCarta;
this.valorPontuacao = valorPontuacao;
this.nomeDoArquivo = nomeDoArquivo;
}
/**
* Método que retorna o Valor de Pontuação de uma Carta.
* @return Valor de Pontuação do tipo.
*/
public int getValorPontuacao(){
return this.valorPontuacao;
}
/**
* Método que retorna o Número de Ordem da carta.
* @return Número da Carta do tipo.
*/
public int getNumeroCarta(){
return this.numeroCarta;
}
/**
* Método que retorna o Naipe da carta.
* @return Naipe da carta.
*/
public String getNaipe(){
return this.naipe;
}
/**
* Método que retorna o Nome do Arquivo que representa a carta na interface gráfica.
* @return Nome do Arquivo.
*/
public String getnomeDoArquivo(){
return this.nomeDoArquivo;
}
}
[/code]
Classe principal:
[code]import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
public class Principal {
public static void main(String[] args) {
Baralho baralho = new Baralho();
int contador =0;
baralho.embaralharCartas(); //Só para testar, eu queria que a cada execução, me retornasse um baralho embaralhado.
//cria o iterator
Iterator it = baralho.getBaralho().keySet().iterator();
while (it.hasNext()) {
//pega as chaves
String chave = (String) it.next();
//pega os valores
Carta valor = (Carta) baralho.getBaralho().get(chave);
System.out.println(contador+"Naipe: "+valor.getNaipe()
+"| Nome do Arquivo: "+valor.getnomeDoArquivo()
+"| Numero da Carta: "+valor.getNumeroCarta()
+"| Valor da Pontuacao: "+valor.getValorPontuacao()
);
contador++;
}
}
}
[/code]