Función para desordenar un array/sctruct?

Started by Erkosone, March 16, 2012, 10:30:47 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone

Hola buenas, he estado mirando la documentación del lenguaje y no he encontrado ninguna función que desordene aleatoriamente un array o una estructura en función de uno de sus campos.
He visto que para ordenación está bastante completa la cosa, hay 3 funciones distintas, pero para desordenar no he sido capaz de encontrar nada al respecto.


Tiene el lenguaje alguna función para desordenar aleatoriamente un vector o struct?


Lo que quiero hacer es desordenar una baraja de cartas, tengo las los datos de las cartas de esta manera:



   STRUCT BARAJA_DE_10[9];     
        INT _CARTA;
        STRING _LETRA;             
   END


en el campo_carta guardo un código identificador de un gráfico que corresponde a la carta,algo así como: 1,1,2,2,3,3,4,4,5,5, que representan las 5 parejas de una baraja de 10 cartas, y en _letra guardo algo así: a,a,b,b,c,c,d,d,e,e;      y lo que me gustaría hacer es desordenar la estructura en función del campo _letra pero no he sido capaz de encontrar algo con lo que hacerlo de forma automática.




SplinterGU

no, para desordenar nada... es una caracteristica rara...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Ok, voy a hacerla para el juego que estoy montando y la colgaré el recursos por si le sirve a alguien.

KeoH

para desordenar lo unico q se me ocurre es q tengas otra struct con 10 registros, te creas una funcion que elija aleatoriamente un registro de la primera struct y te lo meta en otro aleatorio de la segunda struct, luego cuando ya tienes la segunda struct hecha pero aleatoriamente ordenados, haces una copia a la primera struct registro por registro.


Espero te sirva.

Yawin

O más facil, sacas números aleatorios entre 0 y la posición máxima de la array y los vas intercambiando.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Erkosone

Quote from: Yawin on March 17, 2012, 10:08:32 AM
O más facil, sacas números aleatorios entre 0 y la posición máxima de la array y los vas intercambiando.


Si, en algo así he estado pensando, creo que será la solución mas simple, por ejemplo para asegurar la aleatoriedad hacer 50 cambios mas o menos asi:
Gracias por las ideas.  :-*

Erkosone

#6
Al final lo he montado exactamente como decia Yawin, y funciona perfecto  ;D




Por si a alguien le sirve en el futuro cuelgo el source de la función, es sencillo modificarla para cualquier uso personal.



No sale bien el código no se por que, lo dejo como un archivo de texto mejor.