Como criar algoritmo de probabilidade que seja controlável

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 :slight_smile:

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