Oi gente, estou fazendo um jogo para android e preciso de uma ajuda para criar um algoritmo de probabilidade que seja controlavel.
Em meu jogo tenho 2 tipos de monstros que são escolhidos aleatoriamente para o jogador enfrentar, porém o algoritmo de escolha desses monstros é puramente aleatório.
String target = "";
double a=Math.random();
if (a > 0.5)
{
target = "monstro1";
} else
{
target = "monstro2";
}
System.out.print("x: "+target);
Esse algoritmo tem chance de 50% sair o monstro1 e 50% de chance de sair o monstro2.
Porém em meu jogo tenha cerca de 10 niveis diferentes e gostaria de controlar a quantidade de monstros que são usados dependendo de cada nivel do jogo.
Por exemplo, no nivel 1 saem 20 monstros1 e nenhum monstro2, no nivel 2 saem 15 monstros1 e 2 monstros2.
Alguém poderia dar uma ajuda com o algoritmo, pois não faço ideia de como criá-lo.
É bem simples. Vou dar até um exemplo mais complicado, porque você vai querer ter mais monstros, certo?
Digamos que o monstro:
A - 50%
B - 20%
C - 13%
D - 10%
E - 7%
Total: 100%
Vamos passar isso para um número entre 0 e 1. Teremos, para as probabilidades:
A - 0.50
B - 0.20
C - 0.13
D - 0.10
E - 0.07
Total: 1.0
O segredo é trabalhar com probabilidades acumuladas. Para o caso acima, teremos:
A - 0.50
B - 0.50 + 0.20 = 0.70
C - 0.50 + 0.20 + 0.13 = 0.83
D - 0.50 + 0.20 + 0.13 + 0.10 = 0.93
E - 0.50 + 0.20 + 0.13 + 0.10 + 0.07 = 1.00
Ou seja, você sorteia um número de 0.0 até 1.0.
Se o número estiver entre 0.0 e 0.50, o monstro escolhido é A.
Se o número estiver entre 0.50 e 0.70, o monstro escolhido é B.
Se o número estiver entre 0.70 e 0.83, o monstro escolhido é C.
Se o número estiver entre 0.83 e 0.93, o monstro escolhido é D.
Senão, o monstro escolhido é E.
Certo? Mais fácil que isso só escrevendo em Java
1 curtida
Oi, seu algoritmo é realmente bom, inclusive vc adiantou a pergunta que eu iria fazer se fosse adicionar mais monstros em vez de ter apenas 2 tipos.
Vlw, obrigado pela ajuda.
Deixo aqui o algoritmo que criei para quem quiser usar
String target = "";
int enemies=20;
double[] za ;
za = new double[enemies];
double monstroA = 0.5;
double monstroB = 0.3;
double monstroC = 0.2;
for(int i=0;i<enemies;i++){
za[i]=Math.random();
if (za[i] <= monstroA)//0.0 e 0.5
{
target = "monstro1";
} else if (za[i] <= monstroA+monstroB)//0.5 e 0.9
{
target = "monstro2";
} else if (za[i] <= monstroA+monstroB+monstroC)//0.9 e 1.0
{
target = "monstro3";
}
System.out.println("x: "+target+" - "+za[i]);
}