Olá, sou iniciante em JAVA e estou querendo desenvolver um joguinho de cartas, mas antes estou fazendo alguns testes e estudos relacionados a geração de números aleatórios e probabilidade.
No teste que estou fazendo eu quero que o computador “puxe” uma carta de um baralho de 32 cartas de 5 tipos diferentes(a, b, c, d, e) , sendo que no baralho há 10 cartas do tipo “a”, 8 cartas do tipo “b”, “6” cartas do tipo “c”, 4 cartas do tipo “d” e 4 do tipo “e”. A minha dificuldade está sendo a probabilidade do computador de tirar uma determinada carta, por exemplo, como há mais cartas do tipo “a” o computador tem mais chances de tirar esse tipo, porém, depois de tirada a carta a probabilidade muda, como eu poderia fazer pra ele sempre tirar uma carta com chances reais e de forma aleatória de acordo com a quantidade de cada tipo?
Eu criaria uma classe Carta
:
public class Carta {
public final char tipo;
public final int numero;
public Carta(char tipo, int numero) {
this.tipo = tipo;
this.numero = numero;
}
@Override
public String toString() {
return "Carta " + tipo + " " + numero;
}
}
Uma classe Baralho
:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Baralho {
private final List<Carta> cartas = new ArrayList<>();
public void adicionar(Carta... cartas) {
this.cartas.addAll(Arrays.asList(cartas));
}
public Carta sortear() {
if (cartas.isEmpty()) {
throw new IllegalStateException("Baralho vazio!");
}
int limite = cartas.size();
int posicao = new Random().nextInt(limite);
Carta sorteada = cartas.remove(posicao);
return sorteada;
}
public boolean vazio() {
return cartas.isEmpty();
}
}
E executaria mais ou menos assim:
public class Exemplo {
public static void main(String[] args) throws Exception {
Exemplo programa = new Exemplo();
programa.executar();
}
public void executar() {
Baralho baralho = criarBaralho();
int contador = 0;
while (!baralho.vazio()) {
contador++;
Carta sorteada = baralho.sortear();
System.out.println(contador + ": " + sorteada);
}
}
private Baralho criarBaralho() {
Baralho baralho = new Baralho();
baralho.adicionar(criarCartas(10, 'a'));
baralho.adicionar(criarCartas(8, 'b'));
baralho.adicionar(criarCartas(6, 'c'));
baralho.adicionar(criarCartas(4, 'd'));
baralho.adicionar(criarCartas(4, 'e'));
return baralho;
}
private Carta[] criarCartas(int quantidade, char tipo) {
Carta[] cartas = new Carta[quantidade];
for (int i = 0; i < quantidade; i++) {
cartas[i] = new Carta(tipo, (i + 1));
}
return cartas;
}
}
Muito obrigado pela sua ajuda, consegui compreender o seu código e resolver o problema, VLW!!!
1 curtida