Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Bob1098 en 10 Mayo 2014, 22:02 pm



Título: Duda con Random C#
Publicado por: Bob1098 en 10 Mayo 2014, 22:02 pm
Hola a todos. El problema es que necesito que un label cambie su posición en un panel de forma aleatoria, con ayuda de un timer. Lo he conseguido a medias, es decir, el label hace un movimiento en diagonal alo largo del panel, y es como si hubiera un eje diagonal imaginario que impide que aperezca por ejmplo en la esquina opuesta. El fragmento de código que he hecho para generar la posición aleatoria es este:

Código:
private void mobTimer_Tick(object sender, EventArgs e)
        {
            Point position = new Point(x.Next(mobLabel.Width, gamePanel.Width-mobLabel.Width), y.Next(mobLabel.Height, gamePanel.Height-mobLabel.Height));
            mobLabel.Location = position;
        }

Los random x e y los he inicializado al principio del código.

A alguien se le ocurre por que ese movimiento diagonal? Es por que el ramdon genera los números asi?


Título: Re: Duda con Random C#
Publicado por: El Benjo en 11 Mayo 2014, 00:18 am
Se debe a que asignas un mínimo de acuerdo al alto y al ancho de tu label. Cambia el código por este

Código
  1. private void mobTimer_Tick(object sender, EventArgs e)
  2.        {
  3.            Point position = new Point(x.Next(0, gamePanel.Width-mobLabel.Width), y.Next(0, gamePanel.Height-mobLabel.Height));
  4.            mobLabel.Location = position;
  5.        }

Y nos dices si es lo que esperabas. Saludos.


Título: Re: Duda con Random C#
Publicado por: Bob1098 en 11 Mayo 2014, 11:43 am
Gracias por la ayuda, pero sigue haciendo exactamente lo mismo. Es extraño por que el label aparece respecto a una diagonal como si fuera un eje y no se sale de ella. Es algo así mas o menos, pero al revés (la dioganal va desde la esquina superior izquierda hasta la inferior derecha)(http://kateyestudio.com/wordpress/wp-content/uploads/2012/04/Diagonal-Diagram-2.jpg)

Yo creo que el problema no esta en los límites de las coordenadas, sino en el propio random de los números...


Título: Re: Duda con Random C#
Publicado por: El Benjo en 12 Mayo 2014, 06:35 am
Creo saber a qué se debe, tiene algo que ver con la semilla para generar los números aleatorios. Ocurre algo con la clase random y es que siempre te saldrán los mismos resultados en el mismo orden. Es decir que si a la séptima vez de generar un número aleatorio te sale un 10, con otro objeto ramdom creado con la misma semilla a la séptima vez te saldrá también un número 10.

En vez de crear dos objetos random (X y Y) Utiliza uno solo para asignar el valor de X y Y. Cambia el:

Código
  1. y.Next

Por:

Código
  1. x.Next


Título: Re: Duda con Random C#
Publicado por: Bob1098 en 12 Mayo 2014, 16:40 pm
Efectivamente =D. Muchas gracias por la respuesta, ya intuía que debía ser algo de eso.


Saludos y gracias.