Duda con Random C#

Iniciado por Bob1098, 10 Mayo 2014, 22:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Bob1098

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:

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?

El Benjo

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 (csharp) [Seleccionar]
private void mobTimer_Tick(object sender, EventArgs e)
        {
            Point position = new Point(x.Next(0, gamePanel.Width-mobLabel.Width), y.Next(0, gamePanel.Height-mobLabel.Height));
            mobLabel.Location = position;
        }


Y nos dices si es lo que esperabas. Saludos.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Bob1098

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)

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

El Benjo

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 (csharp) [Seleccionar]
y.Next

Por:

Código (csharp) [Seleccionar]
x.Next
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Bob1098

Efectivamente =D. Muchas gracias por la respuesta, ya intuía que debía ser algo de eso.


Saludos y gracias.