Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: yhuj en Enero 13, 2018, 11:39:54 AM

Título: Valores al azar diferente uno del otro
Publicado por: yhuj en Enero 13, 2018, 11:39:54 AM
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.
Título: Valores al azar diferente uno del otro
Publicado por: francoe1 en Enero 13, 2018, 02:24:22 PM
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.
Título: Valores al azar diferente uno del otro
Publicado por: Braltor en Enero 13, 2018, 04:33:44 PM
Cita de: yhuj date=1515839994cinco 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;
                                 
// revuelves
for (var i = 0; i < lista.length; i++) {
var i1 = random.range(lista.length);
var temp = lista;
lista = 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];

 
 
Título: Valores al azar diferente uno del otro
Publicado por: pioj en Enero 14, 2018, 07:31:48 PM
Sorry @francoe1, es lo mejor que he encontrado. Si consigues un "pastebin" BUENO para IPB 4.1, te lo admito como plugin. Mientras tanto...
Título: Valores al azar diferente uno del otro
Publicado por: francoe1 en Enero 14, 2018, 09:19:43 PM
Cita de: pioj date=1515954708Sorry @francoe1, es lo mejor que he encontrado. Si consigues un "pastebin" BUENO para IPB 4.1, te lo admito como plugin. Mientras tanto...
   


https://github.com/sketchfab/ckeditor-plugin (https://github.com/sketchfab/ckeditor-plugin)
 
En el apartado de ejemplos tenes una integración con IPB