Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kaliman777 en Mayo 30, 2011, 02:07:59 PM

Título: ?C?mo saco 30 objetos de 90 posibles, sin repetir ninguno?
Publicado por: kaliman777 en Mayo 30, 2011, 02:07:59 PM
Hola:

El t?tulo dice todo. Tengo 90 bolas de mi juego de bingo y deben salir 30 con presionar un bot?n. ?C?mo las saco, sin repetir ninguna?

Cada bola que salga se crear? en la posici?n 16,135 y luego recorren un path, eso ya est? arreglado. Solo me falta el sacar 30 diferentes en cada tirada. Cabe destacar que estoy usando un time line para que salgan cada bola cada 20 step.

Hasta ahora hice que un time line me tire las 30 bolas, seleccionando al azar una de cada cinco posibles cada 20 steps, pero eso me da que siempre salga una del 1 al 5, luego viene otra del 6 al 10 y as?, algo il?gico, me las tira en orden, y la verdad deber?a salir en cualquier orden de tama?o. Hasta la n?mero 90 de primero de ser posible.

Gracias.
Título: Re: ?C?mo saco 30 objetos de 90 posibles, sin repetir ninguno?
Publicado por: Wadk en Mayo 30, 2011, 09:32:30 PM
La mejor forma que se me ocurre es con una lista de prioridad.

Primero cre?s la lista y le agreg?s todos los valores.
Si ten?s un objeto para cada bola, la cosa se vuelve un tanto tediosa:
[gml]list = ds_priority_create();
ds_priority_add(list, 0, objBall0);
ds_priority_add(list, 1, objBall1);
...
ds_priority_add(list, 89, objBall89);[/gml]

Si ten?s uno solo, pod?s hacer as?:
[gml]list = ds_priority_create();
for (i = 0; i < 90; i += 1) {
    ds_priority_add(list, i, i);
}[/gml]

Despu?s, para elegir una bola:
[gml]var idball, ball;
idball = floor(random(ds_priority_size(list));
ball = ds_priority_find_priority(list, idball);
ds_priority_delete_value(list, idball);[/gml]
Y a continuaci?n de eso, para crear la bola:
[gml]instance_create(x, y, ball);[/gml]
O en caso de que tengas un solo objeto para todas las bolas, seguramente quieras hacer algo como...
[gml]with (instance_create(x, y, ball)) {
    number = idball;
}[/gml]

Nunca us? colas de prioridad (ni ninguna estructura de datos) en GM. La informaci?n para hacer el post la saqu? de ac? (http://www.comunidadgm.org/manual_GM/Colas_de_prioridad.htm).
Título: Re: ?C?mo saco 30 objetos de 90 posibles, sin repetir ninguno?
Publicado por: Zeit en Mayo 31, 2011, 12:44:50 AM
Hola, aqui un ejemplo que hice para otro topico, crea una lista de enteros sin repetirse pero facilmente lo puedes modificar para objetos, sprites, paths, etc... saludos.

http://www.comunidadgm.org/index.php?action=dlattach;topic=13803.0;attach=8346 (http://www.comunidadgm.org/index.php?action=dlattach;topic=13803.0;attach=8346)
Título: Re: ?C?mo saco 30 objetos de 90 posibles, sin repetir ninguno?
Publicado por: kaliman777 en Mayo 31, 2011, 02:45:21 PM
Gracias Wadk y Zeit. Los c?digos de Wadk est?n un poco por encima de mi capacidad, pero s? que son muy buenos. Los ir? aplicando y cuando surja la dificultad, le pido asesor?a. La verdad, tengo un objeto para cada bola y eso lo hace tedioso. Lo hice as? porque cada bola deber? compararse con cada n?meo en el cart?n para ver las coincidencias y los pagos.

Trabajo en eso a ver qu? me conviene.

Gracias a ambos.