Jump to content
yhuj

Valores al azar diferente uno del otro

Recommended Posts

Buenas, soy consciente que la pregunta que voy hacer puede ser tonta, pero no sé porque no me sale. Perdón por mi ignorancia. Estoy probando de hacer cinco variables int las cuales generen cada una un número al azar del 0 al 10, con la condición que los cinco valores al azar sean diferentes, que ninguno se repita.

El caso es que he estado probando con tres variables con un rango del 0 al 3 para ver si me salía ya que así es más fácil, para después trasladarlo a cinco variables con un rango del 0 al 10, que es como me interesa.

Esta era mi prueba fallida:

	private int _vA;
	private int _vB;
	private int _vC;

	void Start ()
	{
		_vA = Random.Range(0, 3);

	}
		
	void Update()
	{
		if (_vA == _vB)
		{
			_vB = Random.Range(0, 3);
		}

		if (_vA == _vA && _vA ==_vB)
		{
			_vC = Random.Range(0, 3);
		}

		Debug.Log (_vA);
		Debug.Log (_vB);
		Debug.Log (_vC);
	}

Había pensado que el valor B probase un número al azar hasta que este fuese diferente de A; e igual con C, que pruebe un valor hasta que sea diferente de A y B. Pero no sé poruque no funciona.

¿Qué está incorrecto? ¿Cómo podría lograr esto?

Muchas gracias de antemano.

Share this post


Link to post
Share on other sites

Lo que tendrias que hacer es realizar una lista con los elementos ya utilizados. 

public class Random
{
	private Stack<int> _last = new Stack<int>();

	public bool Get(int min, int max, out int r)
	{
		for(int i = min; i < max; i++)
		{
			r = UnityEngine.Random.Range(min, max);
			if(!_last.Contains(r))
             {
               _last.Push(r);
               return true;
             }
		}		
		r = 0;
		return false;
	}

	public void Reset()
	{
		_last.Clear();
	}
}

Para utilizarlo haz lo siguiente -


private Random myRandom = new Random();

public void Update()
{
	int val;
	if(myRandom.Get(0,10, out val))
	{
		Debug.LogFormat("El valor utilizado es " + val);
	}
	else
	{
		Debug.Log("No se encuentran valores disponibles");
		Debug.Log("Reiniciando");
		myRandom.Clear();
	}
}

 

@pioj Podrías integrar un sistema de CODDING diferente, este es un asco.

Edited by francoe1

Share this post


Link to post
Share on other sites
hace 4 horas, yhuj said:

cinco variables int las cuales generen cada una un número al azar del 0 al 10, con la condición que los cinco valores al azar sean diferentes

es un problema muy comun, haces un array de 1 a 10 y lo revuelves intercambiando elementos aleatoriamente, luego tomas los 5 primeros o los que necesites

// inicias
var lista = new int[10];
for (var i = 0; i < lista.length; i++) lista[i] = i;
                                 
// revuelves
for (var i = 0; i < lista.length; i++) {
	var i1 = random.range(lista.length);
	var temp = lista[i];
	lista[i] = lista[i1];
	lista[i1] = temp;
}

// tomas los valores
mi_variable1 = lista[0];
mi_variable2 = lista[1];
mi_variable3 = lista[2];
mi_variable4 = lista[3];
mi_variable5 = lista[4];

 

Share this post


Link to post
Share on other sites

Sorry @francoe1, es lo mejor que he encontrado. Si consigues un "pastebin" BUENO para IPB 4.1, te lo admito como plugin. Mientras tanto...

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...