Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: millansoft en Diciembre 01, 2015, 03:39:37 AM

Título: Ordenar arrays
Publicado por: millansoft en Diciembre 01, 2015, 03:39:37 AM
Hola,

Les hago una consulta, estoy haciendo un juego donde tengo varias variables con arrays que son Jugadores que elijo al azar.
De los 40 que elijo al azar, los reparto en 5 tablas que seria cada una, una division de una liga, 1ra, 2da, 3ra, 4ta y 5ta.
Cada jugador que es una variable con arrays, tienen entre varios valores, 2 en particular, uno con el puntaje que mostraria en la tabla y otro valor que contiene a que liga pertenece de las 5.
Creo que es con Ds_lists que se hace, queria ordenarlos segun el puntaje y la tabla a la que corresponde.

Por ejemplo:

LigaJ1[7] = 10;
LigaJ2[7] = 7;
LigaJ3[7] = 3;
LigaJ4[7] = 6;
LigaJ5[7] = 9;
LigaJ6[7] = 5;
LigaJ1[6] = 1;
LigaJ2[6] = 1;
LigaJ3[6] = 1;
LigaJ4[6] = 2;
LigaJ5[6] = 2;
LigaJ6[6] = 2;

El valor [7] contiene el puntaje para ser ordenado de mayor a menor, y el valor [6] a que division/tabla pertenece, alguien tiene idea de como hacerlo?

Gracias!
Título: Re:Ordenar arrays
Publicado por: penumbra en Diciembre 01, 2015, 03:54:31 AM
¿A qué le llamas "variable con array"? No entiendo, por ejemplo, cuando dices:

Cita de: millansoft en Diciembre 01, 2015, 03:39:37 AM
Cada jugador que es una variable con arrays

Lo que entiendo es que tienes 6 arreglos. LigaJ1 a Liga J6. Y que quieres ordenar el octavo elemento [7] de esos arreglos

Lo que quieres hacer es:

a) ¿Ordenar los valores y olvidarme de a qué arreglo (liga) corresponde ese valor, por ejemplo (3, 5, 6, 7, 9, 10) sin saber a qué liga pertenece el 3, el 5, etc.?

o

b) ¿Ordenar los valores (3, 5, 6, 7, 9, 10) y saber que el 3 pertenece a la ligaJ3, el 5 a la ligaJ6, etc?
Título: Re:Ordenar arrays
Publicado por: millansoft en Diciembre 01, 2015, 04:05:17 AM
Hola,

Me exprese mal, me referia a que cada jugador lo tengo definido en una variable que es un array.

LigaJ1[0] = nombre
LigaJ1[1] = edad;
etc.

Mi idea es que lo siguiente:

LigaJ1[7] = 4;
LigaJ2[7] = 6;
LigaJ3[7] = 3;
LigaJ4[7] = 8;
LigaJ5[7] = 9;
LigaJ6[7] = 5;
LigaJ1[6] = 1;
LigaJ2[6] = 2;
LigaJ3[6] = 1;
LigaJ4[6] = 2;
LigaJ5[6] = 1;
LigaJ6[6] = 2;

Quede ordenado de la siguiente manera al mostrarlo:

Tabla 1:
Posiciones:
1-LigaJ5 - 9 puntos
2-LigaJ1 - 4 puntos
3-LigaJ3 - 3 puntos

Tabla 2:
Posiciones:
1-LigaJ4 - 8 puntos
2-LigaJ2 - 6 puntos
3-LigaJ6 - 5 puntos

Tanto los puntajes como la pertenencia a la tabla puede variar, como podria hacer en GML que los ordene con esa logica?

Gracias!
Título: Re:Ordenar arrays
Publicado por: Guacusio en Diciembre 01, 2015, 05:46:39 AM
Yo te sugiero que en vez de usar muchos arrays de 1 dimensión utilices un grid, donde cada fila represente a un jugador y cada columna represente un tipo de dato. Una vez tienes armado el grid, puedes ordenarlo usando cualquier columna como referencia mediante ds_grid_sort.
Título: Re:Ordenar arrays
Publicado por: penumbra en Diciembre 01, 2015, 07:25:20 AM
La sugerencia que te da Guacusio probablemente sea la mejor, ya que con una sola línea de código conseguirías ordenar por puntaje, por ejemplo. Los otros métodos que se me han ocurrido implican usar demasiado código. Como habías mencionado, las listas se pueden ordenar, pero esa función sólo ordena una lista (registro) individual, y tú quieres que al ordenar por puntos, aparezca información adicional que no está incluída en ese registro (a qué liga pertenece el puntaje). Es cierto que también, conociendo un puntaje, se puede buscar la entrada en una lista, pero el tema se complica si es que hay puntajes iguales o  repetidos (lo cual es muy probable que ocurra)

Probé otro método basado en arreglos, y funciona, pero es muy engorroso, porque se necesita implementar un algoritmo de ordenamiento para distinguir entre un valor menor y uno mayor, y además de ordenar los puntajes, también mover los nombres "LigaJ1", "LigaJ2" arriba o abajo, según se haya movido el puntaje asociado. En resumen, demasiado código para lograr algo que se hace llamando a la función que te mencionó Guacusio.
Título: Re:Ordenar arrays
Publicado por: millansoft en Diciembre 01, 2015, 07:32:41 PM
Hola,

Gracias por la ayuda, no tenia presente lo de los grid, voy a ver como se manejan.

Saludos!
Título: Re:Ordenar arrays
Publicado por: millansoft en Diciembre 01, 2015, 11:55:52 PM
Queria agradecer por la recomendacion de los grid, no lo estaba teniendo en cuenta en el GML y me soluciono varias cosas de paso  ;)